成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

漫話:如何給女朋友解釋什么是緩存穿透、緩存擊穿、緩存雪崩?

存儲 存儲軟件
周末在家面試,和候選人聊到Redis的問題,于是問了他一個問題:你知道緩存穿透、緩存擊穿和緩存雪崩嗎?他們之間的區別是什么?分別怎么解決嗎?

[[360523]]

周末在家面試,和候選人聊到Redis的問題,于是問了他一個問題:你知道緩存穿透、緩存擊穿和緩存雪崩嗎?他們之間的區別是什么?分別怎么解決嗎?

面試結束后,女朋友好像有很多問號,于是來問我。

緩存穿透

要把這個問題講清楚,先舉個例子。

一個女孩子去門店買口紅,到了門店之后被告知她想要的那個色號已經沒有了。于是她要求店員去問總部還有沒有貨。總部發現這個色號也沒有了,于是女孩子就離開了。

過了一會另一個女孩子又來了,也想要購買同一個色號,店員就又總部問了一次。如此反復。

女孩子買口紅不僅需要門店幫忙查詢,還需要總部也進行盤貨。類似這種情況,在緩存領域有一個類似的概念叫做緩存穿透。

緩存穿透是指緩存服務器中沒有緩存數據,數據庫中也沒有符合條件的數據,導致業務系統每次都繞過緩存服務器查詢下游的數據庫,緩存服務器完全失去了其應用的作用。

 

緩存空值

解決多次詢問總部的方法比較簡單,如果口紅門店在幫第一個女孩子查詢之后,就記錄下來這個色號已經沒有了,下次其他女孩再來問這個色號的時候,直接告訴她沒貨了。

這樣就可以避免每次都驚動總部了。

在緩存中,之所以會發生穿透,就是因為緩存沒有對那些不存在的值得Key緩存下來,從而導致每次查詢都要請求到數據庫。

那么我們就可以為這些key對應的值設置為null并放到緩存中,這樣再出現查詢這個key 的請求的時候,直接返回null即可 。

但是還需要注意的就是需要有一個失效時間,因為如果不設置失效的話,如果哪天總部有貨了,門店還是當做沒貨的話,就會影響銷量了。

BloomFilter

很多時候,緩存穿透是因為有很多惡意流量的請求,這些請求可能隨機生成很多Key來請求查詢,這些肯定在緩存和數據庫中都沒有,那就很容易導致緩存穿透。

針對類似的情況,可以使用一個過濾器。

比如如果有一群人經常來門店問一些根本不存在的色號,比如五彩斑斕的黑,這些色號該品牌根本沒生產過的話,店員就可以直接告訴顧客不存在就行了,也不需要驚動總部。

在緩存穿透防治上常用的技術是布隆過濾器(Bloom Filter)。

布隆過濾器是一種比較巧妙的概率性數據結構,它可以告訴你數據一定不存在或可能存在,相比Map、Set、List等傳統數據結構它占用內存少、結構更高效。

對于緩存穿透,我們可以將查詢的數據條件都哈希到一個足夠大的布隆過濾器中,用戶發送的請求會先被布隆過濾器攔截,一定不存在的數據就直接攔截返回了,從而避免下一步對數據庫的壓力。

 

緩存擊穿

有一種比較特殊的情況,那就是如果某一個熱門色號的口紅剛好賣完了,這時候有很多顧客同時來咨詢要購買這個色號,那么門店內的多個售貨員可能分別給總部打電話咨詢是否有存貨。

或者如果有多家門店同時賣完了,那么總部接收到的咨詢量就會劇增。類似這種情況,在緩存領域有一個類似的概念叫做緩存擊穿。

緩存擊穿是指當某一key的緩存過期時大并發量的請求同時訪問此key,瞬間擊穿緩存服務器直接訪問數據庫,讓數據庫處于負載的情況。

異步定時更新

如果提前知道某一個色號比較暢銷的話,那就可以定時的咨詢總部是否還有存貨,定時的更新庫存情況就可以避免上面這種情況了。

在緩存處理上,同理,比如某一個熱點數據的過期時間是1小時,那么每59分鐘,通過定時任務去更新這個熱點key,并重新設置其過期時間。

互斥鎖

還有一種解決辦法,那就是如果很多顧客咨詢的是同一個色號的口紅,那么就先處理第一個用戶的咨詢,其他同樣請求的顧客先排隊等待。一直到店員從總部那里獲取到最新的庫存信息后,就可以安排其他人繼續購買了。

在緩存處理上,通常使用一個互斥鎖來解決緩存擊穿的問題。簡單來說就是當Redis中根據key獲得的value值為空時,先鎖上,然后從數據庫加載,加載完畢,釋放鎖。若其他線程也在請求該key時,發現獲取鎖失敗,則先阻塞。

緩存雪崩

如果門店內的多個色號的口紅同時售罄了,并且門店在這個時間點剛好也不知道總部有沒有庫存了,這時候如果有大量顧客來到門店購物的話,就會有更多的咨詢電話打到總部那里。

或者是門店突然出現問題了,不能提供服務了,很多顧客就可能自己打電話到總部咨詢庫存情況。類似這種情況,在緩存領域有一個類似的概念叫做緩存雪崩。

緩存雪崩是指當大量緩存同時過期或緩存服務宕機,所有請求的都直接訪問數據庫,造成數據庫高負載,影響性能,甚至數據庫宕機。

不同的過期時間

為了避免緩存雪崩,門店可以考慮給不同的色號的口紅預留不同的庫存,并且采用不同的頻率咨詢總部庫存情況,更新到門店中。這樣就可以避免突然同一個時間點所有色號都售罄。

為了避免大量的緩存在同一時間過期,可以把不同的key過期時間設置成不同的, 并且通過定時刷新的方式更新過期時間。

集群

為了避免門店出問題導致大量顧客直接打電話到總部,可以考慮開更多的門店,將用戶分流到多個店鋪中。

類似的,在緩存雪崩問題防治上面,一個比較典型的技術就是采用集群方式部署,使用集群可以避免服務單點故障。

關于作者:漫話編程,是一個通過漫畫+音頻的形式講解枯燥的編程知識的公眾號。致力于讓編程變得更有樂趣。

本文轉載自微信公眾號「漫話編程」,可以通過以下二維碼關注。轉載本文請聯系漫話編程公眾號。

 

責任編輯:武曉燕 來源: 漫話編程
相關推薦

2019-10-12 14:19:05

Redis數據庫緩存

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2019-11-05 14:24:31

緩存雪崩框架

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2020-03-16 14:57:24

Redis面試雪崩

2022-05-27 07:57:20

緩存穿透緩存雪崩緩存擊穿

2022-03-08 00:07:51

緩存雪崩數據庫

2020-03-16 14:08:59

線程熔斷限流

2022-11-18 14:34:28

2023-11-10 14:58:03

2025-06-30 01:55:00

2019-10-09 10:45:16

云計算Web互聯網

2021-09-14 12:00:11

VR字節跳動

2023-04-14 07:34:19

2024-03-12 10:44:42

2019-04-26 14:46:18

GitGitHub局域網

2020-10-19 13:01:31

刪庫程序員思科

2019-07-22 10:34:31

大案牘術大數據Big Data

2019-12-23 10:26:02

3PC分布式2PC

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区亚洲视频 | 国产精品成av人在线视午夜片 | 中文字幕一区二区三区在线观看 | 成人在线网址 | 在线成人| 九九色综合 | 国产精品一区二区三区在线 | 欧美日韩综合 | 欧美精品久久久 | 中文字幕一区二区三区在线观看 | 在线视频一区二区三区 | 成人精品高清 | 精品久久久久一区二区国产 | 中文字幕av一区二区三区 | 国产一区二区三区久久久久久久久 | 嫩草视频在线免费观看 | 国产区久久 | 狠狠操天天操 | 亚洲第1页 | 91在线一区| 日本成人在线网址 | 国产资源一区二区三区 | 午夜一区 | 一区二区精品 | 成人九区 | 福利二区 | 午夜一区 | 夜夜爽99久久国产综合精品女不卡 | 伊人91在线 | 黄在线免费观看 | 天天插天天操 | av天空| 天堂三级 | 日韩欧美在线免费观看视频 | 国产一在线 | 一区二区三区中文字幕 | 天天夜天天操 | 一区二区三区国产精品 | 国产精品99久久久久久动医院 | 亚洲欧洲成人av每日更新 | 精品免费av |