Redis专题 - 在SpringBoot里监听Redis过期
这次给大家玩点花的,在代码中监听Redis过期时间
使用场景
一句话简单概括:分布式定时任务
在SpringBoot项目中使用
导包(Maven)
上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
|
由于包版本写在了parent里,而且我还懒得翻,所以如果报错了请自行填上version标签
配置类
再上代码
1 2 3 4 5 6 7 8 9 10 11 12
| @Configuration public class RedisExpiredConfig {
@Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(new RedisExpiredListener(container), new PatternTopic("__keyevent@0__:expired")); return container; }
}
|
这里面主要是配置Redis配置信息请按需求自行更改
Copy完会发现报错,没关系,接着看
可以开始写业务了
上代码Plus
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Component public class RedisExpiredListener extends KeyExpirationEventMessageListener {
public RedisExpiredListener(RedisMessageListenerContainer listenerContainer) { super(listenerContainer); }
@Override public void onMessage(Message message, byte[] bytes) { byte[] body = message.getBody(); String redisKey = new String(body); } }
|
其中的redisKey就是过期了的Key啦,是不是非常简单呢
可惜的是只能获取到Key没办法获取Value
因为你在试图获取Value的时候就已经过期了,本人也在攻克这个问题
你学废了嘛