Redis快取問題

2021-10-05 04:48:15 字數 1210 閱讀 1576

1.快取雪崩

快取雪崩是指快取同一時間大面積的失效,所以後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

解決方案: 

快取資料過期時間隨機設定,防止同一時間大量資料過期現象發生。

併發量不是特別多的時候,加鎖排隊。

給每乙個快取資料新增乙個標價,記錄快取是否失效,如果失效,則更新資料快取。

2.快取穿透:

快取穿透是指快取和資料庫中都沒有的資料,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

解決方案:

3.快取擊穿

快取擊穿是指快取中沒有但資料庫中有的資料(一般是由於快取時間到期導致的),由於併發使用者特別多,讀快取沒讀到資料,又同時去資料庫讀資料,引起資料庫壓力瞬間增大,造成過大壓力。與快取雪崩不同的是,快取擊穿併發查同一條資料,快取雪崩是不同資料都過期了,很多資料查不到從而查資料庫。

解決方案:

4.快取熱點key

快取中乙個key,在某個時間點過期的時候(比如商家**商品),有大量的併發請求過來,這些請求發現快取過期一般都會從後端db載入資料並回設到快取,這個時候大併發的請求可能會瞬間把db給幹崩潰。

解決方案:

對快取查詢加鎖,如果key不存在,就加鎖,然後查db入再寫入快取,然後解鎖;其他程序等待解鎖後返回資料或者進入db查詢。

redis使用setnx命令實現分布式鎖。setnx:set  if  not  exists(如果不存在就set的簡寫)

當且僅當key不存在,將key的值設為value,若給定的key值已經存在,則setnx不做任何操作。

5.快取預熱

快取預熱就是系統上線後,將相關的快取資料直接載入到快取系統。這樣就可以避免在使用者請求的時候,先查詢資料庫,然後再將資料快取的問題,使用者直接查詢事先被預熱的快取資料。

解決方案:

6.快取降級

一種犧牲區域性換取大局的做法(丟車保帥),當訪問量劇增、服務出現問題(如響應時間慢,或者不相應),非核心服務影響到核心流程的效能時,為了保證核心服務可用,系統可以根據一些關鍵資料進行自動降級,也可以配置實現人工降級。

降級的目的是為了防止redis服務故障,導致資料庫跟著一起發生雪崩問題,因此對於不重要的快取資料,可以採用服務降級策略,常見做法是:redis出現問題,不去資料庫查詢,而是直接返回預設值給客戶

Redis 快取問題

描述 查詢乙個資料庫中不存在的資料,比如商品詳情,查詢乙個不存在的id,每次都會訪問db,如果有人惡意破壞,很可能直接對db造成過大地壓力。解決方案 當通過某乙個key去查詢資料的時候,如果對應在資料庫中的資料都不存在,我們將此key對應的value設定為乙個預設的值,比如 null 並設定乙個快取...

Redis快取問題

快取雪崩就是 redis 的大量熱點資料在短時間內同時過期 失效 因為設定了相同的過期時間,剛好這個時候 redis 請求的併發量又很大,就會導致所有的請求到資料庫。快取雪崩解決方案 1.加互斥鎖或者使用佇列,針對同乙個key只允許乙個執行緒到資料庫查詢 2.快取定時預先更新,避免同時失效 3.通過...

Redis快取穿透 快取雪崩問題

穿透雪崩主要是因為查詢資料庫造成的,那麼讀寫分離,快取資料查詢失敗不去查資料庫就好了。查的時候有即是有,無即是無,不會再查資料庫,快取的穿透和雪崩問題就不存在了。其次新增資料庫和快取同步功能,保證資料庫和快取資料是一致的即可 需要注意的是這時候資料庫資料是有限和相對穩定的,其實如果是海量資料同時放入...