redis 超時失效key 的監聽觸發

2021-09-25 00:10:52 字數 2332 閱讀 7914

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的時候,需...