基于redis实现延迟队列

基于redis实现延迟队列

1. 需求背景

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

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

2. 理解需求

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

3. 做需求

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

4. 代码

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

5. 验证

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

6. 结果

首先看下延迟队列数据是否是三条基于redis实现延迟队列

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

订单1:基于redis实现延迟队列订单2:基于redis实现延迟队列订单3:基于redis实现延迟队列

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

7. 总结

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


原文始发于微信公众号(堆栈future):基于redis实现延迟队列

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103484.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!