2013-02-01 74 views
15

我在想redis中是否有一個特性讓我得到所有過期的密鑰(我的意思是某種事件,這讓我有機會收回所有過期的記錄)。它的目的是將舊值保存到另一個數據庫中。我聽說可以使用發佈機制,但谷歌無法幫助我們這個想法。密鑰過期事件

+0

它不是上述評論的鏈接相同。那個是關於會議的。這篇文章是關於易失性密鑰。 – akonsu

回答

18

當前的開發版本的redis包含一項新功能:密鑰空間通知。文檔:http://redis.io/topics/notifications

Keyspace通知允許客戶訂閱Pub/Sub通道,以便以某種方式接收影響Redis數據集的事件。這是可能的接收有以下事件

例子:

  • 所有影響到某個鍵的命令。
  • 接收LPUSH操作的所有密鑰。
  • 數據庫中的所有到期的0.1

希望的鑰匙,它很快就會使其穩定。

順便說一句,它不會幫助您保存過期密鑰的值非常有用。當到期事件被觸發時,該值已經消失。

9

由密鑰空間通知生成的內置過期事件不準確。見一起生活相關的兩種方式是通過Redis的過期時間http://redis.io/topics/notifications

鍵的最後一節:

  1. 當密鑰由命令訪問,發現過期。

  2. 通過後臺系統,在後臺查找過期密鑰, 遞增,以便還能夠收集從未訪問過的密鑰 。

當一個鍵被訪問和 發現由上述系統中的一個過期生成呼出事件,其結果是有 不能保證Redis的服務器將能夠產生 在關鍵時間到達 零的時間到期事件。如果沒有命令持續關注密鑰,並且存在多個與TTL關聯的密鑰,則密鑰生存時間下降到零的時間與生成到期的 事件的時間之間可能存在顯着延遲。

要完全實現accrue過期事件,您可能必須自行實施。例如,通過使用按到期時間排序的排序列表(或AVL樹),並連續讀取列表尾部(排隊)。如果讀者發現到期時間還沒有到達,它會休眠(到期時間 - 現在)。通過這種方式,精度可以控制在10毫秒以內。

1

使用redis-scheduler
你可以找到它here