參與過搶購活動就知道,很明顯的一點是商即便商品實際沒有了也是可以下單成功的,但是在支付的時候會提示你商品沒有了。
實現原理:list雙向鏈表
使用redis隊列,因為pop操作是原子的,即使有很多用戶同時到達,也是依次執行.(mysql事務在高並發下性能下降很厲害,文件鎖的方式也是).
此處用到了Redis中的鏈表(list)數據類型:
'棧':從鏈表的頭部添加元素,先進后出
'隊列':從鏈表的尾部添加元素,先進先出
redis保存數據時都有key和value,key和value要么是String類型的,要么是byte[]類型的
第一步:先將商品庫存存入隊列
第二步:搶購開始,設置庫存的緩存周期
第三步:客戶端執行下單操作,下單前判斷redis隊列庫存量