Подтвердить что ты не робот

Мои ключи 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, он говорит, чтостекло 0 ключей.

Любая идея?

спасибо.

4b9b3361

Ответ 1

Поскольку вы делаете "...", трудно сказать наверняка, но я бы сказал, что вы настраиваете mykey во время этой части, что эффективно удалит истечение.

В руководстве EXPIRE

Тайм-аут очищается только тогда, когда ключ удаляется с помощью DEL команда или перезапись с помощью команд SET или GETSET

Кроме того, что касается ответа -1 от TTL

Возвращаемое значение

Integer ответ: TTL в секундах или -1, когда ключ не существует или не имеет тайм-аута.

EDIT: обратите внимание, что это поведение изменилось в Redis 2.8

Начиная с Redis 2.8, возвращаемое значение в случае ошибки изменилось:
Команда возвращает -2, если ключ не существует.
Команда возвращает -1, если ключ существует, но не имеет срока действия.

Другими словами, если ваш ключ существует, он будет казаться постоянным, то есть не будет установлен срок действия.

EDIT: Кажется, я могу воспроизвести это, если я создам ключ на подчиненном сервере REDIS, ведомый не удалит ключ без главного ввода, так как обычно вы не будете создавать ключи локально на подчиненном устройстве. Здесь ли это?

Однако, пока ведомые устройства, подключенные к ведущему устройству, не истекут ключи независимо (но будет ждать DEL, исходящий от мастера), они по-прежнему будут иметь полное состояние истечений, существующих в dataset, поэтому, когда раб выбирается мастером, он сможет истекают ключи независимо, полностью действуя как мастер.