Событие по истечении срока действия ключа
Интересно, есть ли функция redis, которая позволяет мне получить все истекшие ключи (я имею в виду какое-то событие, которое дает мне возможность вернуть все завершающие записи). Целью этого является сохранение старых значений в другой базе данных. Я слышал, что это возможно с использованием механизма публикации, но Google не может помочь нам с этой идеей.
Ответы
Ответ 1
Текущая версия разработки redis содержит новую функцию: уведомления о ключах. Документация: http://redis.io/topics/notifications
Уведомления о ключах позволяют клиентам подписываться на Pub/Sub каналы, чтобы каким-либо образом получать события, влияющие на набор данных Redis.
Примерами событий, которые можно получить, являются следующие:
- Все команды, влияющие на данный ключ.
- Все ключи, получающие операцию LPUSH.
- Все ключи, заканчивающиеся в базе данных 0.
Будем надеяться, что он скоро станет стабильным.
BTW, это не будет очень полезно, если вы поможете вам сохранить значения истекших ключей. Когда истекает событие истечения срока действия, значение уже ушло.
Ответ 2
Встроенное истекшее событие, генерируемое уведомлением о ключевом пространстве, неточно. См. Последний раздел http://redis.io/topics/notifications
Ключи со временем для жизни связаны с Redis двумя способами:
-
Когда ключ получает доступ к команде и, как установлено, истек.
-
С помощью фоновой системы, которая ищет устаревшие ключи в фоновом режиме, поэтапно, чтобы иметь возможность также собирать ключи, которые никогда не доступ.
Истекшие события генерируются при доступе к ключу и как установлено, истекло одной из вышеуказанных систем, в результате чего не гарантируют, что сервер Redis сможет генерировать expired event в момент, когда ключевое время для жизни достигает значения нуль. Если никакая команда не нацеливает ключ постоянно, и есть много ключи с ассоциированным TTL, может быть значительная задержка между время, когда ключевое время жизни падает до нуля, и время, когда истек событие создается.
Чтобы полностью реализовать событие истечения срока действия, вам, возможно, придется реализовать его самостоятельно. Например, используя отсортированный список (или дерево AVL), отсортированный по времени истечения, и постоянное чтение хвоста списка (unqueue). Если читатель считает, что время истечения не достигнуто, оно спит (время истечения - сейчас). Таким образом, точность может контролироваться в течение 10 с мс.
Ответ 3
Используйте redis-scheduler
.
Вы можете найти здесь