SpringBoot監(jiān)聽Redis key失效事件的實現(xiàn)代碼
一. 開啟Redis key過期提醒
方式一:修改配置文件
redis.conf
# 默認 notify-keyspace-events "" notify-keyspace-events Ex
- 方式二:命令行開啟
CONFIG SET notify-keyspace-events Ex CONFIG GET notify-keyspace-events
二. notify-keyspace-events
notify-keyspace-events 選項的默認值為空
notify-keyspace-events 的參數(shù)可以是以下字符的任意組合, 它指定了服務(wù)器該發(fā)送哪些類型的通知。
字符 | 發(fā)送的通知 |
---|---|
K | 鍵空間通知,所有通知以 keyspace@ 為前綴 |
E | 鍵事件通知,所有通知以 keyevent@ 為前綴 |
g | DEL 、 EXPIRE 、 RENAME 等類型無關(guān)的通用命令的通知 |
$ | 字符串命令的通知 |
l | 列表命令的通知 |
s | 集合命令的通知 |
h | 哈希命令的通知 |
z | 有序集合命令的通知 |
x | 過期事件:每當有過期鍵被刪除時發(fā)送 |
e | 驅(qū)逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時發(fā)送 |
A | 參數(shù) g$lshzxe 的別名 |
三. Coding
初始化一個
Spring Boot
項目pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
- 定義配置類`RedisListenerConfig
@Configuration public class RedisListenerConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; } }
- 定義監(jiān)聽器 實現(xiàn)
KeyExpirationEventMessageListener
接口
查看源碼發(fā)現(xiàn),該接口監(jiān)聽所有db的過期事件keyevent@*:expired"
定義Status1ExpirationListener
監(jiān)聽狀態(tài)1到期
@Slf4j @Component public class Status1ExpirationListener extends KeyExpirationEventMessageListener { public Status1ExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Autowired private StringRedisTemplate stringRedisTemplate; @Override public void onMessage(Message message, byte[] pattern) { // message.toString()可以獲取失效的key String expiredKey = message.toString(); // 業(yè)務(wù)處理 } }
定義Status2ExpirationListener
監(jiān)聽狀態(tài)2到期
@Slf4j @Component public class Status2ExpirationListener extends KeyExpirationEventMessageListener { public Status2ExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { // message.toString()可以獲取失效的key String expiredKey = message.toString(); // 業(yè)務(wù)處理 } }
四. 參考
以上就是SpringBoot實現(xiàn)監(jiān)聽Redis key失效事件的示例代碼的詳細內(nèi)容,更多關(guān)于SpringBoot監(jiān)聽Redis key的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Java高效將CSV轉(zhuǎn)換為Excel的實現(xiàn)方法
在日常的數(shù)據(jù)處理和分析工作中,CSV文件因其輕量級和通用性而廣受歡迎,然而,當我們需要進行復(fù)雜的數(shù)據(jù)分析或利用Excel強大的圖表和公式功能時,將CSV數(shù)據(jù)轉(zhuǎn)換為Excel文件就成了開發(fā)者們常見的需求和痛點,本文將深入探討如何利用Java高效地將CSV轉(zhuǎn)換為Excel2025-08-08Java插入修改刪除數(shù)據(jù)庫數(shù)據(jù)的基本方法
這篇文章主要介紹了Java插入修改刪除數(shù)據(jù)庫數(shù)據(jù)的基本方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10解決ObjectMapper.convertValue() 遇到的一些問題
這篇文章主要介紹了解決ObjectMapper.convertValue() 遇到的一些問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Java中final,finally,finalize?有什么區(qū)別
這篇文章主要給大家分享的是?Java中final,finally,finalize?到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細內(nèi)容,具有一定的參考的價值,需要的朋友可以參考一下2021-11-11