Redis 介紹
Redis (Remote Dictionary Server) 是一個開源的、基於記憶體 (In-memory) 的鍵值對 (Key-Value) 資料庫。它通常被用作資料庫、快取 (Cache) 和訊息代理 (Message Broker)。由於其資料存儲在記憶體中,Redis 擁有極高的讀寫速度,是目前最流行的 NoSQL 資料庫之一。
核心特性
-
極致效能 (In-memory)
- Redis 將所有資料存儲在記憶體中,這使得讀寫操作非常快速(通常是微秒級別)。
- 適用於對回應時間要求極高的應用場景。
-
豐富的資料結構
- 不同於簡單的 Key-Value store,Redis 支援多種複雜的資料結構,如:
- String (字串): 最基本的類型,可存儲文字、數字或二進位資料。
- List (列表): 簡單的字串列表,按插入順序排序 (Linked List),適用於佇列 (Queue)。
- Set (集合): 無序且唯一的字串集合。
- Hash (雜湊): 鍵值對集合,適合存儲物件。
- Sorted Set (有序集合 / ZSet): 類似 Set,但每個元素都會關聯一個分數 (Score),用於排序,適用於排行榜。
- 進階類型: Bitmap, HyperLogLog, Geospatial (地理位置)。
- 不同於簡單的 Key-Value store,Redis 支援多種複雜的資料結構,如:
-
持久化 (Persistence)
- 雖然主要運行在記憶體中,Redis 提供了將資料保存到硬碟的機制,以防重啟後資料丟失:
- RDB (Redis Database Backup): 定期快照 (Snapshot)。
- AOF (Append Only File): 記錄每次寫入操作的日誌。
- 雖然主要運行在記憶體中,Redis 提供了將資料保存到硬碟的機制,以防重啟後資料丟失:
-
單執行緒模型 (Single-threaded Interface)
- Redis 的核心網路 I/O 和鍵值對讀寫是由一個主執行緒處理的。這避免了多執行緒的上下文切換 (Context Switching) 和鎖 (Lock) 的競爭問題,從而保證了高效能。
- 註:Redis 6.0 引入了多執行緒來處理網路 I/O,但執行命令仍然是單執行緒的。
-
高可用與分散式
- Replication (主從複製): 支援 Master-Slave 架構,實現讀寫分離與備份。
- Sentinel (哨兵): 監控 Master 狀態,自動故障轉移 (Failover)。
- Cluster (叢集): 提供自動分片 (Sharding) 功能,實現水平擴展。
常見應用場景 (Use Cases)
- 快取 (Caching): 最常見的用途。減輕後端資料庫 (如 MySQL) 的壓力,加速頁面載入。
- Session 儲存: 在分 散式系統中,統一存儲使用者的 Session 資訊。
- 排行榜 (Leaderboards): 利用 Sorted Set 輕鬆實現實時排名功能。
- 計數器 (Counters): 利用原子性的
INCR命令進行高併發計數(如影片播放量、點讚數)。 - 訊息隊列 (Message Queue): 利用 List 或 Pub/Sub (發布/訂閱) 模式實現簡單的非同步處理。
- 分散式鎖 (Distributed Lock): 在多個服務實例間協調對共享資源的存取。
基本指令範例
# 字串操作
SET name "Antigravity"
GET name
# 輸出: "Antigravity"
# 計數
SET visits 10
INCR visits
# 輸出: 11
# 列表操作 (作為 Queue)
LPUSH myqueue "task1"
LPUSH myqueue "task2"
RPOP myqueue
# 輸出: "task1"
# Hash 操作 (儲存物件)
HSET user:1001 name "John" age 30
HGETALL user:1001
# 輸出: name "John" age 30
優缺點總結
優點
- 速度快: 記憶體操作,延遲極低。
- 功能豐富: 支援多種資料結構和功能 (Lua script, Transaction 等)。
- 社群活躍: 有豐富的客戶端庫 (Clients) 和文檔。
缺點
- 記憶體受限: 資料量受限於實體記憶體大小,成本較高。
- 資料一致性: 在極端情況下(如宕機),可能會丟失部分資料(取決於持久化策略)。
結論
Redis 是一個強大且靈活的工具,是現代後端架構中不可或缺的組件。掌握 Redis 不僅能幫助你大幅提升應用程式的效能,還能解決許多複雜的架構挑戰。