欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis的緩存更新策略及最佳實(shí)踐方案

 更新時(shí)間:2023年08月10日 10:31:40   作者:程序員阿紅  
這篇文章主要介紹了Redis的緩存更新策略及最佳實(shí)踐方案,當(dāng)我們向redis插入太多數(shù)據(jù),此時(shí)就可能會(huì)導(dǎo)致緩存中的數(shù)據(jù)過(guò)多,所以redis會(huì)對(duì)部分?jǐn)?shù)據(jù)進(jìn)行更新,或者把它成為淘汰更合適,需要的朋友可以參考下

緩存更新

緩存的更新是redis為了節(jié)約內(nèi)存而設(shè)計(jì)出來(lái)的東西,主要是因?yàn)閮?nèi)存數(shù)據(jù)寶貴,當(dāng)我們向redis插入太多數(shù)據(jù),此時(shí)就可能會(huì)導(dǎo)致緩存中的數(shù)據(jù)過(guò)多,所以redis會(huì)對(duì)部分?jǐn)?shù)據(jù)進(jìn)行更新,或者把它成為淘汰更合適。

1.redis的緩存更新的三種策略

  1. 內(nèi)存淘汰
    • redis自動(dòng)進(jìn)行,當(dāng)redis內(nèi)存達(dá)到咱們?cè)O(shè)定的max-memery的時(shí)候會(huì)自動(dòng)觸發(fā)淘汰機(jī)制,淘汰調(diào)一些不重要的數(shù)據(jù)(自己可以設(shè)置策略方式)
  2. 超時(shí)剔除
    • 當(dāng)我們給redis設(shè)置了過(guò)期時(shí)間ttl之后,redis會(huì)將超時(shí)的數(shù)據(jù)進(jìn)行刪除,方便咱們繼續(xù)使用緩存。
  3. 主動(dòng)更新
    • 我們可以手動(dòng)條用方法把緩存刪掉,通常用于解決緩存和數(shù)據(jù)庫(kù)不一致問(wèn)題。

主動(dòng)更新有分三種方式:

  1. 由緩存的調(diào)用者,在更新數(shù)據(jù)庫(kù)的同時(shí)更新緩存。
  2. 緩存和數(shù)據(jù)庫(kù)整合為一個(gè)服務(wù),由服務(wù)來(lái)維護(hù)一致性。調(diào)用者調(diào)用該服務(wù)(對(duì)外提供一個(gè)透明的服務(wù)),無(wú)需關(guān)系緩存一致性問(wèn)題。
  3. 調(diào)用者只操作緩存,有其他線(xiàn)程異步的將緩存持久化到數(shù)據(jù)庫(kù),保證最終一致。(類(lèi)似于數(shù)據(jù)庫(kù)的索引,一個(gè)索引更新在沒(méi)有提交事務(wù)時(shí),修改了100次只有最后一次有效,但這會(huì)使效率降低。)

如果采用第一個(gè)方案,那么假設(shè)我們每次操作數(shù)據(jù)庫(kù)后,都操作緩存,但是中間如果沒(méi)有人查詢(xún),那么這個(gè)更新動(dòng)作實(shí)際上只有最后一次生效,中間的更新動(dòng)作意義并不大,我們可以把緩存刪除,等待再次查詢(xún)時(shí),將緩存中的數(shù)據(jù)加載出來(lái)

  • 刪除緩存還是更新緩存?
    • 更新緩存:每次更新數(shù)據(jù)庫(kù)都更新緩存,無(wú)效寫(xiě)操作較多
    • 刪除緩存:更新數(shù)據(jù)庫(kù)時(shí)讓緩存失效,查詢(xún)時(shí)再更新緩存
  • 如何保證緩存與數(shù)據(jù)庫(kù)的操作的同時(shí)成功或失???
    • 單體系統(tǒng),將緩存與數(shù)據(jù)庫(kù)操作放在一個(gè)事務(wù)
    • 分布式系統(tǒng),利用TCC等分布式事務(wù)方案
  • 先操作緩存還是先操作數(shù)據(jù)庫(kù)?
    • 先刪除緩存,再操作數(shù)據(jù)庫(kù) (第一種方案)
    • 先操作數(shù)據(jù)庫(kù),再刪除緩存

應(yīng)該具體操作緩存還是操作數(shù)據(jù)庫(kù),我們應(yīng)當(dāng)是先操作數(shù)據(jù)庫(kù),再刪除緩存,原因在于,如果你選擇第一種方案,在兩個(gè)線(xiàn)程并發(fā)來(lái)訪(fǎng)問(wèn)時(shí),假設(shè)線(xiàn)程1先來(lái),他先把緩存刪了,此時(shí)線(xiàn)程2過(guò)來(lái),他查詢(xún)緩存數(shù)據(jù)并不存在,此時(shí)他寫(xiě)入緩存,當(dāng)他寫(xiě)入緩存后,線(xiàn)程1再執(zhí)行更新動(dòng)作時(shí),實(shí)際上寫(xiě)入的就是舊的數(shù)據(jù),新的數(shù)據(jù)被舊數(shù)據(jù)覆蓋了。

image-20221206204151058

redis的讀寫(xiě)是微秒級(jí)別的,但是數(shù)據(jù)庫(kù)的更新時(shí)遠(yuǎn)遠(yuǎn)比redis的讀寫(xiě)慢的。

三者之間比較

image-20221206195626851

2. 緩存更新策略的最佳實(shí)踐方案:

  1. 低一致性需求:使用Redis自帶的內(nèi)存淘汰機(jī)制
  2. 高一致性需求:主動(dòng)更新,并以超時(shí)剔除作為兜底方案
  • 讀操作:
    • 緩存命中則直接返回
    • 緩存未命中則查詢(xún)數(shù)據(jù)庫(kù),并寫(xiě)入緩存,設(shè)定超時(shí)時(shí)間
  • 寫(xiě)操作:
    • 先寫(xiě)數(shù)據(jù)庫(kù),然后再刪除緩存
    • 要確保數(shù)據(jù)庫(kù)與緩存操作的原子性

到此這篇關(guān)于Redis的緩存更新策略及最佳實(shí)踐方案的文章就介紹到這了,更多相關(guān)Redis緩存更新策略?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis?設(shè)置生存和過(guò)期時(shí)間的原理分析

    redis?設(shè)置生存和過(guò)期時(shí)間的原理分析

    這篇文章主要介紹了redis?設(shè)置生存和過(guò)期時(shí)間的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Redis?HyperLogLog數(shù)據(jù)統(tǒng)計(jì)輕量級(jí)解決方案詳解

    Redis?HyperLogLog數(shù)據(jù)統(tǒng)計(jì)輕量級(jí)解決方案詳解

    這篇文章主要為大家介紹了Redis?HyperLogLog數(shù)據(jù)統(tǒng)計(jì)輕量級(jí)解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案

    Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案

    在普通的token頒發(fā)和校驗(yàn)中 當(dāng)用戶(hù)發(fā)現(xiàn)自己賬號(hào)和密碼被暴露了時(shí)修改了登錄密碼后舊的token仍然可以通過(guò)系統(tǒng)校驗(yàn)直至token到達(dá)失效時(shí)間,所以系統(tǒng)需要token主動(dòng)失效的一種能力,所以本文給大家介紹了Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案,需要的朋友可以參考下
    2024-03-03
  • Redis獲取某個(gè)前綴的key腳本實(shí)例

    Redis獲取某個(gè)前綴的key腳本實(shí)例

    這篇文章主要給大家介紹了關(guān)于Redis獲取某個(gè)前綴的key腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 利用Redis實(shí)現(xiàn)訂單30分鐘自動(dòng)取消

    利用Redis實(shí)現(xiàn)訂單30分鐘自動(dòng)取消

    本文主要介紹了利用Redis實(shí)現(xiàn)訂單30分鐘自動(dòng)取消,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Unable?to?connect?to?Redis無(wú)法連接到Redis解決的全過(guò)程

    Unable?to?connect?to?Redis無(wú)法連接到Redis解決的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于Unable?to?connect?to?Redis無(wú)法連接到Redis解決的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼將解決的過(guò)程介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 關(guān)于Redis網(wǎng)絡(luò)模型的源碼詳析

    關(guān)于Redis網(wǎng)絡(luò)模型的源碼詳析

    這篇文章主要給大家介紹了關(guān)于Redis網(wǎng)絡(luò)模型的源碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Redis線(xiàn)程模型的原理分析

    Redis線(xiàn)程模型的原理分析

    Redis是一個(gè)高性能的數(shù)據(jù)存儲(chǔ)框架,在高并發(fā)的系統(tǒng)設(shè)計(jì)中,Redis也是一個(gè)比較關(guān)鍵的組件,是我們提升系統(tǒng)性能的一大利器,本文詳細(xì)的介紹了Redis線(xiàn)程模型,感興趣的可以了解一
    2021-11-11
  • redis輕松處理經(jīng)緯度坐標(biāo)點(diǎn)數(shù)據(jù)的實(shí)現(xiàn)方法

    redis輕松處理經(jīng)緯度坐標(biāo)點(diǎn)數(shù)據(jù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了redis輕松處理經(jīng)緯度坐標(biāo)點(diǎn)數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 從源碼解讀redis持久化

    從源碼解讀redis持久化

    redis的持久化也就是數(shù)據(jù)落地,對(duì)于任何一個(gè)數(shù)據(jù)系統(tǒng)都要考慮是不是需要數(shù)據(jù)落地。在系統(tǒng)崩潰或是機(jī)房掉電等的情況下,將有用的數(shù)據(jù)記錄在非易失性存儲(chǔ)器上面,防止數(shù)據(jù)丟失,以及用來(lái)系統(tǒng)重啟時(shí)的數(shù)據(jù)恢復(fù)。
    2018-08-08

最新評(píng)論