《轉》redis key過期事件實現過期提醒

2021-08-21 10:18:29 字數 2143 閱讀 7163

redis自2.8.0之後版本提供

keyspace notifications

功能,允許客戶訂閱pub / sub頻道,以便以某種方式接收影響redis資料集的事件。

可能收到的事件的例子如下: 

所有影響給定鍵的命令。 

所有接收lpush操作的金鑰。 

所有金鑰在資料庫中過期0。

因為 redis 目前的訂閱與發布功能採取的是傳送即忘(fire and forget)策略, 所以如果你的程式需要可靠事件通知(reliable notification of events), 那麼目前的鍵空間通知可能並不適合你:當訂閱事件的客戶端斷線時, 它會丟失所有在斷線期間分發給它的事件。並不能確保訊息送達。未來有計畫允許更可靠的事件傳遞,但可能這將在更一般的層面上解決,或者為pub / sub本身帶來可靠性,或者允許lua指令碼攔截pub / sub訊息來執行諸如推送將事件列入清單。

事件型別

對於每個修改資料庫的操作,鍵空間通知都會傳送兩種不同型別的事件訊息:keyspace 和 keyevent。以 keyspace 為字首的頻道被稱為鍵空間通知(key-space notification), 而以 keyevent 為字首的頻道則被稱為鍵事件通知(key-event notification)。

事件是用 __keyspace@db__:keypattern 或者 __keyevent@db__:opstype 的格式來發布訊息的。db表示在第幾個庫;keypattern則是表示需要監控的鍵模式(可以用萬用字元,如:__key*__:*);opstype則表示操作型別。因此,如果想要訂閱特殊的key上的事件,應該是訂閱keyspace。比如說,對 0 號資料庫的鍵 mykey 執行 del 命令時, 系統將分發兩條訊息, 相當於執行以下兩個 publish 命令:publish __keyspace@0__:samplekey delpublish __keyevent@0__:del samplekey訂閱第乙個頻道 __keyspace@0__:mykey 可以接收 0 號資料庫中所有修改鍵 mykey 的事件, 而訂閱第二個頻道 __keyevent@0__:del 則可以接收 0 號資料庫中所有執行 del 命令的鍵。

開啟配置

鍵空間通知通常是不啟用的,因為這個過程會產生額外消耗。所以在使用該特性之前,請確認一定是要用這個特性的,然後修改配置檔案,或使用config配置。相關配置項如下: 字元

傳送通知

k鍵空間通知,所有通知以 

keyspace@

為字首,針對key

e鍵事件通知,所有通知以 

keyevent@

為字首,針對event

g

del 、 expire 、 rename 等型別無關的通用命令的通知

$

字串命令的通知

l

列表命令的通知

s

集合命令的通知

h

雜湊命令的通知

z

有序集合命令的通知

x

過期事件:每當有過期鍵被刪除時傳送

e

驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時傳送

a引數 g$lshzxe 的別名,相當於是all

輸入的引數中至少要有乙個 k 或者 e , 否則的話, 不管其餘的引數是什麼, 都不會有任何通知被分發。上表中斜體的部分為通用的操作或者事件,而黑體則表示特定資料型別的操作。配置檔案中修改 notify-keyspace-events 「kx」,注意:這個雙引號是一定要的,否則配置不成功,啟動也不報錯。例如,「kx」表示想監控某個key的失效事件。

也可以通過config配置:config set notify-keyspace-events ex (但非持久化)

由於通知收到的是redis key,value已經過期,無法收到,所以需要在key上標記業務資料。

Redis Key 過期策略

redis 官方提供的 conf 中6中過期策略的具體方式。redis 中的預設的過期策略是volatile lru 設定方式 config set maxmemory policy volatile lru maxmemory policy 六種方式 volatile lru 只對設定了過期時間的...

Redis Key過期通知

概述 鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 redis 資料集的事件。如redis資料庫中鍵的過期事件也是通過訂閱功能實現。本文主要基於azure paas redis演示相關功能的具體實現。配置因為開啟鍵空間通知功能需要消耗一些 cpu 所以在預設配置下,該功能處...

redis key過期監聽實現延時佇列

延時佇列有多種實現方式,可以使用mq來實現,也可以通過redis key過期事件監聽來實現。下面就來乙個redis key過期事件監聽的demo.1.先引入redis的依賴。spring boot starter data redis org.springframework.boot 2.配置red...