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 小时前
etcd 显示连接失败
数据库·chrome·etcd
会飞的大可8 小时前
Redis Sentinel 高可用方案在WMS仓储管理系统的应用
redis·sentinel
本体智能8 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11088 小时前
数据库基础知识----数据库大观
数据库·oracle
小羊在睡觉8 小时前
Reids缓存穿透、击穿、雪崩
redis·缓存·go
瀚高PG实验室9 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结21410 小时前
PostgreSQL 初体验
数据库·postgresql
ward RINL11 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB11 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee12 小时前
Redis高可用架构解析
数据库·redis·架构