一個(gè)架構(gòu)師的緩存修煉之路
“Nginx+業(yè)務(wù)邏輯層+數(shù)據(jù)庫(kù)+緩存層+消息隊(duì)列,這種模型幾乎能適配絕大部分的業(yè)務(wù)場(chǎng)景。
?
01?本地緩存
1. 頁(yè)面級(jí)緩存
"foobar" ?scope="session">?
??????some jsp?content?
2. 對(duì)象緩存

3. 刷新策略
2018年,我和我的小伙伴自研了配置中心,為了讓客戶(hù)端以最快的速度讀取配置, 本地緩存使用了 Guava,整體架構(gòu)如下圖所示:

客戶(hù)端啟動(dòng)定時(shí)任務(wù),從配置中心拉取數(shù)據(jù)。 當(dāng)配置中心有數(shù)據(jù)變化時(shí),主動(dòng)推送給客戶(hù)端。這里我并沒(méi)有使用websocket,而是使用了 RocketMQ Remoting 通訊框架。

pull 模式必不可少 增量推送大同小異
1、數(shù)據(jù)格式非常精簡(jiǎn),只返回給前端必要的數(shù)據(jù),部分?jǐn)?shù)據(jù)通過(guò)數(shù)組的方式返回 2、使用 websocket,進(jìn)入頁(yè)面后推送全量數(shù)據(jù),數(shù)據(jù)發(fā)生變化推送增量數(shù)據(jù)
[{"playId":"2399","guestTeamName":"小牛","hostTeamName":"湖人","europe":"123"}]
[["2399","小牛","湖人","123"]]
select?id?from?blogs?limit?0,10?
select?id?from?blogs?where?id?in?(noHitId1,?noHitId2)
本地緩存:性能極高,for 循環(huán)即可 memcached:使用 mget 命令 Redis:若緩存對(duì)象結(jié)構(gòu)簡(jiǎn)單,使用 mget 、hmget命令;若結(jié)構(gòu)復(fù)雜,可以考慮使用 pipleline,lua腳本模式

選擇該技術(shù)的經(jīng)典書(shū)籍,理解基礎(chǔ)概念? 建立該技術(shù)的知識(shí)脈絡(luò)? 知行合一,在生產(chǎn)環(huán)境中實(shí)踐或者自己造輪子 不斷復(fù)盤(pán),思考是否有更優(yōu)的方案
評(píng)論
圖片
表情
