Redis如何实现订单过期删除


前言

设计订单过期,不能单纯靠redis,需要兜底策略

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion

代码实现:

import com.coolplay.trade.dto.req.CancelOrderReq;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import j*ax.annotation.Resource;
import j*a.util.Set;
import j*a.util.concurrent.TimeUnit;


@Service
@Slf4j
public class OrderRedisDelayQueueOperator extends AbstractOrderScheduleDelayQueue {
    @Resource(name = "redisTemplate")
    private ZSetOperations<String, String> orderRedis;

    /**
     * 预售、现货生成订单15分钟后未支付,需要取消订单
     */
    private static final String DELAY_QUEUE_NAME = "order";

    /**
     * 每1秒执行一次
     */
    @Override
    @Scheduled(cron = "0/1 * * * * ? ")
    public void orderEventProcess() {
        if (!redisLock.tryLock(this.getClass().getSimpleName(), TimeUnit.MILLISECONDS, 10, 100)) {
            return;
        }
        Set<String> dq = orderRedis.range(DELAY_QUEUE_NAME, 0L, Long.MAX_VALUE);
        if (CollectionUtils.isEmpty(dq)) {
            return;
        }
        for (String orderNo : dq) {
            Double xs = orderRedis.score(DELAY_QUEUE_NAME, orderNo);
            Double now = System.currentTimeMillis() * 1.0;
            if (xs <= now) {
                log.info("{} timed out", orderNo);
                super.threadPoolTaskExecutor.execute(() -> {
                    CancelOrderReq req = new CancelOrderReq();
                    req.setOrderNo(orderNo);
                    req.setCancelType(OrderActionEnum.TIME_OUT_CANCEL);
                    orderService.cancelOrder(req);
                });
            } else {
                //log.info("{} no time out", orderNo);
                //如果最小的都没有过期,剩余的则不用处理了
                break;
            }
        }
    }


    public void addToRedis(String orderNo, long delayTime) {
        orderRedis.add(DELAY_QUEUE_NAME, orderNo, delayTime * 1.0);

    }

    public void removeFromRedis(String orderNo) {

        orderRedis.remove(DELAY_QUEUE_NAME, orderNo);
    }
}

兜底策略

/**
     * 取消订单--10分钟--20分钟执行一次
     */
    @XxlJob("cancelOrder20Minutes")
    public void cancelOrderTenMinutes() {
        log.info("*****[开始:下单十分钟以后系统自动取消订单]*****");
        Date start = DateUtil.dateRoll(new Date(), Calendar.MINUTE,-20);
        Date end = new Date();
       List<ClOrder> clorderList =clOrderMapper.selectListAllOrdrWaiting(start,end);
       if(ObjectUtil.isNotEmpty(clorderList)){
           for(int i=0;i<clorderList.size();i++){
               ClOrder clOrder = clorderList.get(i);
               if(ObjectUtil.isNotEmpty(clOrder)){
                   Date orderTime = clOrder.getOrderTime();
                   long between = cn.hutool.core.date.DateUtil.between(orderTime, new Date(), DateUnit.MINUTE);
                   if(between>10){
                       ClOrder clOrderTemp = new ClOrder();
                       clOrderTemp.setOrderState("3");
                       clOrderTemp.setId(clOrder.getId());
                       clOrderTemp.setMemberId(clOrder.getMemberId());
                       String msg="您的订单已经取消,订单金额已发放至您的账户请查收~";
                       try {
                           boolean b = orderService.cancelOrder(clOrderTemp,msg);
                           if(!b){
                               log.info("[订单失效:定时任务兜底策略更新失败]**订单ID: {}",clOrderTemp.getId());
                           }
                           log.info("[Redis订单取消订单失效,定时任务兜底策略生效]");
                       }catch (Exception e){
                           log.info("[订单失效:定时任务兜底策略更新失败]**订单ID: {}",clOrderTemp.getId());
                           e.printStackTrace();
                       }


                   }
               }
           }
       }
        log.info("*****[结束:下单十分钟以后系统自动取消订单]*****");
    }

以上就是Redis如何实现订单过期删除的详细内容,更多请关注其它相关文章!


# 如何实现  # 遂川网络营销推广  # 海口网站建设在哪  # 推特的网站怎么推广到抖音  # 网站seo托管公司排行  # 昆明传媒网站建设公司  # 安简云营销推广怎么做  # 网站公司推广什么地方好  # 查看详情  # 解决问题  # 中文网  # 相关文章  # 是一个  # 网络带宽  # 下单  # 十分钟  # 您的  # redis  # 福州seo公司技术服务  # 珍爱网网站的推广方式  # 范县快手推广员招聘网站 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 嘀嗒顺风车如何开具电子发票  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  163邮箱网页版入口 163邮箱在线使用  如何在vscode中关闭it环境  汽水音乐在线入口 汽水音乐网页端官方页面快速打开  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  J*aScript事件处理:优化键盘输入与表单提交的实践指南  如何用Golang优化微服务间请求性能_Golang 微服务请求性能优化方法  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  J*aScript:从子元素中批量移除特定CSS类  c++如何实现观察者设计模式_c++行为型设计模式实战  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  家里的小飞虫总是不断,用什么方法可以彻底根除?  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  《小黑盒》删除历史浏览方法  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  4399小游戏下装链接 4399小游戏下载链接入口  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  如何外贸网站设计-能留住客户提升用户体验!  cad视图选项卡不见了怎么办_cad视图标签恢复显示方法  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  J*aScript包管理器_Npm与Yarn对比  哔哩哔哩在线观看入口 B站官网免费进入  微博网页版入口链接 微博网页版在线互动平台  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  学习通网页版个人登录_学习通网页版个人账户登录入口  晓晓优选app支付宝绑定方法  c++中的const关键字用法大全_c++ const正确使用指南  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  深入理解J*aScript异步操作:setTimeout与调用栈的真相  Go反射进阶:访问内嵌结构体中的被遮蔽方法  Go Template中优雅处理循环最后一项:自定义函数实践  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  汽水音乐车机版 汽水音乐车机版官方入口  《图怪兽》退出登录方法  qq音乐官方网站入口_qq音乐在线听歌网页版链接  《糖豆》添加舞曲方法 

 2023-06-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.