利用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一下异常再扔回队列,为了防止无限制重试,还应该设定最大重试次数,当达到最大重试次数时做日志收集,人工干预

你可能感兴趣的:(利用redis的sorted set实现延时队列)