2013-02-01 2 views
15

Интересно, есть ли функция redis, которая позволяет мне получить все истекшие ключи (я имею в виду какое-то событие, которое дает мне возможность вернуть все завершающие записи). Целью этого является сохранение старых значений в другой базе данных. Я слышал, что это возможно с помощью механизма публикации, но Google не может помочь нам с этой идеей.Событие по истечении срока действия ключа

+0

это не то же самое, что ссылка на вышеуказанный комментарий. что речь идет о сеансах. это сообщение об энергозависимых ключах. – akonsu

ответ

18

Текущая версия разработки redis содержит новую функцию: уведомления о ключах. Документация: http://redis.io/topics/notifications

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

Примеры событий, которые можно получить, являются следующие:

  • Все команды, влияющие на данную клавишу.
  • Все ключи, получающие операцию LPUSH.
  • Все ключи, истекающие в базе данных 0.

Будем надеяться, что это сделает его стабильным в ближайшее время.

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

9

Встроенное истекшее событие, генерируемое уведомлением в виде ключа, неточно. Смотрите последний раздел http://redis.io/topics/notifications

Кис со временем, чтобы жить, связанные просрочены по Redis двумя способами:

  1. Когда ключ доступен по команде и установлено, что истек.

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

В истекшие события генерируются, когда ключ доступен и оказывается, истек срок действия одной из вышеупомянутых систем, в результате чего там нет никаких гарантий, что сервер Redis сможет генерировать expired event в момент, когда ключевое время для жизни достигает значения ноль. Если никакая команда не нацеливает ключ постоянно, и есть много ключей с ассоциированным TTL, может быть значительная задержка между временем, когда ключевое время жизни падает до нуля, и генерируется событие с истекшим сроком действия .

Чтобы полностью реализовать событие с истечением срока действия, вам, возможно, придется реализовать его самостоятельно. Например, используя отсортированный список (или дерево AVL), отсортированный по времени истечения, и постоянное чтение хвоста списка (unqueue). Если читатель считает, что время истечения не достигнуто, оно спит (время истечения - сейчас). Таким образом, точность может контролироваться в течение 10 с мс.

Смежные вопросы