緩存更新策略
1.lru/lfu/fifo - redis自帶,根據(jù)maxmemory-policy設(shè)置,數(shù)據(jù)無法保證一致性
2.超時(shí)剔除 - 設(shè)置expire,存在一定時(shí)間不一致問題
3.主動(dòng)更新 - 建議與超時(shí)剔除一起使用,一致性最好
低一致性使用最大內(nèi)存,超時(shí)剔除策略一起使用
高一致性使用超時(shí)剔除和主動(dòng)更新策略一起使用(避免主動(dòng)更新出問題后緩存癱瘓)
緩存粒度
緩存粒度應(yīng)適中,避免不必要內(nèi)存,網(wǎng)絡(luò)浪費(fèi)(只緩存重要字段)
緩存穿透
1.緩存空對(duì)象(數(shù)據(jù)變化頻繁場(chǎng)景)(緩存空間占用較多)
2.布隆過濾器(數(shù)據(jù)變化小場(chǎng)景)
無底洞優(yōu)化
更多的節(jié)點(diǎn)意味著更多的網(wǎng)絡(luò)消耗,批量操作更耗時(shí),當(dāng)節(jié)點(diǎn)增加到一定程度,再增加節(jié)點(diǎn)并無法提高性能
優(yōu)化:
1.命令優(yōu)化
2.減少網(wǎng)絡(luò)次數(shù)
3.降低連接成本(長(zhǎng)連接,連接池,nio)
緩存雪崩
1.保證緩存高可用(sentinel、cluster)
熱點(diǎn)key問題 - p361
2.高并發(fā)下緩存失效后多個(gè)線程同時(shí)申請(qǐng)建立緩存
解決:
1.互斥鎖,同時(shí)只能有一個(gè)線程申請(qǐng)建立緩存(setnx鎖),其它線程等待重新讀。(保證緩存構(gòu)建時(shí)間較短)?
2.永遠(yuǎn)不過期(定期構(gòu)建緩存)(重構(gòu)期間數(shù)據(jù)不一致)