延时任务-基于redis zset的完整实现

2023-11-16

所谓的延时任务给大家举个例子:你买了一张火车票,必须在30分钟之内付款,否则该订单被自动取消。订单30分钟不付款自动取消,这个任务就是一个延时任务。 我之前已经写过2篇关于延时任务的文章:

这两种方法都有一个缺点:都是基于单体应用的内存的方式运行延时任务的,一旦出现单点故障,可能出现延时任务数据的丢失。所以此篇文章给大家介绍实现延时任务的第三种方式,结合redis zset实现延时任务,可以解决单点故障的问题。给出实现原理、完整实现代码,以及这种实现方式的优缺点。

一、实现原理

首先来介绍一下实现原理,我们需要使用redis zset来实现延时任务的需求,所以我们需要知道zset的应用特性。zset作为redis的有序集合数据结构存在,排序的依据就是score。


所以我们可以利用zset score这个排序的这个特性,来实现延时任务

  • 在用户下单的时候,同时生成延时任务放入redis,key是可以自定义的,比如:delaytask:order
  • value的值分成两个部分,一个部分是score用于排序,一个部分是member,member的值我们设置为订单对象(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延时任务-基于redis zset的完整实现 的相关文章

随机推荐

  • pytorch 自学笔记@_@

    课程 dataset 类 from torch utils data import Dataset from PIL import Image import os class MyData Dataset def init self roo
  • java处理跨域处理

    经常遇到加了跨域但是前端访问还是会跨域 很有可能是没有走你写的跨域的流程 这时候加一个优先级就可以解决这个问题了 一般都是用这个方法 Bean public CorsFilter corsFilter UrlBasedCorsConfigu
  • 用C语言表白

    int day for day 0 day lt Mylife day printf i love you 我们相遇的那一刻起 我愿用一辈子 每天爱你
  • 整十粉丝庆祝文章系列内容征集建议

    亲爱的读者们 大家好 作为一名文章作者 我深知没有读者的支持和喜爱 我的文字就只是无意义的文字堆积 因此 为了庆祝与感谢大家长久以来的支持 我准备举办一场特别的活动 粉丝庆祝文章系列内容征集建议 我想听听你们的声音 了解你们对我写作的喜好
  • 堆和栈的区别以及联系

    堆与栈的区别有 栈内存存储的是局部变量而堆内存是实体 栈内存的更新速度高于堆内存 栈内存的生命周期一结束就会被释放而堆内存会被垃圾回收机制不定时回收 栈中存放的是对象的引用及对象方法中的局部变量的值 参数的值 堆中存放的是实例对象及成员变量
  • 树状结构数据的数据库表设计及使用 - 4. 嵌套集(Nested Set)模型

    本文以 MySQL 为例 文档比较长 故分为5部分发出 邻接表 Adjacency List 模型 路径枚举 Path Enumeration 模型 闭包表 Closure Table 模型 嵌套集 Nested Set 模型 性能比较与分
  • Mac快速打开terminal终端快捷键操作

    Command 空格键跳出搜索框 输入ter 按 enter即可打开
  • 调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_真正的terrain使用TerrainCuller---水平方向剔除

    如果还记得来自于何方 看看一个月前如何引入TerrainCuller的 如何判断是否该cull呢 在这里先打个断点 用的包围球 可见 通过VIEW FRUSTUM CULLING SMALL FEATURE CULLING SHADOW O
  • webrtc服务器搭建

    两年前写的笔记 可能有些链接和方式已经不对了 自己评估 文章目录 名词解释 概要 房间服务 信令服务 ICE STUN TURN 服务 Web服务的安装与配置 房间服务 安装与配置 安装 信令服务 turn服务 参考 扩展阅读 other
  • 常用的医学图像分割评价指标

    常用的图像分割评价指标非常多 论文中常用的指标包括像素准确率 交并比 IOU Dice系数 豪斯多夫距离 体积相关误差 下面提到的所有案例都是二分类 标签中只有0和1 目录 一 像素准确率 二 交并比IOU 三 骰子系数Dice 四 Hau
  • 【JavaScript高级】原型和继承相关:原型对象、函数原型、原型链和继承、继承的优化、对象判断相关方法

    文章目录 原型对象 对象的原型 函数的原型 函数原型作用 new操作原型的赋值 将方法放在原型上 constructor属性 在原型中新增属性 重写函数原型对象 原型链和继承 原型链 原型链实现方法的继承 借用构造函数属性继承 继承的优化
  • java8 stream 转换list、map、set

    一 Collection Collections collect Collector Collectos Collection是Java集合的祖先接口 Collections是java util包下的一个工具类 内涵各种处理集合的静态方法
  • 基于FPGA的正弦波发生器设计与实现

    基于FPGA的正弦波发生器设计与实现 摘要 本文介绍了一种基于FPGA的正弦波发生器的设计与实现 通过使用FPGA的数字信号处理功能 可以实现高精度 高性能的正弦波生成 文章首先介绍了DDS Direct Digital Synthesis
  • vs2008中,在OCX控件中应用doc/view基本步骤

    1 利用向导创建一个MFC ActiveX Control控件CMyOCX 2 在工程中加入ActivDoc头文件和执行文件 class CActiveXDocTemplate public CSingleDocTemplate enum
  • 阿里-淘菜菜一面(电话面试)面经

    上来我先给面试官打预防针 我说我准备时间不长 可能不太行 意思是想推迟一段时间再面试 他让我别紧张 面试时间定下来不容易 就先直接面试 问题如下 1 在学校还是在家里 课程怎么样了 在学校 学分修完了 目前在学技术 2 自我介绍 人工智能学
  • Android LayoutInflater原理分析,带你一步步深入了解View(一)

    相信接触Android久一点的朋友对于LayoutInflater一定不会陌生 都会知道它主要是用于加载布局的 而刚接触Android的朋友可能对LayoutInflater不怎么熟悉 因为加载布局的任务通常都是在Activity中调用se
  • 数字化转型背景-数字化转型网

    数字化转型网szhzsw cn 数字化转型是指企业或组织将传统业务模式 流程 技术和文化等方面与数字技术相融合 实现数字化升级和转型的过程 数字化转型的背景有以下几个方面 技术发展 随着科技的不断进步 各种数字技术不断涌现 包括人工智能 物
  • Android Switch控件修改样式

    Android中自带的Switch控件在很多时候总觉得和整体系统风格不符 很多时候 自定义Switch是一种方法 但其实不用这么麻烦 安卓自带的Switch通过修改一些属性 也可以达到和自定义Switch差不多的一个效果 个人感觉 Swit
  • 对java中char的取值范围思考

    主要说一下我遇到的一个问题 就是网上关于char字符的取值范围定义 有的说是0 255 有的说是 u0000 uffff 其实 这两种说法都对 我们都知道 java中给char字符的解释是十六位 双字节 也就是按照补码的方式寻求取值范围 就
  • 延时任务-基于redis zset的完整实现

    所谓的延时任务给大家举个例子 你买了一张火车票 必须在30分钟之内付款 否则该订单被自动取消 订单30分钟不付款自动取消 这个任务就是一个延时任务 我之前已经写过2篇关于延时任务的文章 完整实现 通过DelayQueue实现延时任务 延时任