redis學習 快取設計中要提前考慮的事情

2021-10-06 22:27:48 字數 1742 閱讀 8396

[toc]

[toc]

本系列文章整理摘抄自

**維護成本

基於記憶體的快取不可能將所有的資料都做快取,一般針對的都是熱點資料。熱點資料具有時效性,過了一定時間將成為非熱點資料

所以,快取資料通常具有生命時長,到達指定的時間後,將被更新或者刪除。

熟悉快取的常用更新策略,才能針對業務場景做出合理的選擇。

通常快取量超過了預設的最大值時,將會採取以上策略,具體由maxmemory-policy引數指定。

一致性最差。

通過給快取資料設定過期時間,讓其在過期時間後自動刪除,例如redis提供的expire命令。

一致性取決於時間視窗。

當堆資料一致性要求高時,在更新儲存層資料後,需要立即更新快取中的資料。

一致性最好。

配置最大記憶體 + 淘汰策略

超時剔除 + 主動更新

對於快取資料庫的內容時,要考慮快取全部字段,或者部分字段。

部分字段:

在系統剛上線,直接將資料載入進快取系統,提前準備。

快取穿透是指查詢乙個根本不存在的資料,快取層和儲存層都不命中。

如果出現大量的快取穿透,會對後端的資料庫產生大流量的衝擊,嚴重可使得資料庫服務宕機。

統計總呼叫數、 快取層命中數、 儲存層命中數,如果發現大量儲存層空命中, 可能就是出現了快取穿透問題。

問題1的解決. 快取空物件 + 設定短過期時間

實時性高。

儲存層不命中後,仍然將空物件保留到快取層中,之後再訪問這個資料將會從快取中獲取,這樣就保護了後端資料來源。

問題2的解決. 布隆過濾器攔截(快取層之前對存在的key做儲存)

實時性差。

訪問快取層和儲存層之前,將存在的key用布隆過濾器提前儲存起來, 做第一層攔截

發生大規模的快取失效的情況,或者快取層宕機,大量流量衝入儲存層。

快取服務由於各種原因失效了。

資料庫服務宕機。

主從 + 哨兵, 集群。

redis sentinel和rediscluster都實現了高可用

hystrix限流並降級的流程

海量的使用者請求出現:

當熱點資料併發訪問量非常大,由於之前設定了過期時間,失效後難以短時間重建。

比如: 熱點的娛樂新聞。

快取服務由於各種原因失效了。

資料庫服務宕機。

並不是所有的執行緒都需要去重建,第乙個遇到的執行緒重建,其他執行緒等待即可。

互斥鎖的實現1:通過setnx 和 expire命令實現

123

4567

891011

1213

1415

1617

1819

2021

22

string get(string key) /

/ 其他執行緒休息50毫秒後重試

else

}return value;

}

互斥鎖的實現2:通過watch和redis的事務命令實現但是會出現資料不一致的情況。

不要讓熱點資料集中失效,而是一批一批,分時間段的失效

Redis快取設計

策略 一致性維護成本 lru lrf fifo最差低 超時剔除 較差較低 主動更新強高 低一致性業務 最大記憶體和淘汰策略的方式,maxmemory policy 高一致性業務 超時剔除和主動更新 解決快取穿透 適用場景 維護成本 快取空物件 資料命中不高,資料頻繁變化實時性高 維護簡單,需要過多的...

redis 快取設計

1 快取穿透 查詢乙個不存在的key 資料,快取層和儲存層都不會命中,將導致不存在的資料每次請求都要到儲存層去查詢,失去快取保護db 的意義。解決方案 有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器 不了解的可以看這裡 將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一...

redis系列 五 redis 快取設計

序號 名稱鏈結位址 1redis系列 一 redis安裝以及基本型別簡介 2redis系列 二 redis持久化 3redis系列 三 redis主從複製 4redis系列 四 redis哨兵模式與集群 5redis系列 五 redis 快取設計 1.1收益 加速讀寫 因為快取通常都是全記憶體的 例...