什麼是redis快取雪崩、快取穿透、快取擊穿

AlferWei發表於2020-10-02

使用redis快取的目的

1、為了防止大量使用者查詢直接打到資料庫,將資料庫打掛;

2、提升查詢效率;

如果redis使用不當,會出現一些異常情況,如快取雪崩、快取穿透、快取擊穿。

快取雪崩

什麼是快取雪崩?

redis快取KV的時候,會指定快取失效時間。如果在同一時間對快取KV設定了相同的快取失效時間,則到失效時間的時候,請求在redis中已經查不到資料,進而直接請求資料庫,由於訪問資料庫請求突然爆發增長,可能打掛資料庫,進而導致其他系統的崩潰。快取集中失效的場景就是快取雪崩。

如何避免快取雪崩?

對快取失效時間加上隨機值,避免快取的集中失效。

快取穿透

什麼是快取穿透?

請求先從快取中找資料,但是快取中該KV不存在,就從資料庫中找,但是資料庫中也不存在。查詢資料庫中不存在的請求就是快取穿透。快取穿透一般是請求帶著非法引數,直接穿過快取訪問到資料庫。比如資料庫表的主鍵是從0自增的,但是攻擊者拿著主鍵-1來請求,快取中肯定不存在,請求就直接訪問到資料庫了。

如何避免快取穿透?

1、對請求做合法值校驗、許可權校驗等,讓不合法的請求在訪問資料庫前就被攔截。

2、使用布隆過濾器,布隆過濾器可以判斷key是否在資料庫中存在,如果不存在就直接返回。

快取擊穿

什麼是快取擊穿?

快取擊穿和快取雪崩有點像,但是又不完全一致。快取擊穿主要是關於熱點KV的問題。請求不斷訪問到熱點KV上,如果快取的熱點KV突然失效,大量請求就瞬間訪問到資料庫上。

如何解決快取擊穿?

1、設定熱點資料永不過期;

2、請求快取後再請求資料庫前加鎖,在第一次訪問資料庫後再次將快取KV載入到redis中;

 

相關文章