redis 超時失效key 的監聽觸發

2021-09-07 10:07:50 字數 2545 閱讀 6960

1. 事件通過 redis 的訂閱與發布功能(pub/sub)來進行分發,故需要訂

閱 __keyevent@0__:expired 通道

0表示db0 根據自己的dbindex選擇合適的數字

2.修改 redis.conf 檔案

修改 notify-keyspace-events ex 

#

k 鍵空間通知,以__keyspace@__為字首

#e 鍵事件通知,以__keysevent@__為字首

#g del , expipre , rename 等型別無關的通用命令的通知, ...

#$ string命令

#l list命令

#s set命令

#h hash命令

#z 有序集合命令

#x 過期事件(每次key過期時生成)

#e 驅逐事件(當key在記憶體滿了被清除時生成)

#a g$lshzxe的別名,因此」ake」意味著所有的事件

3. 重啟redis , 即可測試失效事件的觸發, 監聽獲取的值為 key

1.  首先需要乙個訊息***類

package

com.sogou.baike.testimport.testsubscribe;

import

redis.clients.jedis.jedispubsub;

/*** created by denglinjie on 2016/6/29. */

public

class redismsgpubsublistener extends

jedispubsub

@override

public

void

unsubscribe(string... channels)

@override

public

void

subscribe(string... channels)

@override

public

void

psubscribe(string... patterns)

@override

public

void

punsubscribe()

@override

public

void

punsubscribe(string... patterns)

@override

public

void

onmessage(string channel, string message)

@override

public

void

onpmessage(string pattern, string channel, string message)

@override

public

void onsubscribe(string channel, int

subscribedchannels)

@override

public

void onpunsubscribe(string pattern, int

subscribedchannels)

@override

public

void onpsubscribe(string pattern, int

subscribedchannels)

@override

public

void onunsubscribe(string channel, int

subscribedchannels)

}

該類需要繼承jedispubsub ,並實現其抽象方法,通過方法的名稱很清楚的看出來,這個***是用來訂閱乙個頻道,在訂閱該頻道,取消訂閱,收到訊息等狀態會對應呼叫相關的方法

2.訂閱測試

public

class

testsubscribe

}

該類實現對頻道redischattest的訂閱監聽,頻道的訂閱,取消訂閱,收到訊息都會呼叫listener物件的對應方法

注意:subscribe是乙個阻塞的方法,在取消訂閱該頻道前,會一直阻塞在這,只有當取消了訂閱才會執行下面的other code,參考上面**,我在onmessage裡面收到訊息後,呼叫了this.unsubscribe(); 來取消訂閱,這樣才會執行後面的other code

3.發布訊息

測試

public class

testpublish

}

這個類向頻道redischattest發布訊息,第二步因為訂閱了該頻道,所以會收到該訊息。

redis 超時失效key 的監聽觸發

redis自2.8.0之後版本提供keyspace notifications功能,允許客戶訂閱pub sub頻道,以便以某種方式接收影響redis資料集的事件。可能收到的事件的例子如下 所有影響給定鍵的命令。所有接收lpush操作的金鑰。所有金鑰在資料庫中過期0。因為 redis 目前的訂閱與發布...

redis 超時失效key 的監聽觸發

1.事件通過 redis 的訂閱與發布功能 pub sub 來進行分發,故需要訂 閱 keyevent 0 expired 通道 0表示db0 根據自己的dbindex選擇合適的數字 2.修改 redis.conf 檔案 修改 notify keyspace events ex k 鍵空間通知,以 ...

Redis監聽Key失效

之前我使用過使用redisson這種redis的框架實現過延時傳送。今天突然好奇,在springboot中,redis能監聽到key失效事件嗎?經過查資料,答案是肯定的,可以監聽key失效,但是有缺陷,監聽事件裡面只能拿到key,不能拿到這個key對應的value。所以說,在生成這個key的時候,需...