redis实现未支付时间超时就删除订单,并给前端反应一个已过期

1.创建订单缓存,设置过期时间为一分钟

复制代码
now 是一个表示当前时间的对象,offset 方法用于对当前时间进行偏移。
复制代码
redisTemplate.expireAt(paymentKey, now.offset(DateField.SECOND, 60));

2.创建KeyExpiredListener类并且继承KeyExpirationEventMessageListener,用于监听Redis缓存过期。

在里面实现onMessage来实现键过期进行的回调函数

java 复制代码
 @Override
    @Transactional//修改记录
    public void onMessage(Message message, byte[] pattern) {
        //获取过期数据的Key
        String key = message.toString();
        //判断过期的数据是否为挂号单
        if (key.startsWith("registration_payment_")) {
            //从Key中提取挂号单流水号
            String outTradeNo = key.split("_")[2];
            //更新挂号支付订单状态为4
            medicalRegistrationDao.discardPayment(outTradeNo);
            //出诊计划已挂号人数减去1
            doctorWorkPlanDao.releaseNumByOutTradeNo(outTradeNo);
            //出诊时段已挂号人数减去1
            doctorWorkPlanScheduleDao.releaseNumByOutTradeNo(outTradeNo);

            //删除缓存中的已挂号人数
            //查询挂号单的workPlanId和scheduleId
            HashMap map = medicalRegistrationDao.searchWorkPlanIdAndScheduleId(outTradeNo);
            int scheduleId = MapUtil.getInt(map, "doctorScheduleId");
            int workPlanId = MapUtil.getInt(map, "workPlanId");
            
            key = "doctor_schedule_" + scheduleId;//出诊时间段的缓存
            if (redisTemplate.hasKey(key)) {//存在没有过期
                //更新缓存中已挂号人数的数量减去1
                redisTemplate.opsForHash().increment(key, "num", -1);
            }

        }
        //super.onMessage(message, pattern);
        super.onMessage(message, pattern);
    }

上面是我写的代码,就是过期调用 DAO 层的方法,更新挂号支付订单状态为 4,表示订单已废弃。分别调用 DAO 层的方法,将对应的出诊计划和出诊时段的已挂号人数减去 1。因为我这个项目最多同一时段只能挂号三个人、

相关推荐
2401_8322981015 分钟前
腾讯云TSearch存算分离,破解日志分析算力瓶颈
大数据·运维·数据库
Jia ming27 分钟前
ARM多核处理器缓存一致性全解析
arm开发·缓存
拽着尾巴的鱼儿27 分钟前
Spring 缓存 @Cacheable 实现原理
java·spring·缓存
Leo July36 分钟前
【MySQL】MySQL数据库调优实战指南:从基础优化到架构升级
数据库·mysql·架构
l1t42 分钟前
DeepSeek总结的在单节点上处理 1TB Parquet 数据方法
数据库·人工智能·duckdb
么么...1 小时前
系统性 MySQL 优化:性能分析、索引设计与失效场景全解
数据库·经验分享·sql·mysql
heartbeat..1 小时前
数据库性能优化:优化的时机(表结构+SQL语句+系统配置与硬件)
java·数据库·mysql·性能优化
YongCheng_Liang1 小时前
分布式数据库核心原理深度解析:架构、理论与事务解决方案
运维·数据库·sql
UrSpecial1 小时前
IM项目——文件管理子服务
服务器·数据库·oracle
一个响当当的名号1 小时前
lectrue6 缓冲池
数据库