淺談Redis中的緩存更新策略
1. 緩存更新策略綜述
- 內(nèi)存淘汰
- 不用自己維護(hù),利用 Redis 自己的內(nèi)存淘汰機(jī)制 (內(nèi)存不足時(shí),觸發(fā)策略,默認(rèn)開啟,可自己配置),其可在一定程度上保持?jǐn)?shù)據(jù)一致性
- 超時(shí)剔除
- 給數(shù)據(jù)添加 TTL,到期之后自動(dòng)剔除,是最終一致性
- 自動(dòng)更新
- 編寫業(yè)務(wù)邏輯,修改數(shù)據(jù)庫時(shí),更新緩存,一致性高,維護(hù)成本高
2. 緩存策略的選擇
選擇內(nèi)存策略,要基于業(yè)務(wù)場(chǎng)景 —— 低一致性需求,高一致性需求
3. 主動(dòng)更新策略
緩存的主動(dòng)更新策略又分為以下三種:
4. Cache Aside Pattern
Cache Aside Patter 是我們比較常用的緩存更新策略,其由緩存調(diào)用者在更新數(shù)據(jù)庫時(shí),在業(yè)務(wù)邏輯中設(shè)置緩存更新。對(duì) Cache Aside Pattern ,有以下三個(gè)問題比較重要。
- 是刪除緩存還是更新緩存?
使用更新數(shù)據(jù)庫時(shí)刪除緩存,下次讀數(shù)據(jù)的時(shí)候再寫入緩存的策略,更新緩存會(huì)產(chǎn)生很多不必要的寫操作。 - 如何保證緩存與數(shù)據(jù)庫的操作的同時(shí)成功或者失敗
在單體項(xiàng)目中很好控制,在分布式項(xiàng)目中,使用分布式事務(wù)解決。 - 先操作緩存還是先操作數(shù)據(jù)庫
線程問題:使用先操作數(shù)據(jù)庫,再刪除緩存。先操作數(shù)據(jù)庫再操作緩存,能減少發(fā)生問題的概率。
如下是兩種線程不安全問題產(chǎn)生的場(chǎng)景,但是因?yàn)榫彺娴牟僮鲾?shù)據(jù)的速度是遠(yuǎn)遠(yuǎn)高于數(shù)據(jù)庫寫操作的速度的,因此先操作數(shù)據(jù)庫再刪除緩存,出現(xiàn)問題的可能性低。
5.代碼實(shí)現(xiàn)
在更新代碼中,加入刪除緩存的邏輯即可,代碼示例如下:
@Override public Result update(Shop shop) { if(shop == null){ return Result.fail("店鋪不能為 null"); } // 更新數(shù)據(jù)庫 updateById(shop); // 刪除緩存 stringRedisTemplate.delete(CACHE_SHOP_KEY + shop.getId()); return Result.ok(); }
到此這篇關(guān)于淺談Redis中的緩存更新策略的文章就介紹到這了,更多相關(guān)Redis緩存更新策略內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis過期事件監(jiān)聽器的完整實(shí)現(xiàn)步驟
要使用 Redis 過期事件監(jiān)聽器來更新數(shù)據(jù)庫狀態(tài),我們需要確保 Redis 的事件通知已啟用,并實(shí)現(xiàn)監(jiān)聽器來捕獲過期的鍵,并根據(jù)需要更新數(shù)據(jù)庫,本文給大家介紹了Redis過期事件監(jiān)聽器的完整實(shí)現(xiàn)步驟,需要的朋友可以參考下2024-10-10Redis核心原理與實(shí)踐之字符串實(shí)現(xiàn)原理
這本書深入地分析了Redis常用特性的內(nèi)部機(jī)制與實(shí)現(xiàn)方式,內(nèi)容源自對(duì)Redis源碼的分析,并從中總結(jié)出設(shè)計(jì)思路、實(shí)現(xiàn)原理。對(duì)Redis字符串實(shí)現(xiàn)原理相關(guān)知識(shí)感興趣的朋友一起看看吧2021-09-09基于Redis實(shí)現(xiàn)抽獎(jiǎng)功能及問題小結(jié)
這篇文章主要介紹了基于Redis實(shí)現(xiàn)抽獎(jiǎng)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08簡單粗暴的Redis數(shù)據(jù)備份和恢復(fù)方法
這里我們來講解一個(gè)簡單粗暴的Redis數(shù)據(jù)備份和恢復(fù)方法,有一個(gè)在不同主機(jī)上遷移Redis數(shù)據(jù)的示例,還有一個(gè)備份腳本實(shí)現(xiàn)的關(guān)鍵點(diǎn)提示,一起來看一下:2016-06-06Redis數(shù)據(jù)庫的使用場(chǎng)景介紹(避免誤用Redis)
這篇文章主要介紹了Redis數(shù)據(jù)庫的使用場(chǎng)景介紹(避免誤用Redis),本文用簡要的語言總結(jié)了Redis數(shù)據(jù)庫的適應(yīng)場(chǎng)合,人而避免錯(cuò)誤的使用它而產(chǎn)生昂貴的維護(hù)代價(jià),需要的朋友可以參考下2015-03-03淺析Redis底層數(shù)據(jù)結(jié)構(gòu)Dict
Redis是一個(gè)鍵值型的數(shù)據(jù)庫,我們可以根據(jù)鍵實(shí)現(xiàn)快速的增刪改查,而鍵與值的映射關(guān)系正是通過Dict來實(shí)現(xiàn)的,當(dāng)然?Dict?也是?Set?Hash?的實(shí)現(xiàn)方式,本文就詳細(xì)帶大家介紹一下Redis底層數(shù)據(jù)結(jié)構(gòu)?Dict,,需要的朋友可以參考下2023-05-05