广告
返回顶部
首页 > 资讯 > 精选 >Redis如何实现订单过期删除
  • 410
分享到

Redis如何实现订单过期删除

2023-06-30 18:06:14 410人浏览 独家记忆
摘要

这篇文章主要介绍“Redis如何实现订单过期删除”,在日常操作中,相信很多人在Redis如何实现订单过期删除问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis如何实现订单过期删除”的疑惑有所帮助!接下来

这篇文章主要介绍“Redis如何实现订单过期删除”,在日常操作中,相信很多人在Redis如何实现订单过期删除问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis如何实现订单过期删除”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

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

代码实现:

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 javax.annotation.Resource;import java.util.Set;import java.util.concurrent.TimeUnit;@Service@Slf4jpublic class OrderRedisDelayQueueOperator extends AbstractOrderScheduleDelayQueue {    @Resource(name = "redisTemplate")    private ZSetOperations<String, String> orderRedis;        private static final String DELAY_QUEUE_NAME = "order";        @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);    }}

兜底策略

    @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如何实现订单过期删除”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Redis如何实现订单过期删除

本文链接: https://www.lsjlt.com/news/330736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis如何实现订单过期删除
    这篇文章主要介绍“Redis如何实现订单过期删除”,在日常操作中,相信很多人在Redis如何实现订单过期删除问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis如何实现订单过期删除”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Redis实现订单过期删除的方法步骤
    目录前言代码实现:兜底策略前言 设计订单过期,不能单纯靠Redis,需要兜底策略 代码实现: import com.coolplay.trade.dto.req.CancelOrde...
    99+
    2022-11-13
  • Redis中如何实现订单自动过期功能
    这篇文章将为大家详细讲解有关Redis中如何实现订单自动过期功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言用户下单后,规定XX分钟后自动设置为“已过期”,不能再发起支付。项目类似此类"过...
    99+
    2023-06-15
  • redis怎样实现订单自动过期功能
    这篇文章主要介绍了redis怎样实现订单自动过期功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文章背景我们的目的是在用户下单后,规定指定...
    99+
    2022-10-18
  • 基于Redis过期事件实现订单超时取消
    订单超时取消的实现,首先想到的是定时任务,但是这种实现方式在订单量较大的情况下是有问题的,而且时间也会有误差,最大时间差就是定时任务的执行间隔时间。 使用redis的过期监听事件可以...
    99+
    2022-11-12
  • Redis实现订单自动过期功能的示例代码
    前言 用户下单后,规定XX分钟后自动设置为“已过期”,不能再发起支付。项目类似此类"过期"的需求,笔者提供一种使用Redis的解决思路,结合Redis的订阅、发布和键空间通知机制(...
    99+
    2022-11-12
  • Redis中过期键如何删除示例详解
    目录前言Redis 中 key 的过期删除策略1、定时删除2、惰性删除3、定期删除Redis 中过期删除策略从库是否会脏读主库创建的过期键内存淘汰机制内存淘汰触发的最大内存有哪些内存...
    99+
    2022-11-13
  • php如何删除过期文件
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。你们一定也遇到过这样的情况,服务器的磁盘空间占用100%。原因可能是项目打包下载的临时文件夹满了。那么遇到这种问题我们该如何去解决呢?其实很简单,只需要解决方...
    99+
    2014-09-09
    php 过期 文件
  • Ubuntu如何实现定期删除目录
    Ubuntu实现定期删除目录的方法:新建脚本rm_appointfiles,内容如下:#!/bin/bash#下面两段代码意思是首先cd进入目录,然后删除该目录下3天前的所有文件,包括其中的子目录cd /home/azhe/Download...
    99+
    2022-10-19
  • 如何使用RMAN删除过期归档日志
    这篇文章主要介绍“如何使用RMAN删除过期归档日志”,在日常操作中,相信很多人在如何使用RMAN删除过期归档日志问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用RMAN...
    99+
    2022-10-18
  • 亚马逊服务器如何删除订单记录信息
    亚马逊服务器上的订单记录信息是由亚马逊自动管理的,一般情况下,用户无法直接删除订单记录信息。但是,如果你是亚马逊的卖家,你可以通过以下步骤删除订单记录信息: 登录亚马逊卖家中心,进入“订单管理”页面。 找到需要删除的订单,点击订单号进入...
    99+
    2023-10-27
    亚马逊 订单 服务器
  • bat如何使用forfiles自动批量删除过期文件
    这篇文章主要介绍bat如何使用forfiles自动批量删除过期文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ftp服务器用于保存备份文件,但是也不需要每天的数据都留着,于是乎为了考虑节省硬盘空间,就必须删除一些老...
    99+
    2023-06-08
  • Redis如何实现数据过期自动清理功能
    Redis是一个开源的内存数据结构存储系统,可以用来存储和读取键值对,支持多种数据结构,比如字符串、列表、哈希表、集合等。由于Redis是一个基于内存的存储系统,如果没有对数据进行过期自动清理,很容易导致内存溢出。因此本文将介绍Redis如...
    99+
    2023-11-07
    redis 清理 过期
  • DIV CSS如何实现表单输入单元点击删除
    这篇文章主要介绍DIV CSS如何实现表单输入单元点击删除,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!DIV CSS表单输入单元点击删除:本列同上则作用类似,只是使用鼠标上略有变化...
    99+
    2022-10-19
  • Angular如何实现搜索、过滤、批量删除、添加、表单验证功能
    这篇文章将为大家详细讲解有关Angular如何实现搜索、过滤、批量删除、添加、表单验证功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体代码如下所示;<!DOC...
    99+
    2022-10-19
  • 如何使用Html实现添加、删除、右键菜单
    这篇文章将为大家详细讲解有关如何使用Html实现添加、删除、右键菜单,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:<!DOCTYPE html>&l...
    99+
    2022-10-19
  • golang map 删除如何实现
    Golang是一种快速、高效、跨平台的编程语言,作为目前较为流行的编程语言之一,它拥有丰富的特性和各种高级数据结构,比如map。Map是Golang中非常常用的内置数据结构,它可以轻松的在程序中存储键值对类型的数据。Map提供了便捷的操作方...
    99+
    2023-05-14
    Golang
  • C#如何实现简单订单管理程序
    这篇文章主要介绍“C#如何实现简单订单管理程序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#如何实现简单订单管理程序”文章能帮助大家解决问题。订单管理的控制台程序,能够实现添加订单、删除订单、修...
    99+
    2023-06-30
  • 怎么用shell脚本实现对OGG进程过期trail文件的删除处理
    本篇内容主要讲解“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”...
    99+
    2023-06-04
  • Java如何实现Excel表单控件的添加与删除
    本文小编为大家详细介绍“Java如何实现Excel表单控件的添加与删除”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现Excel表单控件的添加与删除”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作