Redis快取設計

2021-09-25 01:55:58 字數 1231 閱讀 3867

策略

一致性維護成本

lru、lrf、fifo最差低

超時剔除

較差較低

主動更新強高

低一致性業務:最大記憶體和淘汰策略的方式,maxmemory-policy

高一致性業務:超時剔除和主動更新

解決快取穿透

適用場景

維護成本

快取空物件

資料命中不高,資料頻繁變化實時性高

**維護簡單,需要過多的快取空間,資料不一致

布隆過濾器

資料命中不高、資料相對固定、實時性低

**維護複雜,快取占用空間小

快取空物件:針對該類物件需設定較短過期時間。

布隆過濾器:將存在的key用布隆過濾器儲存起來,如果過濾器認為該資訊不存在,那麼不會訪問儲存層。該方法適用於資料命中不高的場景

快取伺服器宕機了,或在某一時刻快取同時到期,導致大量的流量打向後端儲存

保證快取層的高可用性

依賴隔離元件為後端限流並降級

開發人員使用「快取+過期時間」的策略既可以加速資料讀寫,又保證資料的定期更新,這種模式基本能夠滿足絕大 部分需求。但是有兩個問題如果同時出現,可能就會對應用造成致命的危害: 當前key是乙個熱點key(例如乙個熱門的娛樂新聞),併發量非常大。 重建快取不能在短時間完成,可能是乙個複雜計算,例如複雜的sql、多次io、多個依賴等。在快取失效的瞬 間,有大量執行緒來重建快取,造成後端負載加大,甚至可能會讓應用崩潰。 要解決這個問題也不是很複雜,但是不能為了解決這個問題給系統帶來更多的麻煩,所以需要制定如下目 標: 減少重建快取的次數 資料盡可能一致 較少的潛在危險 ①互斥鎖:此方法只允許乙個執行緒重建快取,其他執行緒等待重建快取的執行緒執行完,重新從快取獲取資料即 可。

②永遠不過期

永遠不過期」包含兩層意思: 從快取層面來看,確實沒有設定過期時間,所以不會出現熱點key過期後產生的問題,也就是「物理」不過期。 從功能層面來看,為每個value設定乙個邏輯過期時間,當發現超過邏輯過期時間後,會使用單獨的執行緒去構建快取。 從實戰看,此方法有效杜絕了熱點key產生的問題,但唯一不足的就是重構快取期間,會出現資料不一致的情況,這取決於應用方是否容忍這種不一致。

redis 快取設計

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

redis系列 五 redis 快取設計

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

Redis快取設計之快取穿透 快取雪崩

提高系統響應速度,加速讀寫,redis將數全都存放在記憶體中,響應速度更快。降低了後台的負載,減少了對後端的直接訪問 資料一致性問題,快取層的資料與儲存層的資料可能存在不一致的問題 維護複雜度高了,加入快取後要同時處理快取曾和持久層的 邏輯 快取穿透就是指查詢乙個根本不存在的資料,導致很多請求直接穿...