| 结构 | member=任务ID,score=到期时间戳 |
|---|---|
| 投递 | ZADD delay <ts> task:id |
| 领取 | ZRANGEBYSCORE + ZREM(脚本内原子) |
示例
示例
redis-cli ZADD delay 1730020000 task:1001
redis-cli ZRANGEBYSCORE delay -inf 1730020000 LIMIT 0 10
redis-cli ZREM delay task:1001Lua 原子领取
Lua 原子领取
local jobs = redis.call('ZRANGEBYSCORE', KEYS[1], '-inf', ARGV[1], 'LIMIT', 0, 10)
for i, id in ipairs(jobs) do
redis.call('ZREM', KEYS[1], id)
end
return jobs消费侧先执行再删除会重复执行;先删除后执行则进程崩溃会丢任务,配合幂等键与失败重投更稳。