Redis Key过期回调功能
Redis事件监听回调是一个非常好用的功能,可以用于定时完成某个特定功能,如:30分钟的支付有效期,24小时的vip体验,均可以通过Redis的key过期触发事件回调来完成。定制自己的解决方案只需要两步:1.redis配置文件中开启事件监听功能。2.定制自己的监听器,实现特定功能。
·
前言
Redis事件监听回调是一个非常好用的功能,可以用于定时完成某个特定功能,如:30分钟的支付有效期,24小时的vip体验,均可以通过Redis的key过期触发事件回调来完成。
一、开启Redis的过期回调功能
1.1 修改redis.conf文件
vim redis.conf
1.2 开启notify-keyspace-events Ex的配置
1.3 重启redis服务
### 连接redis客户端(redis-cli),使用shutwodn命令
./redis-cli
shutdown
### 重启redis服务
./redis-server redis.conf
二、在SpringBoot程序中配置监听器响应功能
2.1 引入依赖包
<!-- redis 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.2 编写监听器实现回调功能
在写监听器前需要先编写一个配置类,将RedisMessageListenerContainer 类的实例手动注入容器。
因为在写监听器的构造函数时,RedisMessageListenerContainer 实例无法自动注入,需要子编写配置类,注入容器中。
配置类代码如下(直接复制即可):
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;
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
监听器代码如下:
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;
/**
* Redis事件监听器
*/
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 重写omMessage方法,当Redis中的Key过期时会执行该方法
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 过期的key
String expireKey = message.toString();
// 根据key,执行自己需要实现的功能。
}
}
总结
Redis的事件回调功能作用非常强大,能够解决非常多的限时任务。使用好该功能能够帮你解决非常多的问题。定制自己的解决方案只需要两步:
1.redis配置文件中开启事件监听功能。
2.定制自己的监听器,实现特定功能。
注意:当redis的数据被淘汰策略淘汰时,尽管时间没有过期,但是也会触发事件。
更多推荐
已为社区贡献2条内容
所有评论(0)