乐观锁:解决多节点部署定时任务,数据重复插入问题

场景

1、定时任务扫描A表,根据A表中a1字段的值是否为0,来标识是否已经给B表插入了数据;
2、若扫描到A表中rowA记录a1字段值为0,则将rowA记录a1字段值置为1。并根据rowA记录生成待插入B表的数据rowB,将rowB插入B表;

存在问题

多节点部署服务后,同时存在多个节点上的定时任务同时操作同一个库中的同一张表。这样可能会存在给B表插入了多条相同的数据。具体情况如下图:


Screen Shot 2020-05-08 at 9.21.01 AM.png

解决方案:

因为这种场景中,多个节点共用了一个数据库。所有我们可以从数据库方面考虑,解决该问题。这里有2种方案。

  1. 给B表中某个唯一字段(比如b字段)添加唯一索引。
  2. 使用乐观锁给限制A表的更新,若更新成功,则给B表插入数据。
select flag, version from user where id = xxx
update user set flag = 1, version = {newVersion} where id = {id} and version = {oldVersion}

你可能感兴趣的:(乐观锁:解决多节点部署定时任务,数据重复插入问题)