课程
/后端开发
/PHP
/PHP消息队列实现及应用
请问哪里有用到锁 看了代码 没找到
2018-03-31
源自:PHP消息队列实现及应用 2-2
正在回答
status 0 未处理 1 已处理 2 处理中
应该是查询status=0的数据,然后将数据状态改为2,如果执行成功就改为1,反之改为0,这样每次查询status=0的数据就不会有重复的。
视频中说的锁没有任何意义。
这里的锁应该是配合其他地方使用的, 其他地方查询的时候不对 status 为 2 (处理中的)的进行修改处理
正确做法应该是先 查找 2条数据出来, 然后更新为 2 (处理中), 下一步对这俩条数据进行处理
这个锁完全是自己yy的一个锁, 完全没有起到作用;
试想一下:
第一次执行
修改2条记录为 状态更新为2 。
然后搜索状态为 2 的数据 (2条);
处理数据 (此时处理流程在复杂状态下1分钟内只处理了1条);
1分钟后, 第二次执行
然后搜索状态为 2 的数据 (3条,2条是本次更新的记录,还有1条是上次没有处理完成的);
处理数据 (此时是不是有一条数据重复处理了???);
订单状态先设置为“处理中”(锁定),然后进行处理,处理完成后再设置为“已处理”(解除锁定)。
举报
消息队列是个什么玩意儿,使用队列解决秒杀等实际问题概念和使用方法
2 回答处理订单的时候,如果1分钟没处理完当前的两个订单
1 回答订单时异步处理的,前端怎么样立即得到秒杀结果呢
4 回答为什么需要定时去执行?这样做的好处是什么?订单不是可以在点击按钮触发修改状态就可以实现?
2 回答像go语言或者swoole这种,他们有异步处理能力,是不是可以不用队列?
3 回答redis LPOP 取出list里面的数据,再用LLEN 来取值,数据长度就变了,意味着又可以参加秒杀了么