gpt4 book ai didi

ruby - resque 如何检查何时运行作业?

转载 作者:IT王子 更新时间:2023-10-29 06:02:33 26 4
gpt4 key购买 nike

我找到了 Resque:

https://github.com/elucid/resque-delayed

而且我可以看到我可以安排延迟的工作。我的问题是,它如何检查延迟的工作?如果我在一个月内有 5000 个延迟作业,我希望它不会每 10 秒检查一次所有延迟作业。

那么它是如何完成的呢?

最佳答案

它不必检查所有延迟的作业。它在 Redis 中维护一个排序集,作业按计划时间排序。请参阅代码:

https://github.com/elucid/resque-delayed/blob/master/lib/resque-delayed/resque-delayed.rb

每次守护程序唤醒时,只需要检查集合的第一项(使用 ZRANGEBYSCORE 命令)。 daemon 一个一个地获取相关的作业,直到轮询查询没有返回结果,然后它再次休眠。

可以通过逐个获取作业来进一步提高性能。它可以使用服务器端 Lua 脚本作为轮询查询来实现:

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

在一次往返中,此脚本获取 10 个作业(如果可用),并将它们从 zset 中删除。比 Resque-delayed 目前要求的 11 ZRANGEBYSCORE 和 10 ZREM 好得多。

关于ruby - resque 如何检查何时运行作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com