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

2021-08-29 01:51:09 字數 1299 閱讀 1224

提高系統響應速度,加速讀寫,redis將數全都存放在記憶體中,響應速度更快。

降低了後台的負載,減少了對後端的直接訪問

資料一致性問題,快取層的資料與儲存層的資料可能存在不一致的問題

維護複雜度高了,加入快取後要同時處理快取曾和持久層的**邏輯

快取穿透就是指查詢乙個根本不存在的資料,導致很多請求直接穿過了快取層直接到了持久層,,導致後端的負載加大。

導致快取穿透的原因有以下幾個:

業務邏輯**本身就存在問題導致快取穿透

受到了惡意的攻擊以及網路爬蟲等,導致大量請求快取空命中

1、快取空資料

也就是說如果快取層沒有命中這個資料,查詢持久層返回資料的同時也將空物件也快取到快取層,那麼下一次請求就命中了。

快取空資料缺點:快取了空資料,也就說明有更多的key湧入了快取層,也就需要消耗更多的記憶體,如果是惡意攻擊那簡直就是噩夢

快取層與持久層的資料不一致問題,如果我快取乙個空物件並設定了失效時間為10分鐘,那如果持久層真的持久化了這一資料,這5分鐘內我快取層和持久層的資料是不一致的。

2.布隆過濾器

基本思想就是在快取層和持久層之前將存在的key用布隆***儲存起來做第一層攔截。如果布隆***認為資料不存在就不訪問持久層了,這樣也解決了快取擊穿的問題。

在高併發的系統中快取層負載了很大一部分的請求,降低的持久層的壓力,如果快取層由於某些原因停止服務了,那麼所有的請求都將直接訪問到持久層,由於持久層的處理速度效能遠遠不及快取層,就可能導致持久層也會服務不可用,還有一種情況是大量的快取資料在同一時刻失效了,也可能導致快取雪崩。

1.保證快取服務的高可用性,比如使用redis哨兵監控redis集群以及使用redis cluster等。即使單個節點宕機了,備用節點還能頂上去保證服務可用。

做二級快取,當一級快取停止服務,或大量失效時,由二級快取頂住訪問壓力。

不同的key之間的失效時間設定不同保證資料失效均衡。

快取 redis 快取穿透

哪一些因素 考慮使用redis,畢竟 redis 也要增加成本 1 熱點資料 2 讀的成本非常大 3 讀多寫少 4 對資料一致性要求 沒有那麼嚴格 可以出現資料與資料庫不一致 1 秒殺場景 3 物流查詢軌跡 熱點資料 啟用的資料是被快取到redis 當中 快取key 乙個時間點過期的時候,如果快取資...

Redis快取穿透 快取雪崩

把redis作為快取使用已經是司空見慣,但是使用redis後也可能會碰到一系列的問題,尤其是資料量很大的時候,經典的幾個問題如下 一 快取和資料庫間資料一致性問題 分布式環境下 單機就不用說了 非常容易出現快取和資料庫間的資料一致性問題,針對這一點的話,只能說,如果你的專案對快取的要求是強一致性的,...

Redis 快取穿透 快取雪崩

目錄 1.快取穿透 如何避免?如何選擇?2 快取擊穿 如何解決 3.快取雪崩 如何解決?快取穿透 一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力,或導致資料庫異常。...