快取擊穿
快取穿透
在同一時間快取資料集體失效,此時大量請求訪問失效資料,導致大量併發直接訪問資料庫造成資料庫壓力
將需要快取的資料進行分散失效處理,將快取的資料的失效時間設定乙個隨機值,避免大量快取資料在同一時間集體失效
將部分經常做查詢且不經常更新的資料的快取時間設定為永不失效
對於統一個key下儲存的熱點資料在key的失效時間到達時,此時有高併發的請求訪問該資料,就會造成大量請求直接訪問資料,造成資料庫壓力過大
是設定熱點資料永不失效(避免快取雪崩和擊穿,不過會造成記憶體負載過大的問題)。可以設定定時任務解決記憶體過大的問題,定時任務在熱點資料的key過期前進行資料重新整理,這樣也是對資料的永不過期處理,不過這樣設定系統的複雜度會增加。
對快取資料進行加鎖處理,當需要查詢的資料被訪問時其他執行緒不能訪問該資料,可以對get獲取快取資料時加鎖處理,單執行緒訪問這樣會降低查詢效能。我們可以在查詢資料庫之前先查詢快取是否有資料,如果快取有資料直接返回資料不走加鎖後的方法,如果快取沒有資料再走加鎖後的方法(感覺這樣也會造成短暫的效能問題)。
使用互斥鎖,先查詢快取資料判斷,如果快取沒有資料,在判斷是是否有執行緒併發訪問該方法(判斷鎖是否被占用,如果被占用就讓訪問執行緒休眠一定時間,當占用鎖的執行緒執行完後快取中的資料就會被存入,之後其他執行緒訪問直接反問快取中的資料即可,不需要再訪問資料庫避免快取擊穿造成的資料庫壓力過大)
當有人可以攻擊系統時,採用乙個一定不存在的資料訪問資料庫,此時快取中不存在對應的資料,會直接訪問資料庫,反覆訪問造成資料庫壓力過大崩潰稱為快取穿透
在接收引數時進行判斷,將不符合條件或邏輯的查詢條件進行檢驗
當乙個資料被反覆訪問且資料庫中不存在時,進行快取空值,將快取時間設定的相對較短點,頻繁訪問時返回快取中的空值或者是提示資訊
目前了解到的快取問題,以後有新的發現會及時補充
快取雪崩 擊穿 穿透
1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...
redis 快取擊穿 穿透 雪崩
一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。如何避免?1 對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一...
關於快取擊穿 穿透 雪崩
前台請求資料,後台先進入緩訪問資料,取到了直接返回給前台,取不到的話再進入資料庫取資料,取到了返回給前台,並且更新快取資料,取不到的話,就返回乙個空值給前台。指的是快取和資料庫中都沒有我們需要的資料,也就是都沒有取到資料的時候,這時候我們返回乙個空值給前台,但是前台偏偏就要這個資料,就會再次傳送請求...