基于redis实现延迟队列

简介: 基于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就可以实现。当然还有其他思路都可以去实现它,欢迎大家多多交流。

相关文章
|
编解码 NoSQL Java
使用Spring Boot + Redis 队列实现视频文件上传及FFmpeg转码的技术分享
【8月更文挑战第30天】在当前的互联网应用中,视频内容的处理与分发已成为不可或缺的一部分。对于视频平台而言,高效、稳定地处理用户上传的视频文件,并对其进行转码以适应不同设备的播放需求,是提升用户体验的关键。本文将围绕使用Spring Boot结合Redis队列技术来实现视频文件上传及FFmpeg转码的过程,分享一系列技术干货。
1255 4
|
存储 监控 NoSQL
使用Redis实现延迟消息发送功能
使用 Redis 的密码认证功能,为实例设置密码以防止未授权访问。为消息提供适当加密,确保消息内容在网络传输过程中不被窃取或篡改。
462 16
|
设计模式 NoSQL Go
Redis 实现高效任务队列:异步队列与延迟队列详解
本文介绍了如何使用 Redis 实现异步队列和延迟队列。通过 Go 语言的 `github.com/go-redis/redis` 客户端,详细讲解了 Redis 客户端的初始化、异步队列的实现和测试、以及延迟队列的实现和测试。文章从基础连接开始,逐步构建了完整的队列系统,帮助读者更好地理解和应用这些概念,提升系统的响应速度和性能。
434 6
|
消息中间件 存储 NoSQL
如何用Redis实现延迟队列?
综上所述,通过Redis的有序集合和一些基本命令,我们可以轻松地构建出功能完善的延迟队列系统。根据具体需求,可以进一步优化和扩展,以满足高性能和高可靠性的业务需求。
631 1
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
518 1
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
NoSQL Redis
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
|
缓存 NoSQL Java
面试官:Redis如何实现延迟任务?
延迟任务是计划任务,用于在未来特定时间执行。常见应用场景包括定时通知、异步处理、缓存管理、计划任务、订单处理、重试机制、提醒和数据采集。Redis虽无内置延迟任务功能,但可通过过期键通知、ZSet或Redisson实现。然而,这种方法精度有限,稳定性较差,适合轻量级需求。Redisson的RDelayedQueue提供更简单的延迟队列实现。
1055 9
|
监控 NoSQL Redis
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决
Redis性能优化问题之配置 Redis 的自动碎片整理功能,如何解决
|
存储 NoSQL API
【小小思考】Redis实现去重任务队列
【2月更文挑战第1天】思考一下如何用Redis实现去重的任务队列,主要有List 、List + Set/Hash/Bloom Filter、ZSet、Lua和开源库等方式。
845 1