背景介绍

如果《忍者必须死3》玩儿的比较多的话,你会经常需要每隔4H给自己的坐骑喂食一次,通过喂食来升级。一次喂食后,坐骑需要花4个小时吃完。现在有个新需求,可以使用道具卡来丰富玩法。道具卡有两种,一种是加速卡,一种是自动喂食卡。加速卡会使吃食的时间缩短两个小时,自动喂食卡可以在坐骑吃完当前喂食食物后系统帮助其自动喂食一次【自动延时操作】。

基于Zset的实现方式

Redis实现延时任务,是通过其数据结构ZSET来实现的。ZSET会储存一个score和一个value,可以将value按照score进行排序。延时任务的实现分为以下几步来实现:

  1. 任务的执行时间作为score【时间戳,当前时间+4h的时间点设置为时间戳】要执行的任务数据作为value,存放在zset中
  2. 用一个进程定时查询zset的score大于当前时间的任务
  3. 如果找到这样的任务,就将该任务取出来执行,否则休眠一段时间后再进行轮询

redis的ZSET是通过跳跃表来实现的,复杂度为O(logN),N是存放在ZSET中元素的个数。用redis来实现可以依赖于redis自身的持久化来实现持久化,redis的集群来支持高并发和高可用。因此开发成本很小,可以做到很实时

背景拓展

当然还见于我们的订单超时未支付的场景,如果我们下了单超过30分钟未支付则订单会被关闭

【Redis原理机制 四】基于Redis实现延时任务相关推荐

  1. Redis数据库(四)——Redis集群模式(主从复制、哨兵、Cluster)

    Redis数据库(四)--Redis集群模式(主从复制.哨兵.Cluster) 一.Redis主从复制 1.主从复制流程 二.哨兵模式 1.哨兵模式集群架构 2.哨兵模式主要功能 3.哨兵监控整个系统 ...

  2. Redis数据库系列(四)、Redis事务、乐观锁和分布式锁

    第四章.Redis事务.乐观锁和分布式锁 什么是事务机制? 4.1.关系型数据库中的事务机制遵循ACID规则 关系型数据库例如MySql.Oracle: 事务的英文是transaction,以现实中的 ...

  3. Redis系列教程(四):Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  4. java redis id生成器_基于redis的分布式ID生成器

    项目地址 基于redis的分布式ID生成器. 准备 首先,要知道redis的EVAL,EVALSHA命令: 原理 利用redis的lua脚本执行功能,在每个节点上通过lua脚本生成唯一ID. 生成的I ...

  5. 【超详细】2021最新版Redis安装教程(基于Redis 6.2.x版本)

    一.前言 今天是2021年4月20日,如今的Redis版本已经更新到了6.2.x版本, 该技术博客主要记录了Linux操作系统下如何安装Redis数据库 为什么不使用Windows系统安装? 因为我们 ...

  6. php使用redis分布式锁,php基于redis的分布式锁实例详解

    在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现. 固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效 ...

  7. java redis延迟队列_基于redis实现的延迟消息队列

    delay-queue redis实现延迟消息队列 需求背景 最近在做一个排队取号的系统 在用户预约时间到达前XX分钟发短信通知 在用户预约时间结束时要判断用户是否去取号了,不然就记录为爽约 在用户取 ...

  8. redis分布式缓存php,基于redis分布式缓存实现

    第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景数据结构(Data Structure)需求越来越 ...

  9. Redis总结(四)Redis 的持久化

    前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来 ...

最新文章

  1. 学号 20175223 《Java程序设计》第4周学习总结
  2. DateTimePicker——开源的Android日历类库
  3. 源码学习【原子类AtomicInteger】Java原子类底层实现(解释详细)
  4. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍
  5. JavaScript MVC 框架比较
  6. 第三章:数组[4Arrays]
  7. 宋红康 jvm 课程ppt(String部分)
  8. Proguard打包混淆报错:can't find superclass or interface
  9. Specification同时实现模糊查询、排序、分页
  10. 用HTML加css做成的新年特效,使用css3和html给网站添加上春节灯笼特效的源码分享...
  11. JAVAEE和项目开发——JSP详解
  12. 锐龙r76800h和酷睿i512500h核显对比 r7 6800h和i5 12500h哪个好
  13. AHB协议(2/2)
  14. 优启通桌面只有一个计算机,优启通图文详细使用教程,优启通使用教程
  15. remote: HTTP Basic: Access denied的解决方法
  16. stc8实用外部晶振程序
  17. STC15系列单片机EEPROM读写示例
  18. cad坐标归零lisp_批量除一个数的lisp,请高手改成保留成设置小数位置。
  19. 浩易南:少用信用卡,少逛淘宝,多用现金
  20. 解决Git在clone项目时的fatal

热门文章

  1. 配置单 核显本排行榜 最新项目
  2. H - Transportation(费用流)
  3. RocketMQ源码分析(十二)之CommitLog同步与异步刷盘
  4. linux mkdir 文件夹,Linux mkdir创建文件夹命令
  5. 牛客网算法——名企高频面试题143题(2)
  6. ARM 920T CP15 协处理器
  7. 想自学python,如果做不到这几条,建议选择继续躺平刷抖音.....
  8. 适合夫妻的创业项目:开家年入20万的私菜馆
  9. graphpad prism 9 for Mac(专业医学绘图分析软件)
  10. 如何使用css实现网站变灰效果