成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

秒殺場景的緩存、隊列、鎖使用Redis優化設計方案

瀏覽:194日期:2022-06-06 11:58:16
目錄
  • 一、為什么難
  • 二、常見架構
  • 三、優化方向
  • 四、優化細節
  • 五、Redis
  • 六、總結

一、為什么難

秒殺系統難做的原因:庫存只有一份,所有人會在集中的時間讀和寫這些數據。例如小米手機每周二的秒殺,可能手機只有1萬部,但瞬時進入的流量可能是幾百幾千萬。又例如12306搶票,亦與秒殺類似,瞬時流量更甚。這篇文章主要介紹了秒殺場景的緩存、隊列、鎖使用Redis優化設計方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

主要需要解決的問題有兩個:

  • 高并發對數據庫產生的壓力
  • 競爭狀態下如何解決庫存的正確減少(超賣問題)

對于第一個問題,已經很容易想到用緩存來處理搶購,避免直接操作數據庫,例如使用Redis。重點在于第二個問題,常規寫法:
查詢出對應商品的庫存,看是否大于0,然后執行生成訂單等操作,但是在判斷庫存是否大于0處,如果在高并發下就會有問題,導致庫存量出現負數

二、常見架構

流量到了億級別,常見站點架構如上:

  • 瀏覽器端,最上層,會執行到一些JS代碼
  • 站點層,這一層會訪問后端數據,拼html頁面返回給瀏覽器
  • 服務層,向上游屏蔽底層數據細節
  • 數據層,最終的庫存是存在這里的,mysql是一個典型

三、優化方向

1)將請求盡量攔截在系統上游:傳統秒殺系統之所以掛,請求都壓倒了后端數據層,數據讀寫鎖沖突嚴重,并發高響應慢,幾乎所有請求都超時,流量雖大,下單成功的有效流量甚小【一趟火車其實只有2000張票,200w個人來買,基本沒有人能買成功,請求有效率為0】
2)充分利用緩存:這是一個典型的讀多寫少的應用場景【一趟火車其實只有2000張票,200w個人來買,最多2000個人下單成功,其他人都是查詢庫存,寫比例只有0.1%,讀比例占99.9%】,非常適合使用緩存。

四、優化細節

4.1)瀏覽器層請求攔截

點擊了“查詢”按鈕之后,系統那個卡呀,進度條漲的慢呀,作為用戶,我會不自覺的再去點擊“查詢”,繼續點,繼續點,點點點。。。有用么?平白無故的增加了系統負載(一個用戶點5次,80%的請求是這么多出來的),怎么整?

a 產品層面,用戶點擊“查詢”或者“購票”后,按鈕置灰,禁止用戶重復提交請求
b JS層面,限制用戶在x秒之內只能提交一次請求

如此限流,80%流量已攔。

4.2)站點層請求攔截與頁面緩存

瀏覽器層的請求攔截,只能攔住小白用戶(不過這是99%的用戶喲),高端的程序員根本不吃這一套,寫個for循環,直接調用你后端的http請求,怎么整?

a 同一個uid,限制訪問頻度,做頁面緩存,x秒內到達站點層的請求,均返回同一頁面
b 同一個item的查詢,例如手機車次,做頁面緩存,x秒內到達站點層的請求,均返回同一頁面

如此限流,又有99%的流量會被攔截在站點層

4.3)服務層請求攔截與數據緩存站點層的請求攔截,只能攔住普通程序員,高級黑客,假設他控制了10w臺肉雞(并且假設買票不需要實名認證),這下uid的限制不行了吧?怎么整?

a 大哥,我是服務層,我清楚的知道小米只有1萬部手機,我清楚的知道一列火車只有2000張車票,我透10w個請求去數據庫有什么意義呢?對于寫請求,做請求隊列,每次只透有限的寫請求去數據層,如果均成功再放下一批,如果庫存不夠則隊列里的寫請求全部返回“已售完”

b 對于讀請求,還要我說么?cache抗,不管是memcached還是redis,單機抗個每秒10w應該都是沒什么問題的

如此限流,只有非常少的寫請求,和非常少的讀緩存mis的請求會透到數據層去,又有99.9%的請求被攔住了

4.4)數據層到了數據這一層,幾乎就沒有什么請求了,單機也能扛得住,還是那句話,庫存是有限的,小米的產能有限,透這么多請求來數據庫沒有意義。

4.5)mysql批量入庫提高INSERT效率

五、Redis

使用redis隊列(list),pushpop操作保證了原子性的實現。即使有很多用戶同時到達,也是依次執行。(mysql事務在高并發下性能下降很厲害)

先將商品庫存存入隊列:

<?php  $store=1000;  //商品庫存$redis=new Redis();  $result=$redis->connect("127.0.0.1",6379);  $res=$redis->llen("goods_store");   for($i=0; $i<$store; $i++){      $redis->lpush("goods_store",1);  }  echo $redis->llen("goods_store");  ?>

客戶執行下單操作:

$redis=new Redis();  $result=$redis->connect("127.0.0.1",6379);$count = $redis->lpop("goods_store");if(!$count){    echo "搶購失敗!";    return;}

緩存也是可以應對寫請求的,比如我們就可以把數據庫中的庫存數據轉移到Redis緩存中,所有減庫存操作都在Redis中進行,然后再通過后臺進程把Redis中的用戶秒殺請求同步到數據庫中

六、總結

沒什么總結了,上文應該描述的非常清楚了,對于秒殺系統,再次重復下兩個架構優化思路:
1)盡量將請求攔截在系統上游2)讀多寫少經量多使用緩存3) redis隊列緩存 + mysql 批量入庫

到此這篇關于秒殺場景的緩存、隊列、鎖使用Redis優化設計方案的文章就介紹到這了,更多相關Redis秒殺優化設計內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一区二区三区国产| 亚洲午夜精品在线| 亚洲一区二区三区视频在线播放| 99精品视频在线观看| 欧美美女直播网站| 亚洲成人高清在线| 99精品视频免费观看视频| 国产精品拍天天在线| 99国产精品国产精品久久| 日韩欧美一区在线观看| 狠狠狠色丁香婷婷综合久久五月| 男人天堂欧美日韩| 洋洋av久久久久久久一区| 91麻豆免费看| 日韩欧美色综合| 国产精品1024| 欧美一区二区大片| 国产精品一二三四| 欧美日韩一区二区三区在线看| 免费在线观看日韩欧美| 久久视频一区| 亚洲超碰97人人做人人爱| 一本色道久久综合亚洲精品高清| 亚洲欧洲色图综合| 亚洲作爱视频| 亚洲一区在线观看网站| 国产日韩欧美一区在线| 亚洲一区二区在线免费看| 亚洲国产日韩欧美| 自拍偷拍国产亚洲| 亚洲人妖在线| 亚洲综合一区二区精品导航| 香港久久久电影| 日韩精品久久理论片| 91精品福利视频| 美女视频一区二区| 欧美日韩和欧美的一区二区| 国产一区二区不卡老阿姨| 欧美一卡2卡三卡4卡5免费| 成人免费视频app| 欧美激情中文不卡| 日韩视频在线观看国产| 污片在线观看一区二区| 色婷婷av一区二区| 国产综合久久久久影院| 精品日韩99亚洲| 国产精品二区在线| 亚洲精品成人少妇| 色先锋资源久久综合| 狠狠色丁香九九婷婷综合五月| 欧美一区二区大片| 欧美尤物一区| 亚洲男同性视频| 美女诱惑黄网站一区| 日本欧美肥老太交大片| 在线播放中文一区| 91色综合久久久久婷婷| 亚洲人成网站在线| 久久综合狠狠综合久久综青草| 久久激情综合网| 久久久综合视频| 亚洲三级国产| 老司机一区二区| 精品少妇一区二区| 制服诱惑一区二区| 老司机精品视频在线| 精品成人私密视频| 最新亚洲视频| 麻豆精品久久精品色综合| 欧美www视频| 一色屋精品视频在线观看网站| 日韩高清中文字幕一区| 精品精品欲导航| 亚洲第一黄网| 麻豆一区二区三区| 久久久99精品免费观看不卡| 亚洲精品久久| 久久精品国产亚洲aⅴ| 26uuu国产日韩综合| 国产日韩视频| 国产成人自拍网| 最好看的中文字幕久久| 欧美天堂一区二区三区| av中文字幕在线不卡| 亚洲人成网站色在线观看| 欧美日韩久久一区二区| 午夜精品偷拍| 日本不卡视频在线| 久久久久久久久伊人| 亚洲免费中文| 处破女av一区二区| 亚洲精品免费视频| 91精品国产综合久久福利软件 | 经典三级视频一区| 国产精品五月天| 日本高清不卡aⅴ免费网站| 91丝袜美腿高跟国产极品老师 | 成人在线视频首页| 亚洲综合色区另类av| 日韩一区二区三区免费看 | 色成人在线视频| 欧美在线91| 久久精品国产网站| 综合色中文字幕| 欧美一区二区三区四区五区 | 欧美激情一区二区三区在线| 欧美自拍丝袜亚洲| 伊大人香蕉综合8在线视| 国模大尺度一区二区三区| 中文字幕一区二区三区四区不卡| 欧美日韩在线一区二区| 禁久久精品乱码| 激情综合色综合久久| 亚洲欧美经典视频| 精品剧情在线观看| 久久一区视频| 好吊视频一区二区三区四区| 国产精品一区二区x88av| 一区二区三区精品在线| 日韩免费一区二区| 一本一道综合狠狠老| 伊甸园精品99久久久久久| 成人毛片在线观看| 久久草av在线| 午夜视黄欧洲亚洲| 欧美激情综合网| 欧美电影免费观看高清完整版在线 | 国产日韩精品久久| 成人精品一区二区三区中文字幕| 日韩电影在线一区二区三区| 亚洲色图都市小说| 欧美电影免费观看高清完整版| 色欧美88888久久久久久影院| 伊甸园精品99久久久久久| av在线不卡免费看| 精品一区二区三区在线观看| 一级特黄大欧美久久久| 久久精品视频在线免费观看| 欧美剧情片在线观看| 久久综合伊人77777麻豆| 国产精品国产精品| 高清国产一区二区三区| 免费人成黄页网站在线一区二区| 亚洲蜜臀av乱码久久精品 | 亚洲一区二区影院| 国产精品久久久一本精品| 日韩视频在线观看一区二区| 欧洲国内综合视频| 亚洲一区自拍| 亚洲精品日本| 欧美一区二区三区在线免费观看 | 亚洲青色在线| 欧美日韩国产综合网| 99久久夜色精品国产网站| 国产综合色精品一区二区三区| 日韩高清一区在线| 婷婷丁香久久五月婷婷| 亚洲第一综合色| 一区二区三区国产| 亚洲精品免费在线| 亚洲同性gay激情无套| 国产精品视频第一区| 久久久无码精品亚洲日韩按摩| 日韩一区二区三区免费看| 91精品国产91久久久久久最新毛片 | 国产精品美女| 影音先锋久久资源网| 欧美亚韩一区| 欧美日韩一卡| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 成人av网站大全| 国产精品一二三区在线| 国产一区二区主播在线| 韩国视频一区二区| 激情五月婷婷综合| 国产曰批免费观看久久久| 久久超碰97中文字幕| 国内精品自线一区二区三区视频| 奇米亚洲午夜久久精品| 热久久久久久久| 琪琪一区二区三区| 韩国三级中文字幕hd久久精品| 狠狠v欧美v日韩v亚洲ⅴ| 国模一区二区三区白浆| 国产成人自拍高清视频在线免费播放| 国产98色在线|日韩| 成人av影院在线| 你懂的网址国产 欧美| 国产一区久久| 亚洲茄子视频| 久久精品日产第一区二区| 久久久久久自在自线| 在线欧美日韩精品| 欧美福利一区二区| 精品日韩欧美一区二区| 国产亚洲成av人在线观看导航| 国产精品视频一二三区 | 精品国产伦一区二区三区观看方式 | 自拍偷拍亚洲欧美日韩| 一区二区三区色|