Redis увеличивает числовое значение - значение ERR не является целым числом или находится вне диапазона - PullRequest
0 голосов
/ 25 октября 2018

Redis incr функция работает беспорядочно.При попытке увеличить любой положительный целочисленный ключ, который еще не был установлен, это приводит к следующей ошибке.Однако, если сначала установить его на set, а затем увеличить incr для того же ключа, проблема больше не возникает.Есть причина, почему он так себя ведет?Есть обходные пути?

127.0.0.1:6379[5]> incr 100
(error) ERR value is not an integer or out of range
127.0.0.1:6379[5]> incr '100'
(error) ERR value is not an integer or out of range
127.0.0.1:6379[5]> incr "100"
(error) ERR value is not an integer or out of range
127.0.0.1:6379[5]> set 100 1
OK
127.0.0.1:6379[5]> incr 100
(integer) 2

Это поведение верно только при увеличении несуществующих целочисленных ключей:

127.0.0.1:6379> get "ahmedov"
(nil)
127.0.0.1:6379> incr "ahmedov"
(integer) 1
127.0.0.1:6379> incr "ahmedov"
(integer) 2
127.0.0.1:6379> get 12.1
(nil)
127.0.0.1:6379> incr 12.1
(integer) 1
127.0.0.1:6379> get -1
(nil)
127.0.0.1:6379> incr -1
(integer) 1

1 Ответ

0 голосов
/ 25 октября 2018

Пока вы на самом деле не вызвали команду SET, вы пытались увеличить ключ с именем «100», который не содержал правильного представления целого числа.

После установки ключа с именем «100»'к строке "1", инкремент завершается успешно и возвращает 2 (1 + 1), как и ожидалось.

...