日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

缓存穿透、缓存并发、缓存失效之思路变迁

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓存穿透、缓存并发、缓存失效之思路变迁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:https://www.jianshu.com/p/d96906140199

在用緩存的時候,基本上會通用遇到以下三個問題:

  • 緩存穿透

  • 緩存并發

  • 緩存失效

一、緩存穿透

?

上面三個圖會有什么問題呢?

我們在項目中使用緩存通常都是先檢查緩存中是否存在,如果存在直接返回緩存內容,如果不存在就直接查詢數據庫然后再緩存查詢結果返回。這個時候如果我們查詢的某一個數據在緩存中一直不存在,就會造成每一次請求都查詢DB,這樣緩存就失去了意義,在流量大時,可能DB就掛掉了。

那這種問題有什么好辦法解決呢?

要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。
有一個比較巧妙的作法是,可以將這個不存在的key預先設定一個值。
比如,"key" , “&&”。
在返回這個&&值的時候,我們的應用就可以認為這是不存在的key,那我們的應用就可以決定是否繼續等待繼續訪問,還是放棄掉這次操作。如果繼續等待訪問,過一個時間輪詢點后,再次請求這個key,如果取到的值不再是&&,則可以認為這時候key有值了,從而避免了透傳到數據庫,從而把大量的類似請求擋在了緩存之中。

二、緩存并發

有時候如果網站并發訪問高,一個緩存如果失效,可能出現多個進程同時查詢DB,同時設置緩存的情況,如果并發確實很大,這也可能造成DB壓力過大,還有緩存頻繁更新的問題。

我現在的想法是對緩存查詢加鎖,如果KEY不存在,就加鎖,然后查DB入緩存,然后解鎖;其他進程如果發現有鎖就等待,然后等解鎖后返回數據或者進入DB查詢。

這種情況和剛才說的預先設定值問題有些類似,只不過利用鎖的方式,會造成部分請求等待。

三、緩存失效

引起這個問題的主要原因還是高并發的時候,平時我們設定一個緩存的過期時間時,可能有一些會設置1分鐘啊,5分鐘這些,并發很高時可能會出在某一個時間同時生成了很多的緩存,并且過期時間都一樣,這個時候就可能引發一當過期時間到后,這些緩存同時失效,請求全部轉發到DB,DB可能會壓力過重。

那如何解決這些問題呢?
其中的一個簡單方案就時講緩存失效時間分散開,比如我們可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重復率就會降低,就很難引發集體失效的事件。

我們討論的第二個問題時針對同一個緩存,第三個問題時針對很多緩存。

總結來看:

1、緩存穿透:查詢一個必然不存在的數據。比如文章表,查詢一個不存在的id,每次都會訪問DB,如果有人惡意破壞,很可能直接對DB造成影響。

2、緩存失效:如果緩存集中在一段時間內失效,DB的壓力凸顯。這個沒有完美解決辦法,但可以分析用戶行為,盡量讓失效時間點均勻分布。
當發生大量的緩存穿透,例如對某個失效的緩存的大并發訪問就造成了緩存雪崩。

四、提問匯總

1、問題1:
如何解決DB和緩存一致性問題?
答:當修改了數據庫后,有沒有及時修改緩存。這種問題,以前有過實踐,修改數據庫成功,而修改緩存失敗的情況,最主要就是緩存服務器掛了。而因為網絡問題引起的沒有及時更新,可以通過重試機制來解決。而緩存服務器掛了,請求首先自然也就無法到達,從而直接訪問到數據庫。那么我們在修改數據庫后,無法修改緩存,這時候可以將這條數據放到數據庫中,同時啟動一個異步任務定時去檢測緩存服務器是否連接成功,一旦連接成功則從數據庫中按順序取出修改數據,依次進行緩存最新值的修改。

2、問題2:
問下緩存穿透那塊!例如,一個用戶查詢文章,通過ID查詢,按照之前說的,是將緩存的KEY預先設置一個值,,如果通過ID插過來,發現是預先設定的一個值,比如說是“&&”,那之后的繼續等待訪問是什么意思,這個ID什么時候會真正被附上用戶所需要的值呢?
答:我剛說的主要是咱們常用的后面配置,前臺獲取的場景。前臺無法獲取相應的key,則等待,或者放棄。當在后臺配置界面上配置了相關key和value之后,那么以前的key &&也自然會被替換掉。你說的那種情況,自然也應該會有一個進程會在某一個時刻,在緩存中設置這個ID,再有新的請求到達的時候,就會獲取到最新的ID和value。

3、問題3:
其實用redis的話,那天看到一個不錯的例子,雙key,有一個當時生成的一個附屬key來標識數據修改到期時間,然后快到的時候去重新加載數據,如果覺得key多可以把結束時間放到主key中,附屬key起到鎖的功能。
答:這種方案,之前我們實踐過。這種方案會產生雙份數據,而且需要同時控制附屬key與key之間的關系,操作上有一定復雜度。

4、問題4:
多級緩存是什么概念呢?
答:多級緩存就像我今天之前給大家發的文章里面提到了,將ehcache與redis做二級緩存,但同樣會存在一致性問題,如果我們需要強一致性的話,緩存與數據庫同步是會存在時間差的,所以我們在具體開發的過程中,一定要根據場景來具體分析,二級緩存更多的解決是,緩存穿透與程序的健壯性,當集中式緩存出現問題的時候,我們的應用能夠繼續運行。

總結

以上是生活随笔為你收集整理的缓存穿透、缓存并发、缓存失效之思路变迁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品色呦呦 | 伊人7| 亚洲精品中文字幕在线播放 | 国产精品变态另类虐交 | 黄色福利站 | 国产又大又长又粗 | 蜜桃av噜噜 | 男女做爰真人视频直播 | 91久久国产 | 大地资源高清播放在线观看 | 欧美一区二区视频在线 | 91蜜桃臀久久一区二区 | 免费中文字幕av | 国产美女又黄又爽又色视频免费 | 欧美丰满熟妇bbb久久久 | 国产v亚洲v天堂无码 | 日韩成人三级 | 亚洲色图欧洲色图 | 日韩污视频在线观看 | 欧美一级在线播放 | 久久久精品一区 | 国产黄色网址在线观看 | 中文无码精品一区二区三区 | 欧美性69 | 少妇性色av | 日本一级片在线播放 | 小妹色播影院 | 娇妻玩4p被三个男人伺候电影 | 亚洲精品国产精品国自 | 在线香蕉视频 | 国产男女猛烈无遮挡免费视频动漫 | 动漫3d精品一区二区三区乱码 | 欧美性吧| 久草新免费| 99色在线观看 | 欧美人与性动交ccoo | 在线成人亚洲 | 亚洲精品男人的天堂 | 韩日免费av | 亚洲12p| 久久伊人婷婷 | 99热只有这里有精品 | 亚洲国内精品 | 天天色天天色天天色 | 国产欧美一区二区精品性色 | 国产尤物视频在线 | 少妇又色又爽 | 国产特黄级aaaaa片免 | 欧美成人精品网站 | 午夜一级在线 | 一道本久在线中文字幕 | 亚洲成人av影片 | 欧美夜夜爽 | 亚洲中文字幕无码一区二区三区 | 狠狠视频 | 一区二区免费视频 | 国产不卡av在线 | 精品在线一区二区 | 日女人免费视频 | 真人毛片97级无遮挡精品 | 成人h片| 在线观看你懂的网站 | 日韩电影在线观看一区 | 99在线小视频 | 色屁屁草草影院ccyycom | 狠狠cao日日穞夜夜穞av | 日韩成人福利视频 | 波多野结衣免费看 | 日韩久久一级片 | www亚洲成人| 免费超碰在线观看 | 日日骚网 | 国产高潮在线 | 中文字幕手机在线视频 | 日本免费黄色小视频 | 日本黄色一级网站 | 国产精品普通话 | 国产精品免费看 | 一级特级黄色片 | 中文一区在线 | 欧美日韩高清一区二区 | 影音先锋久久 | 香蕉视频在线播放 | 美女扒开尿口让男人爽 | 国产成人精品一区二区色戒 | av天天操 | 99热影院| 无码黑人精品一区二区 | 午夜影院在线播放 | 插插看 | 91网页入口| 欧洲色网| 中文幕无线码中文字夫妻 | 国产精品乱码一区二区视频 | 波多野结衣高清在线 | 欧美不卡视频 | 韩国bj大尺度vip福利网站 | 性欧美巨大 | 中国a级黄色片 |