Redis中List的使用場景

秒殺場景

最近在研究商品秒殺,遇到了幾個問題,一個就是庫存超出問題,這個利用MySQL的鎖機制就能解決。第二個就是性能問題,面對海量的請求,MySQL承受的壓力是巨大的,但是對於秒殺,可購買商品數量及其有限,MySQL完全不需要承受如此大的壓力。例如秒殺商品限額100,其實MySQL需要處理的僅有這100人,即使參與秒殺的人數再多,MySQL也可以不必理會。當然即使沒有搶購到,也需要給這絕大部分的用戶反饋信息,此時就可以藉助於Redis。

原來想着藉助於String類型,存儲一個庫存總數,每次DECR一下,但是經過併發測試,庫存總是會減爲負數,所以放棄了使用String。

接着便採用了LIst類型。首先判斷List的長度(使用LLEN),如果沒有超過庫存限制,MySQL減庫存等操作,操作成功則RPUSH一個數據到List,直到達到了庫存上限。如果超過庫存限制,直接返回秒殺結束。經過幾輪併發測試,每次隊列的長度剛好等於庫存數量,不會超出庫存數量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章