大锤张
2018-03-31 15:57
请问哪里有用到锁 看了代码 没找到
status 0 未处理 1 已处理 2 处理中
应该是查询status=0的数据,然后将数据状态改为2,如果执行成功就改为1,反之改为0,这样每次查询status=0的数据就不会有重复的。
视频中说的锁没有任何意义。
这里的锁应该是配合其他地方使用的, 其他地方查询的时候不对 status 为 2 (处理中的)的进行修改处理
正确做法应该是先 查找 2条数据出来, 然后更新为 2 (处理中), 下一步对这俩条数据进行处理
这个锁完全是自己yy的一个锁, 完全没有起到作用;
试想一下:
第一次执行
修改2条记录为 状态更新为2 。
然后搜索状态为 2 的数据 (2条);
处理数据 (此时处理流程在复杂状态下1分钟内只处理了1条);
1分钟后, 第二次执行
修改2条记录为 状态更新为2 。
然后搜索状态为 2 的数据 (3条,2条是本次更新的记录,还有1条是上次没有处理完成的);
处理数据 (此时是不是有一条数据重复处理了???);
订单状态先设置为“处理中”(锁定),然后进行处理,处理完成后再设置为“已处理”(解除锁定)。
PHP消息队列实现及应用
32730 学习 · 58 问题
相似问题