SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)
介紹
Redis 鍵過期事件是 Redis 中非常有用的功能,可以在鍵過期時觸發(fā)事件通知。這對于緩存失效、會話管理、定時任務等場景非常有用。
Redis配置
Redis 默認是沒有啟用鍵過期事件通知的,你需要通過配置來啟用這個功能。可以通過修改 redis.conf 文件或者使用 CONFIG SET 命令來啟用鍵過期事件通知。
notify-keyspace-events Ex
依賴
<!-- 操作redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
配置文件
spring: redis: host: localhost port: 6379 #password: 用的本機的redis,并且我沒有設置redis密碼 database: 0 lettuce: pool: # 最大阻塞等待時間,負數(shù)表示沒有限制 max-wait: -1 # 連接池中的最大空閑連接 max-idle: 5 # 連接池中的最小空閑連接 min-idle: 0 # 連接池中最大連接數(shù),負數(shù)表示沒有限制
寫入鍵
@RestController @RequiredArgsConstructor public class BasicController { private final StringRedisTemplate stringRedisTemplate; @GetMapping("/hello") public String hello() { // 設置鍵值對,并指定過期時間為 10 秒 stringRedisTemplate.opsForValue().set("product:123", "dpc", Duration.ofSeconds(5)); // 獲取值 String str = stringRedisTemplate.opsForValue().get("name"); System.out.println("Value: " + str); return str; } }
配置監(jiān)聽器
@Configuration public class RedisListenerConfig { @Bean public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; } @Bean public OrderKeyExpirationListener orderKeyExpirationListener(RedisMessageListenerContainer container) { // 配置監(jiān)聽器只監(jiān)聽 `order:*` 鍵 OrderKeyExpirationListener listener = new OrderKeyExpirationListener(container); container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired")); return listener; } @Bean public SessionKeyExpirationListener sessionKeyExpirationListener(RedisMessageListenerContainer container) { // 配置監(jiān)聽器只監(jiān)聽 `session:*` 鍵 SessionKeyExpirationListener listener = new SessionKeyExpirationListener(container); container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired")); return listener; } @Bean public ProductKeyExpirationListener productKeyExpirationListener(RedisMessageListenerContainer container) { // 配置監(jiān)聽器只監(jiān)聽 `product:*` 鍵 ProductKeyExpirationListener listener = new ProductKeyExpirationListener(container); container.addMessageListener(listener, new ChannelTopic("__keyevent@0__:expired")); return listener; } }
按KEY監(jiān)聽
監(jiān)聽session鍵
@Slf4j public class SessionKeyExpirationListener extends KeyExpirationEventMessageListener { public SessionKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String key = message.toString(); if (key.startsWith("session:")) { log.info("會話【" + key + "】已過期"); // 處理會話超時的邏輯 } } }
監(jiān)聽product鍵
@Slf4j public class ProductKeyExpirationListener extends KeyExpirationEventMessageListener { public ProductKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String key = message.toString(); if (key.startsWith("product:")) { log.info("產(chǎn)品【" + key + "】已過期"); // 處理產(chǎn)品相關的超時邏輯 } } }
監(jiān)聽order鍵
public class OrderKeyExpirationListener extends KeyExpirationEventMessageListener { public OrderKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } @Override public void onMessage(Message message, byte[] pattern) { String key = message.toString(); System.out.println(123); if (key.startsWith("order:")) { // 處理訂單相關的超時邏輯 } } }
到此這篇關于SpringBoot 監(jiān)聽Redis鍵過期事件(過期監(jiān)聽)的文章就介紹到這了,更多相關SpringBoot 監(jiān)聽Redis過期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MyBatis多表關聯(lián)查詢的實現(xiàn)示例
本文主要介紹了MyBatis多表關聯(lián)查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03Springboot如何獲取上下文ApplicationContext
這篇文章主要介紹了Springboot如何獲取上下文ApplicationContext,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11RocketMQ生產(chǎn)者一個應用不能發(fā)送多個NameServer消息解決
這篇文章主要為大家介紹了RocketMQ生產(chǎn)者一個應用不能發(fā)送多個NameServer消息原因及解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11mybatis-plus數(shù)據(jù)權限實現(xiàn)代碼
這篇文章主要介紹了mybatis-plus數(shù)據(jù)權限實現(xiàn),結合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下2023-06-06基于JPA實體類監(jiān)聽器@EntityListeners注解的使用實例
這篇文章主要介紹了JPA實體類監(jiān)聽器@EntityListeners注解的使用實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08