Blank
文章6
标签7
分类4
Redis专题 - 在SpringBoot里监听Redis过期

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的时候就已经过期了,本人也在攻克这个问题

你学废了嘛

本文作者:Blank
本文链接:https://www.kb0103.cn/2021/10/22/2587195657/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可