闭关修行中......
没太看懂你的代码表达的意思,感觉跟你的描述不太相符。
用redis也不是不可以,但效率可能有点低,建议使用乐观锁解决这个问题。
举个例子:假设order表里有个version字段,该字段只能单向自增(一般就是+1),SELECT的时候把version也查出来:
version
SELECT ..., version FROM order WHERE ...; UPDATE order SET ..., version = version+1 WHERE version = 上一个SELECT语句带出来的version值
假设用户A和用户B在某时间段内先后或同时查出来order_id=1, version=1的订单,UPDATE的时候由于mysql行锁的存在,只会有一个用户UPDATE成功(1 rows affected),另一个用户则UPDATE失败(0 rows affected),然后可以根据UPDATE后返回的话行数判断用户是否抢单成功。
没太看懂你的代码表达的意思,感觉跟你的描述不太相符。
用redis也不是不可以,但效率可能有点低,建议使用乐观锁解决这个问题。
举个例子:
假设order表里有个version字段,该字段只能单向自增(一般就是+1),SELECT的时候把
version
也查出来:假设用户A和用户B在某时间段内先后或同时查出来order_id=1, version=1的订单,UPDATE的时候由于mysql行锁的存在,只会有一个用户UPDATE成功(1 rows affected),另一个用户则UPDATE失败(0 rows affected),然后可以根据UPDATE后返回的话行数判断用户是否抢单成功。