利用redis的sorted set实现延时队列

简单写一下思路:

  1. 数据写入sorted set(zadd),socre为执行时间,key为队列名,value为数据
  2. 消费队列循环从sorted set根据score获取(zrangebyscore)小于等于当前时间的且score最小的一条数据
  3. 如果没有获取到数据,sleep一段时间(500ms)继续获取
  4. 由于sorted set没有pop,为了防止在分布式的情况下任务重复执行,所以需要进行rem操作,只有rem成功才进行执行

此队列没有ACK保证等,所以需要自行实现
最简单的就是catch一下异常再扔回队列,为了防止无限制重试,还应该设定最大重试次数,当达到最大重试次数时做日志收集,人工干预

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容