мои ключи 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 ключей истекли.

есть идеи?

спасибо.

1 ответов


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

из руководства EXPIRE

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

кроме того, относительно ответа -1 от TTL

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

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

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

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

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

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

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