Redis 從2.8.0版本后,推出了Keyspace Notifications特性.
Keyspace Notifications 此特性允許客戶端可以以訂閱/發布(Sub/Pub)模式,接收那些對數據庫中的鍵和值有影響的操作事件。
Redis 目前的訂閱與發布功能采取的是發送即忘(fire and forget)策略,如果程序需要可靠事件通知,那么目前的鍵空間通知可能不適合:當訂閱事件的客戶端斷線時,它會丟失所有在斷線期間分發給它的事件。並不能確保消息送達。
在redis.conf設置
開啟redis-cli 等待過期鍵的通知
在另一個客戶端設置10s過期的key
收到過期鍵的通知
事件類型
-
對於每個修改數據庫的操作,鍵空間通知都會發送兩種不同類型的事件消息:keyspace和keyevent。以 keyspace 為前綴的頻道被稱為鍵空間通知(key-space nnotification),而以 keyevent 為前綴的頻道則被稱為鍵事件通知(key-event notification).
-
事件是用 keyspace@DB:KeyPattern 或者 keyevent@DB:OpsType 的格式來發布消息的.
-
- DB 表示在第幾個數據庫
-
- KeyPattern 則是表示需要監控的鍵模式(可以用通配符,如: key*:*)
-
- OpsType 則表示操作類型
-
因此,如果想要訂閱特殊的Key上的事件,應該是訂閱keyspace
例如:對0號數據庫的鍵myKey 執行 DEL 命令時,系統將分發兩條消息,相當於執行以下兩個 PUBLISH 命令:
publish __keyspace@0__:sampleKey del
publish __keyevent@0__:del sampleKey
訂閱第一個頻道 __keyspace@0__:mykey 可以接收0號數據庫中所有修改鍵mykey的事件
而訂閱第二個頻道 __keyspace@0__:del 則可以接收0號數據庫中所有執行 del 命令的鍵
開啟配置
字符 | 發送通知 |
---|---|
K | 鍵空間通知,所有通知以 keyspace@ 為前綴,針對key |
E | 鍵事件通知,所有通知以 keyevent@ 為前綴,針對event |
g | DEL、EXPIRE、RENAME 等類型無關的通用命令的通知 |
$ | 字符串命令的通知 |
l | 列表命令的通知 |
s | 集合命令的通知 |
h | 哈希命令的通知 |
z | 有序集合命令的通知 |
x | 過期事件:每當有過期鍵被刪除時發送 |
e | 驅逐(evict)事件:每當有鍵因為maxmemory政策而被刪除時發送 |
A | 參數 g$lshzxe 的別名,相當於All |
例如:"Kx" 表示想監控某個Key的失效事件