唠嗑:这边文章是因为前短时间在网上看到的监听Key失效,可以做订单超过未支付修改状态,库存回退等,做个学习记录。
原文地址:https://blog.csdn.net/u014494148/article/details/116310566
那就开始吧—>先要安装好redis哦,我之前的文章写过安装redis和提供了安装压缩包,没有的小伙伴可以看一下。
1.找到redis的redis.windows.conf文件 打开找到notify-keyspace-events改成 notify-keyspace-events Ex
这里的 EX代表 expire 和 evicted 过期和驱逐 的时间监听 ,注意:改了配置要重启Redis

修改文件.png

修改内容.png
配置Redis监听器
注册 RedisMessageListenerContainer ,为Redis消息侦听器提供异步行为的容器
@Configuration
public class RedisConfig {
/**
* 注册一个Redis消息监听器交给Spring管理
* @param connectionFactory
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
//Redis消息监听器
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
//设置Redis链接工厂
container.setConnectionFactory(connectionFactory);
return container;
}
}
定义key过期的监听器 通过继承 KeyExpirationEventMessageListener 来完成
//消息过期监听器
@Component
public class RedisExpireListener extends KeyExpirationEventMessageListener {
public RedisExpireListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
//当消息过期,触发方法
@Override
public void onMessage(Message message, byte[] pattern) {
String expiredKey = message.toString();
System.out.println("Key -> "+expiredKey +"过期了...");
}
}
测试代码 ——>保存的key可以是跟数据库相关的id啊,订单编码什么之类的。
/**
* 测试redis监控key,实现超时任务处理
*/
@Test
public void test4(){
TUser tUser = new TUser();
tUser.setAge(20);
tUser.setName("张三");
tUser.setPassword("123");
//存 key=name value=tUser 过期时间等于10秒的
redisTemplate.opsForValue().set("name",tUser,10, TimeUnit.SECONDS);
}
输出结果

测试结果.png
总结:这是我在网上看到的,觉得写的很好,自己实现了一把,然后记录的文章,原文的话可以看我上面的注明的网址,谢谢大家。