多实例部署后定时任务重复跑,怎么保证只执行一次

三种思路。最省事是分布式锁:任务开始时用 Redis 的 SET 带 NX 和过期时间抢锁,抢不到就跳过本轮。

更严谨是交给调度框架,由调度中心指定一台执行;不想引中间件就用数据库,抢唯一键记录或加行锁。

锁的过期时间要给够并支持续期,否则任务没跑完锁先过期,第二个实例就进来了。

任务本身尽量做成幂等。

SET lock:order:sync <instance-id> NX PX 300000

# 释放锁必须比对 value,避免误删别人的锁
if redis.call('get', KEYS[1]) == ARGV[1] then
  return redis.call('del', KEYS[1])
end
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容