我找到了Resque:
那么它是如何实现的呢?
我发现它可以安排延迟作业。我的问题是,它如何检查延迟的作业?如果一个月时间内有5000个延迟的作业,我希望它不会每10秒检查所有延迟的作业。
那么它是如何实现的呢?
我发现它可以安排延迟作业。我的问题是,它如何检查延迟的作业?如果一个月时间内有5000个延迟的作业,我希望它不会每10秒检查所有延迟的作业。
https://github.com/elucid/resque-delayed/blob/master/lib/resque-delayed/resque-delayed.rb
每次守护进程唤醒时,只需要检查集合中的第一个项目(使用ZRANGEBYSCORE命令)。 守护进程逐个获取相关作业,直到轮询查询不返回结果,然后再次休眠。local res = redis.call('ZRANGEBYSCORE',KEYS[1], "-inf", ARGV[1], 'LIMIT', 0, 10 )
if #res > 0 then
redis.call( 'ZREMRANGEBYRANK', KEYS[1], 0, #res-1 )
return res
else
return false
end