Срок действия ключей Redis не истек
Мой сервер Redis не удаляет ключи, когда время жизни достигает 0.
Вот пример кода:
redis-cli
>SET mykey "ismykey"
>EXPIRE mykey 20
#check TTL
>TTL mykey
>(integer) 17
> ...
>TTL mykey
>(integer) -1
#mykey chould have expired:
>EXISTS mykey
>(integer) 1
>#oh still there, check its value
>GET mykey
>"ismykey"
Если я проверяю информацию, возвращаемую redis, она говорит, что срок действия ключей истек.
Любая идея?
Благодарю.
1 ответ
Поскольку вы делаете "...", трудно сказать наверняка, но я бы сказал, что вы устанавливаете mykey во время этой части, которая эффективно удалит срок действия.
Тайм-аут сбрасывается только тогда, когда ключ удаляется с помощью команды DEL или перезаписывается с помощью команд SET или GETSET.
Также относительно ответа -1 от TTL
Возвращаемое значение
Целочисленный ответ: TTL в секундах или -1, если ключ не существует или не имеет времени ожидания.
РЕДАКТИРОВАТЬ: Обратите внимание, что это поведение изменилось в Redis 2.8
Начиная с Redis 2.8, возвращаемое значение в случае ошибки изменяется:
Команда возвращает -2, если ключ не существует.
Команда возвращает -1, если ключ существует, но не имеет срока действия.
Другими словами, если ваш ключ существует, он кажется постоянным, то есть не имеет установленного срока действия.
РЕДАКТИРОВАТЬ: кажется, я могу воспроизвести это, если я создаю ключ на подчиненном сервере REDIS, ведомый не удалит ключ без основного ввода, так как обычно вы не будете создавать ключи локально на ведомом устройстве. Это тот случай, здесь?
Однако, хотя подчиненные устройства, подключенные к ведущему устройству, не будут независимо истекать ключи (но будут ждать, когда DEL поступит от ведущего устройства), они все равно будут принимать полное состояние срока действия, существующего в наборе данных, поэтому, когда ведомое устройство выбирается для Мастер сможет истекать ключи самостоятельно, полностью выступая в роли мастера.