【发布时间】:2011-05-07 12:57:38
【问题描述】:
基于 Redis 的延迟任务执行(即调度)有什么技巧吗?
也许有一些聪明的方法可以将 BLPOP 延迟给定的秒数?..
【问题讨论】:
标签: scheduling redis delayed-execution
基于 Redis 的延迟任务执行(即调度)有什么技巧吗?
也许有一些聪明的方法可以将 BLPOP 延迟给定的秒数?..
【问题讨论】:
标签: scheduling redis delayed-execution
如果你想使用 redis 进行调度,我建议使用 sorted set (z*) 命令:
http://code.google.com/p/redis/wiki/SortedSets
你可以做的是这样的:
ZADD jobs <unix timestamp of when you want the job to run> <job identifier>
例如:
ZADD jobs 1291348355
然后,您可以每隔一段时间(最多每秒)拉取应该运行(或现在应该已经运行)的计划作业:
ZRANGEBYSCORE jobs -inf, <current unix timestamp>
Boom,你的工作开始了。当然,请确保从排序集中删除已完成的作业。
【讨论】:
您可以使用名称中包含时间组件的多个 LIST 的环。作为时间组件,您可以采用当前秒 (0-59)。
您总是在当前秒内将任务添加到列表中。要获得作业,您只在保证内容早于给定秒数的那些列表上执行 BLPOP(低超时)。
如果您在多个主机上工作,则必须注意时钟同步 (NTP)。
【讨论】: