redis是使用C語言寫的。
面試問題列表:
Redis支持哪些數據類型?各適用于什么場景?
Redis為什么采用單線程模型?優勢與瓶頸是什么?
RDB和AOF持久化的區別?如何選擇?混合持久化如何實現?
Redis緩存穿透、雪崩、擊穿的解決方案?
如何用Redis實現分布式鎖?RedLock算法的核心思想?Redisson的看門狗機制原理?
Redis內存淘汰策略有哪些?
Redis的Pipeline和Lua腳本適用場景是什么?使用時需要注意什么?
Redis的過期鍵刪除策略?
如何利用Redis實現延遲隊列?
Redis的發布訂閱模型有哪些缺點?
Redis集群主從復制的流程是怎樣的?
Redis Sentinel如何實現高可用?
什么是腦裂問題?如何避免?
Redis Cluster的數據分片原理?為什么Redis Cluster不支持跨節點事務?Redis Cluster模式下如何實現跨節點事務?
集群如何擴容?數據遷移過程?
集群模式下,批量操作(如MSET)需要注意什么?
Codis與Redis Cluster的優缺點對比?Redis Cluster節點間通信協議?
Redis集群的Slot分配機制是什么?如何解決數據傾斜?
Redis的Hot Key自動發現與處理方案?
Redis大Key(Big Key)的優化策略?
Redis內存碎片率高的原因及解決方案?
Redis 6.0多線程模型如何工作?
如何設計一個二級緩存(Redis+Caffeine)架構?
Redis架構圖
# Redis五大架構模式詳解(圖示+場景)## 1. 單機模式
```asciidoc
+-----------------+
| Redis單機實例 |
| (全量數據存儲) |
+-----------------+
特點:
? 部署簡單
? 數據全內存操作
? 無高可用保障
? 容量受單機限制
適用場景:開發測試環境
2. 主從復制架構
+----------+ 寫請求| Master | <───────┐+----------+ ││ │▼ 數據同步 │
+----------+ +----------+ │
| Slave1 | | Slave2 | ←─┘ 讀請求
+----------+ +----------+
核心機制:
🔹 異步數據復制
🔹 讀寫分離(寫Master→讀Slave)
🔹 從節點可水平擴展
適用場景:讀多寫少業務
3. 哨兵模式(Sentinel)
+--------------+| Sentinel集群 |+------+-------+│監控
+--------------+--------------+
| Master節點 |
+--------------+--------------+│ 故障轉移
+--------------+--------------+
| 新Master節點(原Slave提升) |
+-----------------------------+
核心能力:
🚨 自動故障檢測與轉移
📊 集群狀態實時監控
🔀 客戶端自動發現新Master
適用場景:需要高可用保障的生產系統
4. Cluster集群模式
+--------+ +--------+ +--------+
| 分片1 | ←→ | 分片2 | ←→ | 分片3 |
| (16384槽)| | (16384槽)| | (16384槽)|
+---+-----+ +---+-----+ +---+-----+│ │ │▼ ▼ ▼
+---+-----+ +---+-----+ +---+-----+
| 副本節點 | | 副本節點 | | 副本節點 |
+--------+ +--------+ +--------+
核心特性:
🔧 數據自動分片(hash slot)
🌐 節點間Gossip協議通信
? 支持水平擴展
適用場景:大數據量、高并發場景
5. 代理模式(Codis/Twemproxy)
+-----------------+
| 代理層 |
| (路由/負載均衡) |
+-----+-----+-----+| | |
+-----+ +-----+ +-----+
| Redis組1 | Redis組2 | Redis組3
+---------+ +---------+ +---------+
優勢:
🛡? 客戶端無感知擴容
📡 支持多語言客戶端
🔀 靈活的路由策略
適用場景:已有Redis集群的平滑遷移
架構選型指南
場景需求 | 推薦架構 |
---|---|
開發/測試 | 單機模式 |
讀多寫少 | 主從復制 |
7*24高可用 | 哨兵模式 |
大數據量存儲 | Cluster集群 |
舊集群遷移 | 代理模式 |