基于redis实现延迟队列

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: 基于redis实现延迟队列

基于redis实现延迟队列



1. 需求背景


产品经理给你提供以下需求:


  1. 超过10s未支付的订单,将会被取消
  2. 外卖商家超过5min未接单的订单,将会被取消
  3. 在平台注册但30day内未登录的用户,发短信提醒
  4. 首次充值后30min内未解约的用户,发送优惠卷


2. 理解需求


  1. 首先这是一个需求。
  2. 其次这是一个时间滞后的需求。
  3. 最后这是一个延迟队列需求。


3. 做需求


  1. 首先你知道了这是一个延迟队列需求
  2. 其次你知道了该用什么存储(redis+zset)
  3. 最后写代码完成它


4. 代码


  1. 消费延迟队列核心代码
  2. 640.png
  3. 生产核心要素就是利用redis提供的zset集合特性来做,至于为什么选择它,大家可以自行上网学习,时间会教会你一切!
  4. 生产消费队列核心代码
  5. 640.png
  6. 生产没有什么可说的,就是往里灌数据就行了!


5. 验证


往里塞3条数据,然后开启go func让其无限监听延迟队列。

640.png


6. 结果

首先看下延迟队列数据是否是三条

640.png


在看下是否是订单1先执行,其次是订单2,最后是订单3。

订单1:

640.png

订单2:

640.png

订单3:

640.png


再次看下延迟队列:发现延迟队列已经没有数据了,bingo!!!


7. 总结


延迟队列思想很简单,就是利用redis的zset再配合go func就可以实现。当然还有其他思路都可以去实现它,欢迎大家多多交流。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
消息中间件 NoSQL Java
别再用 Redis List 实现消息队列了,Stream 专为队列而生
别再用 Redis List 实现消息队列了,Stream 专为队列而生
123 0
|
26天前
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
26天前
|
NoSQL Redis
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
|
26天前
|
监控 NoSQL Redis
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决
|
3月前
|
缓存 NoSQL Java
面试官:Redis如何实现延迟任务?
延迟任务是计划任务,用于在未来特定时间执行。常见应用场景包括定时通知、异步处理、缓存管理、计划任务、订单处理、重试机制、提醒和数据采集。Redis虽无内置延迟任务功能,但可通过过期键通知、ZSet或Redisson实现。然而,这种方法精度有限,稳定性较差,适合轻量级需求。Redisson的RDelayedQueue提供更简单的延迟队列实现。
405 9
|
3月前
|
存储 缓存 NoSQL
Redis实现延迟任务的几种方案
Redis实现延迟任务的几种方案
|
3月前
|
存储 NoSQL Java
Redis 实现延迟任务的深度解析
【4月更文挑战第17天】
189 0
|
3月前
|
存储 NoSQL API
【小小思考】Redis实现去重任务队列
【2月更文挑战第1天】思考一下如何用Redis实现去重的任务队列,主要有List 、List + Set/Hash/Bloom Filter、ZSet、Lua和开源库等方式。
192 1
|
3月前
|
缓存 NoSQL 关系型数据库
Redis与MySQL的数据情感:延迟双删的秘密揭示
Redis与MySQL的数据情感:延迟双删的秘密揭示
232 0
|
3月前
|
缓存 NoSQL 关系型数据库
redis与mysql的数据一致性问题(数据同步延迟)
redis与mysql的数据一致性问题(数据同步延迟)
45 0