java如何实现抢单功能
1 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
用redis也不是不可以,但效率可能有点低,建议使用乐观锁解决这个问题。
举个例子:
假设order表里有个version字段,该字段只能单向自增(一般就是+1),SELECT的时候把version也查出来:
SELECT ..., version FROM order WHERE ...;UPDATE orderSET ...,version = version+1WHERE version = 上一个SELECT语句带出来的version值
假设用户A和用户B在某时间段内先后或同时查出来order_id=1, version=1的订单,UPDATE的时候由于mysql行锁的存在,只会有一个用户UPDATE成功(1 rows affected),另一个用户则UPDATE失败(0 rows affected),然后可以根据UPDATE后返回的话行数判断用户是否抢单成功。
添加回答
举报
0/150
提交
取消