Ошибка при использовании Redis с C#: значение не является целым числом или находится вне диапазона, sPort: 51410, LastCommand:

Следующий код ниже устанавливает ключ в redis с периодом истечения, если он не существует, и увеличивает его значение каждый раз, если ключ уже существует, код выдает исключение, когда я пытаюсь увеличить существующее значение ключа, то есть когда он входит в блок "Если"

Сообщение об исключении: значение не является целым числом или находится вне диапазона, sPort: 51814, LastCommand:

public bool SetKeyInRedis(string Id, double Amount)
    {
        bool b = false;

        try
        {
            string Key = "Id:" + Id;
            using (var redisClient = new RedisClient(RedisIPAddress,RedisPortNo))
            {
                if (redisClient.Exists(Key) == 1)
                {
                    redisClient.IncrByFloat(Key, Amount);
                    b = true;
                }
                else if (redisClient.Exists(Key) == 0)
                {
                    DateTime Today = DateTime.Now;
                    DateTime EndOfMonth = new DateTime(Today.Year, Today.Month, DateTime.DaysInMonth(Today.Year, Today.Month));

                    b = redisClient.Set<double>(Key, Amount, EndOfMonth);
                }
                else
                {
                    //to-do
                }
            }
        }
        catch (Exception Ex)
        {
            Console.WriteLine(Ex.Message);
        }

        return b;
    }

2 ответа

Решение

Разобрался с решением:

Я использовал более старую версию всех необходимых DLL- файлов ServiceStack для Redis, скачал новые версии всех необходимых DLL-файлов, и теперь он работает без нареканий.

INCRBYFLOAT ожидает, что приращение будет плавающим, а не двойным.

Проходить float amount, вместо double amountдвойная может не поддерживаться этой командой.

Другие вопросы по тегам