成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:如何保證本地緩存的一致性?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
在多級(jí)緩存中,本地緩存是不可或缺的組成部分,而想要保證本地緩存的數(shù)據(jù)一致性,可能采用:設(shè)置較短的本地緩存過期時(shí)間、通過配置中心來協(xié)調(diào)和同步本地緩存,以及使用本地緩存框架的自動(dòng)更新功能保證數(shù)據(jù)的一致性等解決方案,而不同的業(yè)務(wù)場景,選擇的解決方案也是不同的。

有人可能看到“本地緩存”這四個(gè)字就會(huì)覺得不屑,“哼,現(xiàn)在誰還用本地緩存?直接用分布式緩存不就完了嘛”。

然而,這就像你有一輛超級(jí)豪華的房車一樣,雖然它空間很大,設(shè)備很全,但你去市中心的時(shí)候,依然會(huì)開小轎車一樣,為啥?好停車啊!所以,不同的緩存類型是有不同得使用場景的。

并且,為了防止緩存雪崩問題、緩存擊穿問題,我們通常會(huì)采用多級(jí)緩存的解決方案,所謂的多級(jí)緩存就是:分布式緩存(Redis 或 Memcached)+本地緩存(Guava Cache 或 Caffeine)。因?yàn)榉植际骄彺婵赡軙?huì)失效、可能會(huì)掛掉,所以為了系統(tǒng)的穩(wěn)定性,多級(jí)緩存策略使用的非常廣泛。

那么,問題來了,怎么保證本地緩存的一致性?

所謂的一致性是指在同時(shí)使用緩存和數(shù)據(jù)庫的場景下,要確保數(shù)據(jù)在緩存與數(shù)據(jù)庫中的更新操作保持同步。也就是當(dāng)對(duì)數(shù)據(jù)進(jìn)行修改時(shí),無論是先修改緩存還是先修改數(shù)據(jù)庫,最終都要保證兩者的數(shù)據(jù)是一樣的,不會(huì)出現(xiàn)數(shù)據(jù)不一樣的問題。

1、如何保證本地緩存的一致性?

在分布式系統(tǒng)中,使用本地緩存最大的問題就是一致性問題,所謂的一致性問題指的是當(dāng)數(shù)據(jù)庫發(fā)生數(shù)據(jù)變更時(shí),緩存也要跟著一起變更。而分布式系統(tǒng)中每臺(tái)機(jī)器都有自己的本地緩存,所以想要保證(本地緩存的)一致性是一個(gè)比較難的問題,但通過以下手段可以最大程度的保證本地緩存的一致性問題。

(1)設(shè)置本地緩存短時(shí)間內(nèi)失效

設(shè)置本地緩存短時(shí)間內(nèi)失效,短的存活周期,保證了數(shù)據(jù)的時(shí)效性比較高,當(dāng)數(shù)據(jù)失效之后,再次訪問數(shù)據(jù)就會(huì)拉取新的數(shù)據(jù)了,這樣能盡可能的保證數(shù)據(jù)的一致性。

它的特點(diǎn)是:代碼實(shí)現(xiàn)簡單,不需要寫多余的代碼;缺點(diǎn)是,效果不是很明顯,不適合高并發(fā)的系統(tǒng)。

(2)通過配置中心協(xié)調(diào)和同步

通過微服務(wù)中的配置中心(例如 Nacos)來協(xié)調(diào),因?yàn)樗蟹?wù)器都會(huì)連接到配置中心,所以當(dāng)數(shù)據(jù)修改之后,可以修改配置中心的配置,然后配置中心再把配置變更的事件推送給各個(gè)服務(wù),各個(gè)服務(wù)感知到配置中心的配置發(fā)生更改之后,再更新自己的本地緩存,這樣就實(shí)現(xiàn)了本地緩存的數(shù)據(jù)一致性。

(3)本地緩存自動(dòng)更新功能

使用本地緩存框架的自動(dòng)更新功能,例如 Caffeine 中的 refresh 功能來自動(dòng)刷新緩存,這樣就可以設(shè)置很短的時(shí)間來更新最新的數(shù)據(jù),從而也能盡可能的保證數(shù)據(jù)的一致性,如下代碼所示:

// 創(chuàng)建 Caffeine 緩存實(shí)例
Cache<String, String> caffeineCache = Caffeine.newBuilder()
// 設(shè)置緩存項(xiàng)在 5s 后開始自動(dòng)更新
.refreshAfterWrite(5, TimeUnit.SECONDS)
// 自定義緩存更新邏輯(即獲取新值邏輯)
.build(new CacheLoader<String, String>() {
    @Override
    public void reload(String key, String oldValue) throws Exception {
        // 模擬更新緩存的操作
        updateCache(key, oldValue);
    }
});

2、實(shí)際工作中會(huì)使用哪種方案?

不同的業(yè)務(wù)系統(tǒng),會(huì)采用不同的解決方案,例如以下這些場景和對(duì)應(yīng)的解決方案:

  • 如果對(duì)數(shù)據(jù)一致性要求不是很高,并且程序的并發(fā)壓力不大的情況下,可能使用方案 1,也就是設(shè)置本地緩存短時(shí)間內(nèi)失效的解決方案,因?yàn)樗膶?shí)現(xiàn)最簡單。
  • 如果對(duì)數(shù)據(jù)的一致性要求極高,且有配置中心的情況下,可使用配置中心協(xié)調(diào)和同步本地緩存。
  • 相反,如果對(duì)一致性要求沒有那么高,且為高并發(fā)的系統(tǒng),那么可以采用本地緩存的自動(dòng)更新功能來實(shí)現(xiàn)。

小結(jié)

在多級(jí)緩存中,本地緩存是不可或缺的組成部分,而想要保證本地緩存的數(shù)據(jù)一致性,可能采用:設(shè)置較短的本地緩存過期時(shí)間、通過配置中心來協(xié)調(diào)和同步本地緩存,以及使用本地緩存框架的自動(dòng)更新功能保證數(shù)據(jù)的一致性等解決方案,而不同的業(yè)務(wù)場景,選擇的解決方案也是不同的。

課后思考

通過以上機(jī)制,我們就能實(shí)現(xiàn)本地緩存的一致性了。那么問題來了,如何實(shí)現(xiàn)分布式緩存的數(shù)據(jù)一致性呢?

責(zé)任編輯:姜華 來源: Java中文社群
相關(guān)推薦

2024-12-26 15:01:29

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2023-01-14 17:36:39

微服務(wù)注冊(cè)中心數(shù)據(jù)

2022-03-29 10:39:10

緩存數(shù)據(jù)庫數(shù)據(jù)

2024-10-28 12:41:25

2022-10-19 12:22:53

并發(fā)扣款一致性

2022-12-14 08:23:30

2019-12-09 10:37:27

Hash算法面試

2025-03-27 08:20:54

2020-08-05 08:46:10

NFS網(wǎng)絡(luò)文件系統(tǒng)

2022-07-25 09:48:22

緩存數(shù)據(jù)服務(wù)

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2022-04-01 16:55:22

數(shù)據(jù)庫緩存日志

2022-03-31 08:21:14

數(shù)據(jù)庫緩存雙寫數(shù)據(jù)一致性

2020-09-03 09:45:38

緩存數(shù)據(jù)庫分布式

2025-04-27 08:52:21

Redis數(shù)據(jù)庫緩存

2023-09-07 08:11:24

Redis管道機(jī)制

2024-01-10 08:01:55

高并發(fā)場景悲觀鎖

2021-03-04 06:49:53

RocketMQ事務(wù)

2023-09-01 15:27:31

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: a级毛片免费高清视频 | 亚洲福利一区二区 | 国产精品美女久久久 | 亚洲一区二区三区在线观看免费 | 亚洲一区二区免费视频 | 超碰免费在 | 韩日一区二区三区 | 亚洲午夜av久久乱码 | 国产亚洲一区二区三区 | 九九热精品视频 | 亚洲精品色 | 国产婷婷色一区二区三区 | 欧美日产国产成人免费图片 | 欧美中文在线 | 日韩在线免费视频 | 色婷婷综合久久久久中文一区二区 | 夜夜艹 | 日本超碰在线 | 天天综合天天 | 亚洲一区二区久久 | 欧美性一级 | 成人午夜 | 91久久久久久久久久久 | 成人免费黄色片 | 高清av一区 | 欧美日韩国产一区 | www.99热这里只有精品 | 亚洲国产二区 | 一级a性色生活片久久毛片波多野 | 日本中文字幕视频 | 成人三级电影 | 亚洲 欧美 另类 综合 偷拍 | 国产精品69毛片高清亚洲 | 九九热这里 | 黄色免费网站在线看 | 九九热re| 黄色网址在线免费播放 | 午夜电影日韩 | 午夜精品一区二区三区在线播放 | 国产精品亚洲成在人线 | 色吧综合网 |