使用Redis+MQ+MySql實現商品秒殺

基本思路是經過Redis高速緩存來代替緩慢的數據庫操做,藉此提升系統在高併發狀況下的數據處理能力。
原系統:
1)秒殺請求進入後臺後被髮送到消息隊列,並返回入隊成功;
2)消息隊列的消費者依次處理執行SQL處理消息隊列中的秒殺請求;
根據測試,SQL函數的執行時間約爲30ms,屬於慢SQL,在1000次/s,總計50次請求下,系統可以很快的對50萬次請求進行入隊操做,可是後續消息隊列中請求大約須要執行6小時。
修改後:
1)秒殺請求進入後臺後,判斷Redis中對應秒殺商品的庫存,如有庫存則發送到消息隊列1,返回入隊成功,不然,返回秒殺結束;
2)消息隊列1使用Redis對請求進行去重處理,去掉重複的請求後發送給消息隊列2;
3)消息隊列2使用Redis對對應秒殺商品進行減庫存操做,以後發送給消息隊列3;
4)消息隊列3執行原秒殺系統中SQL,對MySql中對應數據表進行操做;
修改後的系統因爲消息隊列一、2中都是對Redis的操做,因此執行速度很是快,響應很是迅速,等到了消息隊列3時,請求數基本上已經等於秒殺的商品數,須要執行的SQL數量少了,速度天然也就快了,不會發生消息隊列的擁堵。數據庫

相關文章
相關標籤/搜索