一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢(比如db)。
一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。
1:對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料insert了之後清理快取。
2:對一定不存在的key進行過濾。可以把所有的可能存在的key放到乙個大的bitmap中,查詢時通過該bitmap過濾
3:也可以使用流行的bloom filter布隆過濾器
當快取伺服器重啟或者大量快取集中在某乙個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓力。導致系統崩潰。
1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。
2:做二級快取,a1為原始快取,a2為拷貝快取,a1失效時,可以訪問a2,a1快取失效時間設定為短期,a2設定為長期
3:不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。
redis常見問題
在redis命令列執行info clients 得到類似下面的結果 connected clients 357 client longest output list 0client biggest input buf 0blocked clients 0redis連線數過多的問題可以參考 處理red...
redis常見問題
redis使用中可能出現的一些問題 1.快取穿透 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從db查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫查詢,從而造成快取穿透。解決辦法 持久層查詢不到就快取空結果,查詢時先判斷快取中是否exists key 如果...
Redis常見問題
1.如何解決快取雪崩?2.如何解決快取穿透?3.如何保證快取與資料庫雙寫時一致的問題?1.1 什麼是快取雪崩?回顧一下我們為什麼要用快取 redis 現在有個問題,如果我們的快取掛掉了,這意味著我們的全部請求都跑去資料庫了。我們都知道redis不可能把所有的資料都快取起來 記憶體昂貴且有限 所以re...