摘要:在大流量程序開發(fā)中,必然會(huì)遇到高并發(fā)的應(yīng)用的場(chǎng)景。樂觀鎖實(shí)現(xiàn)秒殺功能它的優(yōu)點(diǎn)如下消息隊(duì)列對(duì)內(nèi)存消耗較大,個(gè)請(qǐng)求,需要操作出隊(duì)列。需要結(jié)合實(shí)際的業(yè)務(wù)場(chǎng)景嵌入本文的核心實(shí)現(xiàn)邏輯。
在大流量程序開發(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 ; $i<=5 ;$i++) { $redis->lpush($key,$i); } } /** * 這里省略掉業(yè)務(wù)邏輯處理,默認(rèn)業(yè)務(wù)邏輯處理完,出隊(duì)列 */ public function dequque() { $redis->rpop($key); /** * 這里開始商品購(gòu)買后的業(yè)務(wù)邏輯處理 */ }
消息隊(duì)列是防止超買超賣很好的一種解決方案,要實(shí)現(xiàn)消息隊(duì)列的高級(jí)功能需要用到專業(yè)的消息隊(duì)列工具例如(rabbitmq).用戶Redis 用戶redis實(shí)現(xiàn)消息隊(duì)列還是有一些缺點(diǎn)的,可以自行查找文章補(bǔ)充。這邊不一一概述。最大問題還是分布式集群的問題。
Redis 樂觀鎖實(shí)現(xiàn)秒殺功能它的優(yōu)點(diǎn)如下:
消息隊(duì)列對(duì)內(nèi)存消耗較大,10000個(gè)請(qǐng)求,需要操作10000 出隊(duì)列。容易造成內(nèi)存資源瞬間爆棚
使用樂觀鎖的邏輯,CPU相對(duì)來說消耗較低、內(nèi)存資源占用少
$redis = new redis(); $result = $redis->connect("127.0.0.1", 6379); $cachekey = $redis->get("cachekey"); $number = 100; //搶購(gòu)數(shù)量 if($cachekey<$number){ $redis->watch("cachekey"); $redis->multi(); //設(shè)置延遲,方便測(cè)試效果。 sleep(5); //插入搶購(gòu)數(shù)據(jù) $redis->hSet("cachekeyList","user_id_".mt_rand(1, 9999),time()); $redis->set("cachekey",$cachekey+1); $result = $redis->exec(); if($result){ $cachekeyList = $redis->hGetAll("cachekeyList"); echo "恭喜".$cachekeyList."搶購(gòu)成功!結(jié)尾
"; }else{ echo "再接再厲"; exit; } }
本文并沒有從零開始業(yè)務(wù)分析,都是核心的業(yè)務(wù)邏輯代碼。需要結(jié)合實(shí)際的業(yè)務(wù)場(chǎng)景嵌入本文的核心實(shí)現(xiàn)邏輯。嘿嘿~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/31255.html
摘要:一為什么難秒殺系統(tǒng)難做的原因庫(kù)存只有一份,所有人會(huì)在集中的時(shí)間讀和寫這些數(shù)據(jù)。又例如搶票,亦與秒殺類似,瞬時(shí)流量更甚。 一、為什么難 ????秒殺系統(tǒng)難做的原因:庫(kù)存只有一份,所有人會(huì)在集中的時(shí)間讀和寫這些數(shù)據(jù)。例如小米手機(jī)每周二的秒殺,可能手機(jī)只有1萬部,但瞬時(shí)進(jìn)入的流量可能是幾百幾千萬。又例如12306搶票,亦與秒殺類似,瞬時(shí)流量更甚。 主要需要解決的問題有兩個(gè): 高并發(fā)對(duì)數(shù)據(jù)庫(kù)...
閱讀 1595·2021-11-16 11:44
閱讀 7483·2021-09-22 15:00
閱讀 4507·2021-09-02 10:20
閱讀 1952·2021-08-27 16:20
閱讀 2397·2019-08-26 14:00
閱讀 2912·2019-08-26 11:44
閱讀 1645·2019-08-23 18:33
閱讀 1865·2019-08-22 17:28