這篇文章主要為大家詳細(xì)介紹了php+redis實(shí)現(xiàn)商城秒殺功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
1、安裝redis,根據(jù)自己的php版本安裝對(duì)應(yīng)的redis擴(kuò)展(此步驟簡(jiǎn)單的描述一下)
1.1.安裝php_igbinary.dll,php_redis.dll擴(kuò)展此處需要注意你的php版本如圖:
1.2.php.ini文件新增extension=php_igbinary.dll;extension=php_redis.dll兩處擴(kuò)展
ok此處已經(jīng)完成第一步redis環(huán)境搭建完成看看phpinfo
2、項(xiàng)目中實(shí)際使用redis
2.1.第一步配置redis參數(shù)如下,redis安裝的默認(rèn)端口為6379:
2.2.實(shí)際函數(shù)中使用redis:
2.3. 秒殺的核心問題是在大并發(fā)的情況下不會(huì)超出庫(kù)存的購(gòu)買,這個(gè)就是處理的關(guān)鍵所以思路是第一步在秒殺類的先做一些基礎(chǔ)的數(shù)據(jù)生成:
2.4. 第二步就是關(guān)鍵所在,用戶在進(jìn)入商品詳情頁(yè)前先將當(dāng)前商品的庫(kù)存進(jìn)行隊(duì)列存入redis如下:
接下來要做的就是用ajax來異步的處理用戶點(diǎn)擊購(gòu)買按鈕進(jìn)行符合條件的數(shù)據(jù)進(jìn)入購(gòu)買的排隊(duì)隊(duì)列(如果當(dāng)前用戶沒在當(dāng)前產(chǎn)品用戶的隊(duì)列就進(jìn)入排隊(duì)并且pop一個(gè)庫(kù)存隊(duì)列,如果在就拋出,):
附加一個(gè)調(diào)試的函數(shù),刪除指定隊(duì)列值:
走到此處的時(shí)候秒殺的核心基本就完了,細(xì)節(jié)還需要自己在去完善,像購(gòu)物車這邊的處理還有訂單的處理,好吧開始跑程序利用apache自身的ab可以進(jìn)行簡(jiǎn)單的模擬并發(fā)測(cè)試如下:
跑起來,我擦跑步起來redis沒有任何反應(yīng),此時(shí)還少一步重要的步驟就是開啟redis服務(wù),請(qǐng)根據(jù)自己的系統(tǒng)下一個(gè)redisbin_x32或者redisbin_x64的redis服務(wù)管理工具,點(diǎn)擊redis-server.exe,ok至此全部完成如下圖:
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » PHP+非關(guān)數(shù)據(jù)庫(kù)實(shí)現(xiàn)秒殺功能