Redis 監聽過期鍵的key事件


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的失效事件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM