Keyspace 通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 數據集的事件(觸發某些事件后可以向指定的頻道發送通知),該功能需要 Redis 版本大於 2.8。
事件通過 Redis 的訂閱與發布功能(pub/sub)來進行分發,因此所有支持訂閱與發布功能的客戶端都可以在無須做任何修改的情況下,直接使用此功能。
因為 Redis 目前的訂閱與發布功能采取的是發送即忘(fire and forget)策略,所以如果你的程序需要可靠事件通知(reliable notification of events),那么目前的鍵空間通知可能並不適合你:當訂閱事件的客戶端斷線時,它會丟失所有在斷線期間分發給它的事件。
事件的類型
對於每個修改數據庫的操作,鍵空間通知都會發送兩種不同類型的事件:鍵空間通知(key-space)和鍵事件通知(key-event)。
當 del mykey 命令執行時:
- 鍵空間頻道的訂閱者將接收到被執行的事件的名字,在這個例子中,就是 del
- 鍵事件頻道的訂閱者將接收到被執行事件的鍵的名字,在這個例子中,就是 mykey
配置
因為開啟鍵空間通知功能需要消耗一些 CPU,所以在默認配置下,該功能處於關閉狀態。
修改 redis.conf 中的 notify-keyspace-events 參數,參數可以是以下字符的任意組合, 它指定了服務器該發送哪些類型的通知:
輸入的參數中至少要有一個 K 或者 E,否則的話,不管其余的參數是什么,都不會有任何通知被分發。
如: notify-keyspace-events "Ex" 表示對過期事件進行通知發送; notify-keyspace-events "kx" 表示想監控某個 key 的失效事件。將參數設為字符串 AKE 表示發送所有類型的通知。
過期事件測試
客戶端訂閱 subscribe __keyevent@0__:expired
在另一個客戶端執行 setex name 10 txl ,10 秒過后,訂閱端就會接收到消息: