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
提交
取消