快取相關問題及解決方案

2021-09-11 07:40:35 字數 950 閱讀 9421

快取穿透:查詢必然不存在的資料,請求透過快取,直擊資料庫 

快取雪崩:大量的key設定了相同的過期時間,導致在快取在同一時刻全部失效,造成瞬時db請求量大、壓力驟增,引起雪崩

快取擊穿:乙個存在的key,在快取過期的一刻,同時有大量的請求。直擊資料庫

順便說兩個概念加深一下記憶

tps:資料庫美妙執行的事務數

qps:資料庫每秒執行的sql數量

讀多寫少用快取,寫多讀少用佇列

1.非法請求,引數校驗(長度等)

2.快取臨時的空資料,設定有效期

記憶體占用可能非常高

可以採用合適的演算法,來檢索集合中是否存在某個元素

目的:減少方案2的記憶體占用

思路:不儲存所有的id資訊,直在記憶體中做乙個標記

布隆過濾器(bollm filter)

很長的二進位制數組合一系列hash函式

可用於檢索乙個元素是否在乙個集合中。

空間效率和查詢時間都比一般的演算法要好。

缺點是有一定的誤識別率和刪除困難

實現: 二進位制陣列構建過程

1.載入符合條件的記錄

2.計算每條元素的hash值

3.計算hash值對應二進位制陣列的位置

4.將對應的位置的值改為1

可利用redis的特性:bigmaps(setbit設定指定位置的值、getbit獲取值)

redis自帶的二進位制陣列特性

優點:記憶體空間占用少。

缺點:取藥不斷的維護,帶來新的工作

並不能精準過濾(判定不存在,100%不存在,判斷存在,擇可能不存在)

並非攔截所有請求,意在將快取穿透控制在一定的量

快取穿透問題及解決方案

快取穿透也被稱為 擊穿 很多朋友對快取穿透的理解是 由於快取故障或者快取過期導致大量請求穿透到後端資料庫伺服器,從而對資料庫造成巨大衝擊。這其實是一種誤解。真正的快取穿透應該是這樣的 在高併發場景下,如果某乙個key被高併發訪問,沒有被命中,出於對容錯性考慮,會嘗試去從後端資料庫中獲取,從而導致了大...

ajax 快取問題及解決方案

當請求的路徑 引數名 引數值三者都沒有發生變化時,瀏覽器將不會再傳送此請求,只有這三者其中任意乙個發生變化時 變化的一般只有引數值 瀏覽器才會再次向伺服器傳送請求!快取測試 總共四次請求 文字框中沒有值 http localhost 8070 demo getjson.do?operation 請求...

常見快取問題及解決方案

概念 增加節點機器,效能沒有提公升反而下降了。以使用者為例 user 133 age,user 133 name,user 133 height n個ke,當伺服器增多的時候,133號使用者的資訊,也被更散落在更多的節點上,所以,同樣是訪問個人主頁,得到相同的個人資訊,節點越多,要連線的節點也越多,...