记录使用redis过期回调解决订单超时问题

更新时间:2023-06-25 18:38:34 阅读: 评论:0

记录使⽤redis过期回调解决订单超时问题
生日的英文
记录使⽤redis过期回调解决订单超时问题
此⽂章主要是之前⼀篇⽂章的拓展,上⼀篇⽂章说到,订单超时有三种处理⽅法,这篇⽂章记录的就是第⼆种解决⽅法
上⼀篇⽂章地址
下⾯开始实际操作
1. 修改redis相关事件配置,添加 notify-keyspace-events Ex
1. 直接修改f⽂件
2. 或者使⽤RedisDesktopManager远程连接⼯具open console按钮,使⽤命令⾏CONFIG SET notify-keyspace-events Ex解决
但是两种⽅法设置完后都必须要重启redis服务,否则不会⽣效
2. 加⼊maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-annotations</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
川贝枇杷露
<groupId>com.</groupId>
<artifactId>jackson-databind</artifactId>
<scope>compile</scope>
<version>2.9.7</version>
</dependency>
3. 定义配置RedisListenerConfig
@Configuration
黄色老司机public class RedisListenerConfig {
@Autowired
private RedisTemplate redisTemplate;
/**
* 处理乱码
* @return
*/
@Bean
public RedisTemplate redisTemplateInit(){
// key序列化
redisTemplate.tKeySerializer(new StringRedisSerializer());
//val实例化
redisTemplate.tValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
家法@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory){        RedisMessageListenerContainer container =new RedisMessageListenerContainer();        container.tConnectionFactory(connectionFactory);
return container;
}
}
4. 定义监听器,实现KeyExpirationEventMessageListener接⼝
@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){
// ⽤户做⾃⼰的业务处理即可,注意String()可以获取失效的key
检验科工作制度String expiredKey = String();
if(expiredKey.startsWith("test:")){
/
/如果是test:开头的key,进⾏处理
System.out.println(expiredKey);
String substring = expiredKey.split(":")[1];//去掉orderNo
System.out.println("------"+ substring +"-----");
}
}
}
5. 测试是否起作⽤
public class Test(){
    @Resource
    private RedisTemplate redisTemplate;
    redisTemplate.opsForValue().t("test:123","dadada",25, TimeUnit.SECONDS ); }
打开debug调试,发现30s后,能进⾏回调
输出结果如下,证明回调成功,该⽅法真实可⾏
为什么不适⽤该种⽅法的原因,在上⼀篇⽂章⾥解释过了,所以就不再解释⼀遍了,写这篇⽂章的⽬的是为了证明该⽅法也是切实可⾏的,只是因为不适合所以没有选择作为我们项⽬的解决⽅法,感兴趣的⼩伙伴去看我上⼀篇⽂章吧,⽂章链接在本⽂⼀开始就有哦
觉得还可以的话可以的话点个赞呗

本文发布于:2023-06-25 18:38:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1038184.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   回调   解决   订单   配置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图