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。因为我这个项目最多同一时段只能挂号三个人、

相关推荐
一只自律的鸡8 分钟前
【MySQL】第十一章 存储过程和存储函数
数据库·mysql
翔云12345613 分钟前
MySQL 中的 utf8 vs utf8mb4 区别
数据库·mysql
数据知道21 分钟前
PostgreSQL 实战:索引的设计原则详解
数据库·postgresql
一只酸奶牛^_^31 分钟前
解决LinuxDeploy部署mysql、redis数据库无法启动问题。
redis·mysql
老毛肚31 分钟前
Spring 6.0基于JDB手写定制自己的ROM框架
java·数据库·spring
CodeBlossom38 分钟前
MySQL进阶 索引
数据库·mysql
未来之窗软件服务1 小时前
数据库优化提速(四)数据库数据批量补齐—仙盟创梦IDE
数据库·数据库调优·仙盟创梦ide·东方仙盟
optimistic_chen1 小时前
【Redis系列】分布式锁
linux·数据库·redis·分布式·缓存
xuekai200809011 小时前
GaussDB-SQL优化案例
数据库·sql·gaussdb
老邓计算机毕设1 小时前
SSM养老院管理系统的设计于实现78fyn(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计·养老院管理系统·ssm 框架