redis秒殺場(chǎng)景解決方案

redis秒殺場(chǎng)景解決方案

在大流量程序開(kāi)發(fā)中,必然會(huì)遇到高并發(fā)的應(yīng)用的場(chǎng)景。解決方案大致分為兩個(gè)方向,消息隊(duì)列、鎖.

redis 實(shí)現(xiàn)消息隊(duì)列核心簡(jiǎn)單版本

????????$key?=?'quque'; ????????/** ?????????*?秒殺商品數(shù)量有限,預(yù)先存儲(chǔ)到消息隊(duì)列 ?????????*/ ????????public?function?qnquque()?{ ????????????for($i?=?1?;?$ilpush($key,$i); ????????????} ????????} ???????? ????????/** ?????????*?這里省略掉業(yè)務(wù)邏輯處理,默認(rèn)業(yè)務(wù)邏輯處理完,出隊(duì)列 ?????????*/ ????????public?function?dequque()?{ ????????????$redis->rpop($key); ????????????/** ?????????????*??這里開(kāi)始商品購(gòu)買(mǎi)后的業(yè)務(wù)邏輯處理 ?????????????*/ ????????}

消息隊(duì)列是防止超買(mǎi)超賣(mài)很好的一種解決方案,要實(shí)現(xiàn)消息隊(duì)列的高級(jí)功能需要用到專業(yè)的消息隊(duì)列工具例如(rabbitmq).用戶Redis 用戶redis實(shí)現(xiàn)消息隊(duì)列還是有一些缺點(diǎn)的,可以自行查找文章補(bǔ)充。這邊不一一概述。最大問(wèn)題還是分布式集群的問(wèn)題。

Redis 樂(lè)觀鎖實(shí)現(xiàn)秒殺功能

它的優(yōu)點(diǎn)如下:

消息隊(duì)列對(duì)內(nèi)存消耗較大,10000個(gè)請(qǐng)求,需要操作10000 出隊(duì)列。容易造成內(nèi)存資源瞬間爆棚

使用樂(lè)觀鎖的邏輯,CPU相對(duì)來(lái)說(shuō)消耗較低、內(nèi)存資源占用少

????$redis?=?new?redis(); ????$result?=?$redis-&gt;connect('127.0.0.1',?6379); ????$cachekey?=?$redis-&gt;get("cachekey"); ????$number?=?100;???//搶購(gòu)數(shù)量 ????if($cachekeywatch("cachekey"); ????????$redis-&gt;multi(); ???????? ????????//設(shè)置延遲,方便測(cè)試效果。 ????????sleep(5); ????????//插入搶購(gòu)數(shù)據(jù) ????????$redis-&gt;hSet("cachekeyList","user_id_".mt_rand(1,?9999),time()); ????????$redis-&gt;set("cachekey",$cachekey+1); ????????$result?=?$redis-&gt;exec(); ????????if($result){ ????????????$cachekeyList?=?$redis-&gt;hGetAll("cachekeyList"); ????????????echo?"恭喜".$cachekeyList."搶購(gòu)成功!<br>"; ????????}else{ ????????????echo?"再接再厲"; ????????????exit; ????????} ????}

更多redis知識(shí)請(qǐng)關(guān)注redis入門(mén)教程欄目。

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員