使用Redis计算特定的计划的Sidekiq作业

时间:2018-08-27 09:19:22

标签: ruby-on-rails redis sidekiq

是否可以使用Redis检索以下作业计数?

Sidekiq::ScheduledSet.new.inject(0) do |memo, job|
  memo += 1 if job.at <= Time.now
  memo
end

即预定的作业应该已经运行,但尚未运行。对于较小的队列大小,此方法行之有效,但对于较大的队列,则伸缩性较差(对于60k计划的作业,扩展时间超过30秒)。谢谢!

2 个答案:

答案 0 :(得分:1)

"ZRANGEBYSCORE schedule '-inf' #{Time.now.to_f}"

https://redis.io/commands/zrangebyscore

答案 1 :(得分:0)

受迈克的启发,我采用了以下方法:

Sidekiq.redis { |c| c.zcount('schedule', '-inf', Time.now.to_f) }