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

穿透類緩存Cache使用,這一篇就夠了!

開(kāi)發(fā) 開(kāi)發(fā)工具
有些成熟的技術(shù)方案,用不著創(chuàng)新,固化下來(lái)的模式(pattern),學(xué)就完了。例如,穿透類緩存的使用,“Cache Aside Pattern”就是很好的實(shí)踐沉淀,故今天聊一聊Cache Aside Pattern。

有些成熟的技術(shù)方案,用不著創(chuàng)新,固化下來(lái)的模式(pattern),學(xué)就完了。例如,穿透類緩存的使用,“Cache Aside Pattern”就是很好的實(shí)踐沉淀,故今天聊一聊Cache Aside Pattern。

畫(huà)外音:就好像“設(shè)計(jì)模式”,它就是沉淀下來(lái)的設(shè)計(jì)方法。

[[442060]]

什么是“Cache Aside Pattern”?

旁路緩存方案的經(jīng)驗(yàn)實(shí)踐,這個(gè)實(shí)踐又分讀實(shí)踐,寫(xiě)實(shí)踐。

畫(huà)外音:與旁路緩存對(duì)應(yīng)的,是穿透緩存。

讀實(shí)踐是怎么樣的?

對(duì)于讀請(qǐng)求:

(1)先讀cache,再讀db;

(2)如果,cache hit,則直接返回?cái)?shù)據(jù);

(3)如果,cache miss,則訪問(wèn)db,并將數(shù)據(jù)set回緩存;

如上圖:

(1)先從cache中嘗試get數(shù)據(jù),結(jié)果miss了;

(2)再?gòu)膁b中讀取數(shù)據(jù),從庫(kù),讀寫(xiě)分離;

(3)最后把數(shù)據(jù)set回cache,方便下次讀命中;

寫(xiě)實(shí)踐是怎么樣的?

對(duì)于寫(xiě)請(qǐng)求:

(1)淘汰緩存,而不是更新緩存;

(2)先操作數(shù)據(jù)庫(kù),再淘汰緩存;

如上圖:

(1)第一步要操作數(shù)據(jù)庫(kù),第二步操作緩存;

(2)緩存,采用delete淘汰,而不是set更新;

Cache Aside Pattern為什么建議淘汰緩存,而不是更新緩存?

如果更新緩存,在并發(fā)寫(xiě)時(shí),可能出現(xiàn)數(shù)據(jù)不一致。

如上圖所示,如果采用set緩存。

在1和2兩個(gè)并發(fā)寫(xiě)發(fā)生時(shí),由于無(wú)法保證時(shí)序,此時(shí)不管先操作緩存還是先操作數(shù)據(jù)庫(kù),都可能出現(xiàn):

(1)請(qǐng)求1先操作數(shù)據(jù)庫(kù),請(qǐng)求2后操作數(shù)據(jù)庫(kù);

(2)請(qǐng)求2先set了緩存,請(qǐng)求1后set了緩存;

導(dǎo)致,數(shù)據(jù)庫(kù)與緩存之間的數(shù)據(jù)不一致。

所以,Cache Aside Pattern建議,delete緩存,而不是set緩存。

Cache Aside Pattern為什么建議先操作數(shù)據(jù)庫(kù),再操作緩存?

如果先操作緩存,在讀寫(xiě)并發(fā)時(shí),可能出現(xiàn)數(shù)據(jù)不一致。

如上圖所示,如果先操作緩存。

在1和2并發(fā)讀寫(xiě)發(fā)生時(shí),由于無(wú)法保證時(shí)序,可能出現(xiàn):

(1)寫(xiě)請(qǐng)求淘汰了緩存;

(2)寫(xiě)請(qǐng)求操作了數(shù)據(jù)庫(kù)(主從同步?jīng)]有完成);

(3)讀請(qǐng)求讀了緩存(cache miss);

(4)讀請(qǐng)求讀了從庫(kù)(讀了一個(gè)舊數(shù)據(jù));

(5)讀請(qǐng)求set回緩存(set了一個(gè)舊數(shù)據(jù));

(6)數(shù)據(jù)庫(kù)主從同步完成;

導(dǎo)致,數(shù)據(jù)庫(kù)與緩存的數(shù)據(jù)不一致。

所以,Cache Aside Pattern建議,先操作數(shù)據(jù)庫(kù),再操作緩存。

Cache Aside Pattern方案存在什么問(wèn)題?

答:如果先操作數(shù)據(jù)庫(kù),再淘汰緩存,在原子性被破壞時(shí):

(1)修改數(shù)據(jù)庫(kù)成功了;

(2)淘汰緩存失敗了;

導(dǎo)致,數(shù)據(jù)庫(kù)與緩存的數(shù)據(jù)不一致。

Cache Aside Pattern總結(jié):

對(duì)于讀請(qǐng)求:

(1)先讀cache,再讀db;

(2)如果,cache hit,則直接返回?cái)?shù)據(jù);

(3)如果,cache miss,則訪問(wèn)db,并將數(shù)據(jù)set回緩存;

對(duì)于寫(xiě)請(qǐng)求:

(1)淘汰緩存,而不是更新緩存;

(2)先操作數(shù)據(jù)庫(kù),再淘汰緩存;

任何技術(shù)方案的設(shè)計(jì),都是折衷。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文 

 

 

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2023-02-10 09:04:27

2019-04-02 10:51:29

瀏覽器緩存前端

2020-08-03 10:00:11

前端登錄服務(wù)器

2023-04-24 08:00:00

ES集群容器

2019-12-30 11:25:06

Jvm運(yùn)行java

2020-02-18 16:20:03

Redis ANSI C語(yǔ)言日志型

2020-05-14 16:35:21

Kubernetes網(wǎng)絡(luò)策略DNS

2022-06-20 09:01:23

Git插件項(xiàng)目

2022-08-01 11:33:09

用戶分析標(biāo)簽策略

2019-08-13 15:36:57

限流算法令牌桶

2021-04-08 07:37:39

隊(duì)列數(shù)據(jù)結(jié)構(gòu)算法

2023-09-11 08:13:03

分布式跟蹤工具

2020-07-03 08:21:57

Java集合框架

2021-05-14 23:31:50

大數(shù)據(jù)計(jì)算機(jī)開(kāi)發(fā)

2024-04-08 10:01:33

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2023-10-17 08:15:28

API前后端分離

2018-05-22 08:24:50

PythonPyMongoMongoDB

2020-11-06 10:01:06

Nginx

2024-09-23 08:00:00

消息隊(duì)列MQ分布式系統(tǒng)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 男人天堂午夜 | 成人免费在线播放视频 | 日韩av在线一区二区 | 国产欧美日韩精品一区二区三区 | 丝袜美腿一区二区三区动态图 | 欧美日产国产成人免费图片 | 狠狠操电影 | 亚洲视频一区在线 | 成人自拍视频网站 | 一区二区三区小视频 | 亚洲毛片一区二区 | 亚洲国产18| 一级黄色毛片免费 | 久久中文字幕一区 | 日韩a在线观看 | 在线午夜 | 欧美一区二区三区在线视频 | 一区二区三区久久久 | 欧美黄 片免费观看 | 久久久久久久久久一区二区 | 一区二区三区久久 | 日韩精品在线一区 | 国产免费麻豆视频 | 精品中文在线 | 国产一区二区三区四区区 | 欧美高清视频 | 欧美日韩不卡在线 | 精品日韩一区 | 特黄特色大片免费视频观看 | 91电影| 91超碰caoporn97人人 | 99re在线| 香蕉视频91 | 91久久国产精品 | 国产成人免费视频 | 亚洲精品久久久一区二区三区 | 一区精品视频 | av电影一区| 天天夜碰日日摸日日澡 | 韩日一区二区三区 | 国产欧美视频一区二区三区 |