快取系統往往有兩個問題需要面對和考慮:快取穿透與失效時的雪崩效應。
1. 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。至於如何有效地解決快取穿透問題,最常見的則是採用布隆過濾器(這個東西,在我的此篇文章中有介紹:),將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被這個bitmap攔截掉,從而避免了對底層儲存系統的查詢壓力。
而在資料魔方裡,**採用了乙個更為簡單粗暴的方法,如果乙個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。
2. 快取失效時的雪崩效應儘管對底層系統的衝擊非常可怕。但遺憾的是,這個問題目前並沒有很完美的解決方案。大多數系統設計者考慮用加鎖或者佇列的方式保證快取的單執行緒(程序)寫,從而避免失效時大量的併發請求落到底層儲存系統上。
在資料魔方中,**設計的快取過期機制理論上能夠將各個客戶端的資料失效時間均勻地分布在時間軸上,一定程度上能夠避免快取同時失效帶來的雪崩效應。
本地快取與分布式快取
因為系統已經無法從優化業務 的角度去優化系統了 為了提高系統的效能 可以將對資料一直性不高和不會頻繁修改的資料存入快取中 避免頻繁訪問資料庫 以此來優化效能 首先去快取中查詢如果沒有再從資料庫中查詢並儲存至快取中 如果有直接返回 可以在專案中新建乙個map用雲儲存快取資料 快取使用流程和之前一樣 有...
redis分布式鎖java實現解決快取雪崩
快取雪崩 因為快取失效 key生存時間到期 導致所有請求都去查詢資料庫,導致資料庫cpu和記憶體負載過高導致宕機。快取雪崩原因及解決方案 使用快取主要解決資料同步,並減少對資料庫訪問次數。因此,通常解決方案往往是使用互斥鎖,讓乙個執行緒訪問資料庫,並將資料更新到快取中,其他執行緒訪問快取中資料。如果...
分布式 快取穿透 快取雪崩,快取擊穿解決方案
快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,造成快取穿透。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。解決方案 1 有很多種方法可以有效地解決快取穿透...