秒殺技術選型分析

控制庫存的選定的五個技術方案

  • mysql樂觀鎖
  • mysql悲觀鎖
  • redis的原子操作incr
  • redis的watch(redis樂觀鎖)
  • redis執行lua腳本

測試結果(8核16G,300個線程併發,每次消耗一個庫存,時間單位ms)

秒殺技術選型分析

方案對比

推薦使用redis+LUA的方式實現。

  1. mysql樂觀鎖,在高併發的情況下會導致大量的無效請求,同時對mysql數據庫的性能造成影響,導致系統吞吐的急劇下降。
  2. mysql悲觀鎖,在高併發下雖然執行的總體耗時不會太長,但是會導致用戶長時間等待,並且不釋放數據庫的連接,導致其他業務拿不到數據庫連接。
  3. redis的watch跟mysql的樂觀鎖有同樣的問題,會導致大量無效的請求,進而導致正常請求無法完成。
  4. redis的原子操作,incr在壓測看起來是效果最好的。但是因為是先減庫存然後不過庫存不足的時候再回滾當前操作,所以會造成庫存抖動,用戶體驗會不太好。incr和lua的實現原理大致是相同的,會比lua快是因為它只執行單一的incr操作,判斷在client端,並且client端是多線程去執行的,但是redis是單線程執行。
  5. redis+LUA,這個是最理想的狀態。


分享到:


相關文章: