1. 程式人生 > >使用redis實現秒殺功能

使用redis實現秒殺功能

秒殺功能描述:

首先頁面上有四個主要功能:

1、商品資訊(你要搶的是什麼商品)

2、倒計時(120、199、198...,也可以是整點秒殺)

3、商品數量變化(支付成功一件,數量減少一件,如果使用者取消購買,重新加入到佇列)

4、搶購按鈕(使用者點選搶購)

為什麼要使用redis實現秒殺:

1、使用redis列表的原子特性,即使多個使用者同時到達,也會依次執行,這樣就防止超賣多賣現象的產生了。

2、redis是快取資料庫,資料直接儲存在記憶體中,讀取效率高。

PS:使用mysql也可以實現秒殺功能,實現原理就是加鎖,當多個使用者同時對一個欄位進行修改時,給資料加鎖,只有當事物提交或者回滾時才會釋放鎖。for update(加鎖)語句只能放到select中,只有當查詢時把資料鎖住才有意義

BEGIN; 

INSERT INTO stock_log VALUES 

SELECT count FROM stock WHERE id=1 AND count>0 FOR UPDATE; 

UPDATE stock SET count = count -1 WHERE id=1 AND count > 0; 

COMMIT; 

實現思想:

首先商品數量變化可以使用ajax輪詢的方式,請求介面,這個介面查詢redis對列的數量,並返回。

當用戶點選搶購時,從佇列中pop一個或多個(使用者購買數量,可以限制)元素,然後進行支付操作,支付成功後,向mysql中加入訂單資訊,如果使用者取消或者支付失敗,將商品重新新增到佇列中。

如果要做使用者等級(會員、非會員),可以增加一個會員使用者的對列,每次點選搶購時,如果是會員先將會員加入對列,當會員對列沒有使用者時,普通使用者才能購買。