快取失效的經典問題

2021-10-23 21:07:47 字數 632 閱讀 6240

指查詢的資料,在資料庫不存在的情況。這樣程式會先訪問cache,沒有找到資料,再查詢資料庫,也沒有找到,然後返回空。如果惡意大量的訪問資料庫中不存在的資料,造成資源浪費,對資料庫造成壓力,甚至會導致業務不可用,甚至壓垮資料庫。

空值快取,即如果資料庫查詢的時候,沒有查詢到資料,也將空值快取到cache中,並設定過期時間(相對普通的資料,過期時間設定較短,避免占用過大的儲存空間),這樣就避免造成對資料庫的壓力。

指在某一時間段內,快取資料集中過期失效。比如crm系統,工作日早上9點左右,會迎來大量的資料訪問,加入快取是2個小時,那麼到了11點,很多快取資料就會過期,很多資料的訪問都會落到資料庫上,導致此時的資料庫訪問量大增,會對資料庫產生週期性的壓力。另外,cache集群的某些節點宕機,也會導致快取雪崩,而且是不可預知的,此時db的訪問量大增,甚至壓垮db

針對不同的型別資料,如客戶,銷售訂單等,採用不同的快取過期時間;在同乙個物件類中,採取隨機因子的方式,設定不同的過期時間。

指乙個cache中的key併發訪問量非常大,形成了熱點。當這個key過期後,持續的大併發就會跳過快取,直接訪問db,造成db的壓力。

對熱點的key程式實現自動轉為永不過期快取,可以在value中設定超時時間,程式內部校驗是否過期。如果過期,非同步發起乙個執行緒更新快取(可以使用鎖控制併發)。

Redis快取失效問題

redis作為記憶體資料庫,其資料總會有失效的時候,資料失效引起的問題主要有三個 key對應的資料在資料來源並不存在,每次針對此key的請求從快取獲取不到,請求都會到資料來源,從而可能壓垮資料來源。比如用乙個不存在的使用者id獲取使用者資訊,不論快取還是資料庫都沒有,若黑客利用此漏洞進行攻擊可能壓垮...

快取雪崩 穿透和失效問題

1 快取雪崩 redis 集群徹底崩潰後,大量請求直接打到 mysql 上面,導致 mysql 也崩潰繼而導致源服務乃至整個 崩潰 解決方案 事前 發生快取雪崩之前怎麼防止 redis 掛掉 事中 redis 集群已掛 事後 redis 集群重啟時 2 快取穿透 大量請求在穿過快取直接訪問 redi...

高併發下快取失效問題

快取穿透 指查詢乙個一定不存在的資料,由於快取是不命中,將去查詢資料庫,但是資料庫也無此記錄,我們沒有將這次查詢的null寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義 風險 利用不存在的資料進行攻擊,資料庫瞬時壓力增大,最終導致崩潰 解決 null結果快取,並加入短...