標籤:
【Redis 鍵空間通知】
鍵空間通知使得用戶端可以通過訂閱頻道或模式, 來接收那些以某種方式改動了 Redis 資料集的事件。
以下是一些鍵空間通知發送的事件的例子:
- 所有修改鍵的命令。
- 所有接收到 LPUSH 命令的鍵。
0 號資料庫中所有已到期的鍵。
事件通過 Redis 的訂閱與發布功能(pub/sub)來進行分發, 因此所有支援訂閱與發布功能的用戶端都可以在無須做任何修改的情況下, 直接使用鍵空間通知功能。
因為 Redis 目前的訂閱與發布功能採取的是發送即忘(fire and forget)策略, 所以如果你的程式需要可靠事件通知(reliable notification of events), 那麼目前的鍵空間通知可能並不適合你: 當訂閱事件的用戶端斷線時, 它會丟失所有在斷線期間分發給它的事件。
事件的類型
對於每個修改資料庫的操作,鍵空間通知都會發送兩種不同類型的事件。
比如說,對 0 號資料庫的鍵 mykey 執行 DEL 命令時, 系統將分發兩條訊息, 相當於執行以下兩個 PUBLISH 命令:
PUBLISH [email protected]__:mykey delPUBLISH [email protected]__:del mykey
訂閱第一個頻道 [email protected]__:mykey 可以接收 0 號資料庫中所有修改鍵 mykey 的事件, 而訂閱第二個頻道 [email protected]__:del 則可以接收 0 號資料庫中所有執行 del 命令的鍵。
以 keyspace 為首碼的頻道被稱為鍵空間通知(key-space notification), 而以 keyevent 為首碼的頻道則被稱為鍵事件通知(key-event notification)。
當 del mykey 命令執行時:
- 鍵空間頻道的訂閱者將接收到被執行的事件的名字,在這個例子中,就是
del 。
- 鍵事件頻道的訂閱者將接收到被執行事件的鍵的名字,在這個例子中,就是
mykey 。
配置
因為開啟鍵空間通知功能需要消耗一些 CPU , 所以在預設配置下, 該功能處於關閉狀態。
可以通過修改 redis.conf 檔案, 或者直接使用 CONFIG SET 命令來開啟或關閉鍵空間通知功能:
- 當
notify-keyspace-events 選項的參數為空白字串時,功能關閉。
- 另一方面,當參數不是Null 字元串時,功能開啟。
notify-keyspace-events 的參數可以是以下字元的任意組合, 它指定了伺服器該發送哪些類型的通知:
| 字元 |
發送的通知 |
K |
鍵空間通知,所有通知以 [email protected]<db>__ 為首碼 |
E |
鍵事件通知,所有通知以 [email protected]<db>__ 為首碼 |
g |
DEL 、 EXPIRE 、 RENAME 等類型無關的通用命令的通知 |
$ |
字串命令的通知 |
l |
列表命令的通知 |
s |
集合命令的通知 |
h |
雜湊命令的通知 |
z |
有序集合命令的通知 |
x |
到期事件:每當有到期鍵被刪除時發送 |
e |
驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時發送 |
A |
參數 g$lshzxe 的別名 |
輸入的參數中至少要有一個 K 或者 E , 否則的話, 不管其餘的參數是什麼, 都不會有任何通知被分發。
舉個例子, 如果只想訂閱鍵空間中和列表相關的通知, 那麼參數就應該設為 Kl , 諸如此類。
將參數設為字串 "AKE" 表示發送所有類型的通知。
參考:http://redisdoc.com/topic/notification.html
Redis 鍵空間通知