队列中写入数据重复的问题是什么原因造成的
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel 5.6
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP7.3
3). 当前系统
Centos7
4). 业务环境
生产环境,没有使用负载均衡,单服务器,单数据库
5). 相关软件版本
MySQL5.7
2. 问题描述?
项目中有一个批量从其他平台获取数据的功能,使用队列做的,但是执行过程中偶尔会发生订单重复写入的问题,
代码里没有复杂功能,就是一个遍历数组然后根据第三方id判断是否存在订单,不存在就写入,就不贴代码里
但是偶尔会有订单重复写入,而且一看数据写入时间一模一样,就很困惑
特来寻求下大神们的帮助,感谢
3. 您期望得到的结果?
不会出现重复写入数据的情况
这原因很简单,就是你的数据幻读了。
什么原因我也不分析,只说解决方案:
在 MySql 操作中,把 Select 查询三方 ID 不存在时加锁,避免其他进程占用,伪代码:
用redis的分布式锁,或者表直接加订单号的唯一索引