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