快取常見問題總結

2021-10-05 02:56:54 字數 1208 閱讀 3023

1.現象:

request請求在cache中未找到資料,直接查詢storage

2.原因:

2.1業務**自身問題--->在資料庫中未找到資料,進入死迴圈

2.2惡意攻擊、爬蟲等--->大量不存在資料查詢資料庫,進入死迴圈

3.如何發現:

3.1業務響應時間

3.2業務本身問題

4.解決方法

4.1快取空物件:儲存層返回空物件, 使下次請求直接返回null

①如果是惡意攻擊,需要占用更多的快取空間--->快取設定過期時間

②網路原因導致,出現快取層和儲存層資料短期的不一致

4.2布隆過濾器攔截

①位陣列(二進位制向量);一系列隨機對映函式--->元素通過hash函式對應位陣列

②布隆過濾不存在,資料一定不存在;布隆過濾存在,資料不一定存在

private static final int insertions = 1000000;

public static void main(string args)

system.out.println("開始過濾,1w資料,100個真的,9900個假的");

int num=0;

int right=0;

int wrong=0;

for (int i = 0; i < 10000; i++) else }}

numberformat percentformat = numberformat.getpercentinstance();

percentformat.setmaximumfractiondigits(2);

system.out.println("100w中1w資料百分比結果: ");

system.out.println("布隆認為存在的:"+num);

system.out.println("真實存在的:"+right+"\t 正確率"+percentformat.format((float)right/100));

system.out.println("不存在的:"+wrong+"\t 誤判率:"+percentformat.format((float)wrong/10000));

}

快取常見問題

情況 在流量大時,如果有人利用不存在的key頻繁去訪問我們的應用,可能會導致資料庫掛掉。原因 查詢乙個不存在的資料,由於快取是不命中時被動寫入,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。解決方案 1 布隆過濾器 將所有可...

快取常見問題

所有這些快取的問題都是因為為使用快取查詢資料而導致的對資料庫造成的瞬間壓力 使用快取帶來的影響 以為犧牲資料一致性為代價換來了更大的併發量 顧名思義,穿透的意思是快取層永遠不起作用。1 查詢快取中是否存在這一條資料 2 如果不存在則查詢資料庫 3 如果資料庫中存在這一條資料,則將資料重新整理到快取中...

快取常見問題

快取穿透是指快取沒有發揮作用,業務系統雖然去快取中查詢資料,但快取中沒有資料,業務系統需要再次去儲存系統中查詢資料。通常情況下有兩種情況 儲存資料不存在,以及生成快取資料需要耗費大量時間或資源。快取穿透的常見解決辦法有兩種 回種空值和使用布隆過濾器。快取雪崩是指當快取失效 過期 後引起系統系統效能急...