Springboot redis 失效監聽
-
開啓redis key過期提醒
- 在redis的redis.conf 開啓過期監聽
notify-keyspace-events Ex #相關說明 K:keyspace事件,事件以__keyspace@<db>__爲前綴進行發佈; E:keyevent事件,事件以__keyevent@<db>__爲前綴進行發佈; g:一般性的,非特定類型的命令,比如del,expire,rename等; $:字符串特定命令; l:列表特定命令; s:集合特定命令; h:哈希特定命令; z:有序集合特定命令; x:過期事件,當某個鍵過期並刪除時會產生該事件; e:驅逐事件,當某個鍵因maxmemore策略而被刪除時,產生該事件; A:g$lshzxe的別名,因此”AKE”意味着所有事件。
- 設置完成,進行redis 重啓,使其加載最新的配置
- 在redis的redis.conf 開啓過期監聽
-
添加引用的依賴
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
添加redis消息過期監聽
- 給Springboot 配置 redis監聽,配置redis消息監聽容器,並給與連接工廠
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.RedisMessageListenerContainer; /** * @program: swpt * @description: * @author: fq * @create: 2020-11-19 09:41 **/ @Configuration public class RedisListenerConfig { @Bean RedisMessageListenerContainer container (RedisConnectionFactory redisConnectionFactory){ RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(redisConnectionFactory); return container; } }
- 定義redis監聽器並且實現KeyExpirationEventMessageListener接口,在spring 啓動的時候進行註冊
import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.stereotype.Component; /** * @program: swpt * @description: * @author: fq * @create: 2020-11-19 09:50 **/ @Component public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); } /** * 針對redis數據失效事件,進行數據處理 * @param message * @param pattern */ @Override public void onMessage(Message message, byte[] pattern) { //message.toString()就是失效的redis的key String expiredKey = message.toString(); System.out.println("redis失效監聽" + expiredKey); } }
- 給Springboot 配置 redis監聽,配置redis消息監聽容器,並給與連接工廠
-
在redis 客戶端寫一個10秒的 key 查看代碼是否監聽到
- 客戶端創建20秒的key
setex name 20 "哈哈"
- 在idea 進行查看
- 客戶端創建20秒的key