问答详情
源自:2-2 .Mysql订单队列

处理订单时用到了锁 请问哪里用到锁了

请问哪里有用到锁   看了代码  没找到

提问者:大锤张 2018-03-31 15:57

个回答

  • 圆寂大师
    2021-12-12 11:51:47

    status 0 未处理 1 已处理 2 处理中

    应该是查询status=0的数据,然后将数据状态改为2,如果执行成功就改为1,反之改为0,这样每次查询status=0的数据就不会有重复的。


    视频中说的锁没有任何意义。

  • qq_TheLeftEar_0
    2018-07-29 20:25:39

    这里的锁应该是配合其他地方使用的, 其他地方查询的时候不对 status 为 2 (处理中的)的进行修改处理

  • qq_TheLeftEar_0
    2018-07-29 20:21:26

    正确做法应该是先 查找 2条数据出来, 然后更新为 2 (处理中),  下一步对这俩条数据进行处理

  • qq_TheLeftEar_0
    2018-07-29 20:17:23

    这个锁完全是自己yy的一个锁, 完全没有起到作用;

     试想一下:

     第一次执行

         修改2条记录为  状态更新为2 。 

        然后搜索状态为 2 的数据  (2条);

        处理数据 (此时处理流程在复杂状态下1分钟内只处理了1条);

    1分钟后, 第二次执行     

        修改2条记录为  状态更新为2 。 

        然后搜索状态为 2 的数据  (3条,2条是本次更新的记录,还有1条是上次没有处理完成的);

        处理数据 (此时是不是有一条数据重复处理了???);


  • hen_nam
    2018-04-08 15:59:35

    订单状态先设置为“处理中”(锁定),然后进行处理,处理完成后再设置为“已处理”(解除锁定)。