文章目錄
- 前言
- 一、什么是 Redis?
- 二、Redis 使用場景
- 1. 緩存熱點數據
- 2. 消息隊列
- 3. 分布式鎖
- 4. 限流與防刷
- 5. 計數器、排行榜
- 三、緩存三大問題:雪崩 / 穿透 / 擊穿
- 1. ?? 緩存雪崩(Cache Avalanche)
- 2. 🔍 緩存穿透(Cache Penetration)
- 3. ? 緩存擊穿(Cache Breakdown)
- 四、Redisson 分布式鎖實踐(必考面試題)
- 五、Redis 哨兵機制與高可用方案
- 什么是哨兵機制(Sentinel)?
- 哨兵功能:
- 總結
前言
在現代高并發、高性能的互聯網系統中,緩存幾乎是標配,而 Redis 無疑是最廣泛使用的緩存中間件之一。它不僅性能極高,而且提供了豐富的數據結構與強大的擴展能力,成為微服務架構、消息系統、分布式鎖等場景的核心組件。
然而,很多人對 Redis 的認知仍停留在“用來緩存數據”這一層面。實際上,在實際項目中,緩存雪崩、緩存穿透、緩存擊穿等問題頻頻出現,如果沒有處理好,不但不能提升性能,反而可能壓垮整個系統。
此外,隨著分布式系統的普及,分布式鎖的引入與實現也成為常見需求。而 Redisson 作為 Redis 官方推薦的 Java 客戶端,提供了豐富且易用的分布式工具集,是解決這些問題的優秀選擇。
本篇博客將從以下幾個方面全面介紹 Redis 的使用與實戰問題:
- Redis 是什么,有哪些核心特性?
- Redis 常見的使用場景有哪些?
- 如何理解并解決緩存雪崩、穿透、擊穿?
- 分布式鎖如何實現?Redisson 如何優雅地完成?
- 哨兵機制
無論你是剛接觸 Redis 的初學者,還是在項目中踩過坑的老手,相信這篇文章都能幫你更深入地理解 Redis,并在實際工作中少走一些彎路。
一、什么是 Redis?
Redis(Remote Dictionary Server)是一個開源的基于內存的高性能鍵值對NoSql數據庫。相比傳統數據庫,Redis 的優勢在于“快”,在于“結構豐富”,在于“高可用”。
? 核心特性:
- 內存存儲,速度極快(100,000+ QPS)
- 數據結構豐富:支持 String、List、Set、Hash、ZSet、Stream、HyperLogLog 等
- 持久化:支持 RDB 快照和 AOF 日志
- 高可用架構支持:主從復制、哨兵、集群
- 原子操作:天然支持并發安全
二、Redis 使用場景
1. 緩存熱點數據
- 用戶信息、商品詳情、排行榜、配置中心等
- 可顯著減輕數據庫壓力
2. 消息隊列
- 使用 List、Stream 實現生產者消費者模型
- 更輕量級的 MQ 替代方案(如訂單異步處理)
3. 分布式鎖
- 控制并發執行、任務冪等等場景
- 使用 Redisson、SETNX 等方案實現
4. 限流與防刷
- 基于 INCR、EXPIRE 實現滑動窗口限流
- 搭配 Lua 腳本實現原子性操作
5. 計數器、排行榜
- 使用 INCR、ZSet 輕松實現點贊、瀏覽、Top N 等功能
三、緩存三大問題:雪崩 / 穿透 / 擊穿
1. ?? 緩存雪崩(Cache Avalanche)
**定義:**大量緩存同一時間失效,導致請求直接打到數據庫,造成數據庫壓力驟增甚至宕機。
解決方案:
- 設置緩存過期時間時加入 隨機因子,避免集中失效
- 設置重要數據 永不過期,后臺定時刷新
- 使用熔斷、限流等 降級機制
2. 🔍 緩存穿透(Cache Penetration)
定義:請求的是數據庫和緩存中都不存在的 key(如非法用戶 ID),每次都打到數據庫。
解決方案:
- 緩存空值:對不存在的結果也緩存一段時間
- 布隆過濾器:使用布隆過濾器攔截非法訪問 ID
3. ? 緩存擊穿(Cache Breakdown)
定義:某個熱點 key 失效,大量請求在這一瞬間打入數據庫。
解決方案:
- 為熱點數據設置永不過期或延遲更新
- 加分布式鎖,防止多個線程同時回源查詢數據庫
四、Redisson 分布式鎖實踐(必考面試題)
Redisson,一個功能完善、健壯的 Java 分布式鎖框架。
// 創建 Redisson 客戶端
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);// 獲取鎖
RLock lock = redisson.getLock("my-lock");try {// 加鎖:默認 30s 自動續期lock.lock();// 業務邏輯System.out.println("執行業務邏輯...");} finally {lock.unlock();
}
鎖類型 | 說明 |
---|---|
RLock | 可重入鎖(默認) |
RReadWriteLock | 支持讀寫分離 |
RSemaphore | 限流用(如限購場景) |
RCountDownLatch | 多線程協作任務同步 |
五、Redis 哨兵機制與高可用方案
什么是哨兵機制(Sentinel)?
當主節點宕機時,哨兵會自動將從節點切換為主節點,并通知客戶端更新連接地址,實現高可用部署。
哨兵功能:
- 監控:判斷主節點是否故障
- 自動故障轉移:主掛了,選出新的主
- 通知客戶端更新地址
- 集群健壯性增強
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
總結
Redis 是現代后端開發中不可或缺的一環,不僅僅是緩存工具,更是數據庫、消息系統、分布式控制等場景的萬能膠水。