基于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 12 Redis
redis内存空间效率问题的深入探究
May 17 Redis
redis实现排行榜功能
May 24 Redis
浅析Redis Sentinel 与 Redis Cluster
Jun 24 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
解析redis hash应用场景和常用命令
Aug 04 Redis
关于redisson缓存序列化几枚大坑说明
Aug 04 Redis
关于使用Redisson订阅数问题
Jan 18 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
python中使用redis用法详解
Dec 24 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
php 无极分类(递归)实现代码
2010/01/05 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
初识Node.js
2014/09/03 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
js如何验证密码强度
2020/03/18 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Python3如何解决字符编码问题详解
2017/04/23 Python
python实现手机销售管理系统
2019/03/19 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python根据时间获取周数代码实例
2019/09/30 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
python os.listdir()乱码解决方案
2021/01/31 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
教师推荐信范文
2013/11/24 职场文书
物业门卫岗位职责
2013/12/28 职场文书
空乘英文求职信
2014/04/13 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
场地使用证明模板
2014/10/25 职场文书
酒会邀请函
2015/01/31 职场文书
防暑降温通知书
2015/04/27 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书