基于Redis过期事件实现订单超时取消


Posted in Redis onMay 08, 2021

订单超时取消的实现,首先想到的是定时任务,但是这种实现方式在订单量较大的情况下是有问题的,而且时间也会有误差,最大时间差就是定时任务的执行间隔时间。

使用redis的过期监听事件可以比较好的解决这个问题。实现的方式是订单创建后向redus中存一记录,一般就以订单号为key。设置过期时间(订单超时时间),一旦时间超时会触发监听事件,这时候就可以通过key判断这个订单是否支付,未支付时取消订单。

redis过期监听的实现:

1.修改redis.windows.conf配置文件中notify-keyspace-events的值

默认配置notify-keyspace-events的值为" ",修改为 notify-keyspace-events Ex 这样便开启了过期事件

基于Redis过期事件实现订单超时取消

2. 创建配置类RedisListenerConfig(配置RedisMessageListenerContainer这个Bean)

@Configuration
public class RedisListenerConfig {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    /**
     * 处理乱码
     * @return
     */
    @Bean
    public RedisTemplate redisTemplateInit() {
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //val实例化
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
 
        return redisTemplate;
    }
 
 
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
 
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
 
}

3.继承KeyExpirationEventMessageListener创建redis过期事件的监听类

KeyExpirationEventMessageListener类是org.springframework.data.redis.listener包下的实现类,通过继承这个类重写onMessage方法可以实现对redis所有过期事件的监听。

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer container) {
        super(container);
    }
 
    /**
     * 针对redis数据失效事件,进行数据处理
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
       String key=message.toString();//生效的key
        if (key!=null && key.startsWith("order")){//从失效key中筛选代表订单失效的key
            //截取订单号,查询订单,如果是未支付状态则取消订单
            String orderNo=key.substring(5);
            System.out.println("订单号为:"+orderNo+"的订单超时未支付,取消订单");
 
        }
    }
}

测试

通过redis模拟创建一个有效时间为5s的订单:

基于Redis过期事件实现订单超时取消

5秒后程序成功监听到了过期事件:

基于Redis过期事件实现订单超时取消

到此这篇关于基于Redis过期事件实现订单超时取消的文章就介绍到这了,更多相关Redis 订单超时取消内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
详解Redis实现限流的三种方式
Apr 27 Redis
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
详解redis分布式锁的这些坑
May 19 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
Redis Stream类型的使用详解
Nov 11 Redis
面试分析分布式架构Redis热点key大Value解决方案
Mar 13 Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis实现订单自动过期功能的示例代码
May 08 #Redis
redis 限制内存使用大小的实现
使用Redis实现秒杀功能的简单方法
Redis6.0搭建集群Redis-cluster的方法
May 08 #Redis
浅谈Redis存储数据类型及存取值方法
Redis IP地址的绑定的实现
May 08 #Redis
redis通过6379端口无法连接服务器(redis-server.exe闪退)
You might like
用Socket发送电子邮件
2006/10/09 PHP
js下写一个事件队列操作函数
2010/07/19 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
Python中的闭包总结
2014/09/18 Python
Django的session中对于用户验证的支持
2015/07/23 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
会计助理的岗位职责
2013/11/29 职场文书
社区志愿者心得体会
2014/01/03 职场文书
党员批评与自我批评
2014/02/12 职场文书
物理研修随笔感言
2014/02/14 职场文书
总会计师岗位职责
2014/02/19 职场文书
团购业务员岗位职责
2014/03/15 职场文书
企业精神口号
2014/06/11 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
统计员岗位职责
2015/02/11 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
python使用BeautifulSoup 解析HTML
2022/04/24 Python