数据被重复处理了三次,查出来三台机器都配了同一个 cron。

这类问题在多机部署时很常见。

解法按可靠性排:

  1. 分布式锁(Redis SETNX),任务开始抢锁,抢不到就跳过
  2. 单独一台机器跑定时任务,其他机器不配
  3. 数据库唯一约束兜底,重复处理也不产生重复数据

推荐 1+3 组合。锁防重复执行,唯一约束防漏网。

第 2 种最简单,但机器挂了任务就停了,需要额外的存活监控。

现在我的习惯:任何定时任务上线前先问「部署几台,会不会重复」。

主楼