淺談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官方ORM框架比RedisTemplate更優(yōu)雅
這篇文章主要為大家介紹了Redis官方ORM框架比RedisTemplate更優(yōu)雅的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Redis通用命令介紹以及key的層級(jí)結(jié)構(gòu)講解
這篇文章主要介紹了Redis通用命令以及key的層級(jí)結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12

