日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Redis緩存穿透、擊穿、雪崩等場景解決方案

freeflydom
2025年5月15日 9:49 本文熱度 760

一、緩存穿透

定義:查詢一個(gè)不存在的數(shù)據(jù),Mysql查詢不到數(shù)據(jù)也不會(huì)直接寫入緩存,導(dǎo)致每次請(qǐng)求都要查數(shù)據(jù)庫

兩個(gè)解決方案:

  1. 緩存空數(shù)據(jù)
    優(yōu)點(diǎn):簡單
    缺點(diǎn):消耗內(nèi)存,可能發(fā)生不一致問題

  2. 使用布隆過濾器(作用:攔截不存在的數(shù)據(jù))
    優(yōu)點(diǎn):內(nèi)存占用較少
    缺點(diǎn):實(shí)現(xiàn)復(fù)雜,存在誤判

舉例說明:根據(jù)文章id查詢文章,請(qǐng)求路徑如下:
一個(gè)get請(qǐng)求: api/enws/getById/1

正常緩存流程:根據(jù)id到redis中爬取數(shù)據(jù),若找到數(shù)據(jù)則返回結(jié)果;若redis中未找到,再到數(shù)據(jù)庫中查找,將結(jié)果返回,返回前需將數(shù)據(jù)庫中查到的數(shù)據(jù)存儲(chǔ)于redis中

緩存穿透是查詢一個(gè)不存在的數(shù)據(jù),Mysql查詢不到數(shù)據(jù)也不會(huì)直接寫入緩存,導(dǎo)致每次請(qǐng)求都要查數(shù)據(jù)庫。導(dǎo)致這種情況一般是由于系統(tǒng)被惡意攻擊,請(qǐng)求路徑被獲取后制造假id(0、復(fù)數(shù)、很大的值),瘋狂沖擊數(shù)據(jù)庫,數(shù)據(jù)庫并發(fā)并不高,請(qǐng)求達(dá)到一定量就會(huì)造成宕機(jī)

關(guān)于布隆過濾器

二、緩存擊穿

定義:給某個(gè)key設(shè)置過期時(shí)間,當(dāng)key過期時(shí),剛好這個(gè)時(shí)間點(diǎn)key有大量的并發(fā)請(qǐng)求,這些并發(fā)請(qǐng)求可能瞬間把DB壓垮。

雖然我們再查詢時(shí)把數(shù)據(jù)同步到redis,但可能在緩存重建時(shí),存入的是多個(gè)表匯總的結(jié)果,可能需要分組統(tǒng)計(jì)花費(fèi)較長的時(shí)間,比如花費(fèi)了50毫秒,這時(shí)若有大量請(qǐng)求數(shù)據(jù)庫是承受不住的。

兩個(gè)解決方案:

  1. 互斥鎖

  2. 邏輯過期

互斥鎖:強(qiáng)一致性、性能差
比如:跟錢相關(guān)的業(yè)務(wù)需要保證強(qiáng)一致性
互斥鎖文字描述:線程1請(qǐng)求查詢,在redis中未查詢到緩存數(shù)據(jù),于是獲取互斥鎖,查詢數(shù)據(jù)庫重建緩存數(shù)據(jù),寫入緩存,釋放鎖;線程1進(jìn)行的同時(shí)線程2也請(qǐng)求查詢未命中,于是獲取互斥鎖但失敗了,只能休眠會(huì)再一直重試到緩存命中。
互斥鎖的作用:確保任意時(shí)刻只有一個(gè)線程可以訪問共享資源,從而避免數(shù)據(jù)競爭和不一致問題。

邏輯過期:高可用、性能優(yōu)
比如:互聯(lián)網(wǎng)行業(yè),更加注重用戶體驗(yàn)
邏輯過期文字描述:線程1查詢緩存,發(fā)現(xiàn)邏輯時(shí)間已過期,獲取互斥鎖后,開啟新線程2查詢數(shù)據(jù)庫重建緩存數(shù)據(jù)、寫入緩存并重置邏輯過期時(shí)間、釋放鎖,同時(shí)線程1中繼續(xù)并返回過期數(shù)據(jù)。線程1進(jìn)行的同時(shí)線程3也查詢發(fā)現(xiàn)邏輯時(shí)間過期,獲取互斥鎖失敗后返回過期數(shù)據(jù)。當(dāng)線程4命中緩存并沒有過期,就可以獲得最新查詢數(shù)據(jù)了。

三、緩存雪崩

定義:指同一時(shí)段大量緩存key同時(shí)失效或Redis服務(wù)宕機(jī),導(dǎo)致大量請(qǐng)求達(dá)到數(shù)據(jù)庫造成巨大壓力。

解決方案

  1. 給不同key的TTL添加隨機(jī)值(給不同key設(shè)置不同的過期時(shí)間)

  2. 利用redis集群服務(wù)的可用性,比如哨兵模式、集群模式(解決redis宕機(jī)問題)

  3. 給緩存業(yè)務(wù)添加降級(jí)限流策略,例如ngxin、spring cloud gateway

  4. 給業(yè)務(wù)添加多級(jí)緩存,例如Guava、Caffeine

降級(jí)可作為系統(tǒng)的保底策略,適用于穿透、擊穿、雪崩

四、雙寫一致性

定義:當(dāng)修改了數(shù)據(jù)庫數(shù)據(jù)也要更新緩存的數(shù)據(jù),保持緩存和數(shù)據(jù)庫的數(shù)據(jù)一致

  • 讀操作:緩存命中,直接返回;緩存未命中查詢數(shù)據(jù)庫,寫入緩存,設(shè)定超時(shí)時(shí)間

  • 寫操作:延遲雙刪

先刪除緩存,還是先修改數(shù)據(jù)庫?

先刪除緩存,再修改數(shù)據(jù)庫

  • 正常情況:

  • 出現(xiàn)臟數(shù)據(jù)情況:

修改數(shù)據(jù)庫數(shù)據(jù)前被其他線程寫入緩存,導(dǎo)致緩存與數(shù)據(jù)庫數(shù)據(jù)不一致

先修改操作數(shù)據(jù)庫,再刪除緩存

  • 正常情況:

  • 出現(xiàn)臟數(shù)據(jù)情況:

線程1得到的返回的結(jié)果寫入緩存,與線程2更新的數(shù)據(jù)庫數(shù)據(jù)對(duì)不上

所以不管先刪除緩存,還是先修改數(shù)據(jù)庫都會(huì)出現(xiàn)臟數(shù)據(jù),應(yīng)該采取延遲雙刪的方法,即刪除兩次緩存,可以降低臟數(shù)據(jù)的出現(xiàn)。延遲刪除是因?yàn)閿?shù)據(jù)庫是主存模式,延遲刪除讓主節(jié)點(diǎn)把數(shù)據(jù)同步到從節(jié)點(diǎn),但延遲刪除也只是控制了一部分臟數(shù)據(jù)的風(fēng)險(xiǎn),由于延遲時(shí)間不好確認(rèn),也有臟數(shù)據(jù)的風(fēng)險(xiǎn),做不到絕對(duì)的強(qiáng)一至。

如何保持強(qiáng)一致性?

  1. 可以采用分布式鎖(互斥鎖)

強(qiáng)一致,性能低

一般存入緩存的數(shù)據(jù)都是讀多寫少,用讀寫鎖來進(jìn)行控制

  • 共享鎖:加鎖后其他線程可以共享讀操作

  • 排他鎖:加鎖后阻塞其他線程讀寫操作

具體代碼操作:

  • 讀操作

  • 寫操作

  1. 異步通知保證數(shù)據(jù)的最終一致性

利用異步通知解決數(shù)據(jù)同步問題

  • MQ

  • canal

它是基于mysql的主從同步實(shí)現(xiàn)
當(dāng)有數(shù)據(jù)修改寫入數(shù)據(jù)庫后,數(shù)據(jù)庫一旦變化就會(huì)記錄到BINLOG日志文件中,cannal通過binlog數(shù)據(jù)文件獲取變化,我們就可以在緩存服務(wù)獲取變化的數(shù)據(jù),然后更新到緩存

五、持久化

兩種方式:RDB、AOF

  1. RDB(redis數(shù)據(jù)備份文件,也叫數(shù)據(jù)快照)

將內(nèi)存中的數(shù)據(jù)存到磁盤中,當(dāng)redis實(shí)例故障重啟后,從磁盤讀取快照文件,恢復(fù)數(shù)據(jù)

人工主動(dòng)備份:

redis內(nèi)部有觸發(fā)RBG的機(jī)制,可以在redis.conf文件中找到

  1. AOF(追加文件,redis處理的每一個(gè)命令都記錄在AOF文件,可看作是命令日志文件)

六、數(shù)據(jù)過期策略

Redis過期刪除策略:惰性刪除 + 定期刪除兩種策略配合使用

  1. 惰性刪除

定義:訪問key時(shí)再判斷是否過期,過期則刪除,反之返回key

    ?    ?優(yōu)點(diǎn):對(duì)CPU友好
    ?    ?缺點(diǎn):對(duì)內(nèi)存不友好

  1. 定期刪除

定義:每隔一段時(shí)間,會(huì)從一定數(shù)量的數(shù)據(jù)庫中取出一定數(shù)量的隨機(jī)key進(jìn)行檢查,并刪除其中的過期key(隨之時(shí)間推一會(huì)遍歷所有key,把所有過期key刪除)

  • 定期刪除分兩種模式:SLOW、FAST

  • ?SLOW模式是定時(shí)任務(wù),執(zhí)行頻率默認(rèn)為10hz,每次不超過25ms,以通過修改配置文件redis.conf的hz選項(xiàng)來調(diào)整次數(shù)

  • FAST模式執(zhí)行頻率不固定,但兩次間隔不低于2ms,每次耗時(shí)不好過1ms

優(yōu)點(diǎn):可通過限制刪除操作執(zhí)行時(shí)長和頻率減少刪除操作對(duì)CPU的影響,另外定期刪除能有效釋放過期鍵占用的內(nèi)存
缺點(diǎn):難以確定刪除操作執(zhí)行的時(shí)長和頻率

七、數(shù)據(jù)淘汰策略

定義:當(dāng)redis內(nèi)存不足想添加新key,會(huì)按照某種規(guī)則將內(nèi)存數(shù)據(jù)刪除,這種數(shù)據(jù)刪除規(guī)則被成為內(nèi)存的淘汰策略

  • redis支持8中不同策略來選擇刪除key

  1. noeviction:不淘汰任何key,但內(nèi)存滿不語序?qū)懭胄聰?shù)據(jù),默認(rèn)策略

使用建議

轉(zhuǎn)自https://www.cnblogs.com/PandaVerse/p/18399430


該文章在 2025/5/15 9:52:50 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

啪啪啪啊啊啊一区二区三区| 妞干好吊妞| 亚洲AV无码成人国产精品色| 国产一区偷拍| 汾阳市| 乱欧美激情| 亚洲少妇波插入| 中文字幕精品网大茎视频 | 久久视频一区视频| 鸡八操人视频| 婷婷五月视频手机在线观看| 久久久久高潮无码精品| 99riav视频一区二区| 日韩欧美乱伦小说| 操逼视频淑女操逼| 日本二区三区免费不卡| 色九九精品影剧院| 三级片大香蕉Cn0| 无码一区在线观看无码| 亚洲AV久久成人香蕉| 欧美自拍电影流白浆| 日本影院三区| 久久xX三级片| 亚欧洲精品在线视频免费| 色色网站久久久| 香蕉高清欧美在线视频| 亚洲精品国产乱码在线| 15p日本精品熟女| 午夜福利伦理视频网站| 夜夜躁狠狠躁日日躁av| 国产国产一区女优| 亚洲激情/区二区| 966国产9999久久| 高清无码一区二区本地| 精品 码产区一区二亚洲国产| 69成人午夜福利精品| 婷婷五月天亚洲综合在线| 日本二区成人片| 欧美高清淫片| 夫妻性生活免费在线视频| 欧美一及色|