寫在前面
Redis 是一種 NoSQL 資料庫,包含多種資料結構、支持網路、基于記憶體、可選持久性的鍵值對存盤資料庫,在我們的日常開發中會經常使用 Redis 來解決許多問題,比如排行榜、訊息佇列系統、計數器 以及 快取系統等,
在作為快取使用時,不可避免的會遇到快取穿透、快取雪崩、快取擊穿(熱點 key) 的問題,那么究竟這些問題具體值的是什么,又該如何解決呢?
什么是快取穿透
快取穿透是指客戶端請求的資料在快取和資料庫中都不存在,引起快取失效,并會對資料庫造成極大的壓力,
常見的解決方案有兩種:
- 快取空物件
- 優點:實作簡單,維護方便
- 缺點:
- 額外的記憶體消耗
- 可能造成短期的不一致
- 布隆過濾
- 優點:記憶體占用少,沒有多余的key
- 缺點:
- 實作復雜
- 可能存在誤判
- 增加 id 的復雜度,避免被猜到 id 規律,
- 做好資料的基礎格式校驗,
- 加強用戶的權限校驗,
- 做好熱點引數的限流(sentinel),
什么是快取雪崩
快取雪崩是指在同一時間段大量的快取 key 同時失效或者 Redis 服務宕機,導致大量請求到達資料庫,對資料庫造成極大的壓力,
常見的解決方案有:
- 給不同的 key 的 TTL添加隨機值,
- 利用 Redis 集群提高服務的可用性,(Redis 主從,哨兵)
- 給快取業務添加降級限流策略(sentinel),
- 給業務添加多級快取,
什么是快取擊穿
快取擊穿也叫熱點 key 問題,是指一個被高并發訪問并且快取重建業務比較復雜的key 突然失效了,無數的請求訪問會在瞬間給資料庫帶來巨大的沖擊,
常見的解決方案有:
- 互斥鎖
- 優點:
- 沒有額外的記憶體消耗
- 保證一致性
- 失效簡單
- 缺點:
- 執行緒需要等待,性能收到影響
- 可能有死鎖的風險
- 優點:
- 邏輯過期
- 優點:
- 執行緒無需等待,性能較好
- 缺點:
- 不保證一致性
- 具有額外記憶體消耗
- 實作復雜
總結
以上就是對快取穿透、快取雪崩、快取擊穿問題的簡單介紹和解決辦法,更加具體的實作方法,正在整理中...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518924.html
標籤:Java
上一篇:day50-正則運算式01
下一篇:面向物件
