Skip to main content

Redis 介紹

Redis (Remote Dictionary Server) 是一個開源的、基於記憶體 (In-memory) 的鍵值對 (Key-Value) 資料庫。它通常被用作資料庫、快取 (Cache) 和訊息代理 (Message Broker)。由於其資料存儲在記憶體中,Redis 擁有極高的讀寫速度,是目前最流行的 NoSQL 資料庫之一。

核心特性

  1. 極致效能 (In-memory)

    • Redis 將所有資料存儲在記憶體中,這使得讀寫操作非常快速(通常是微秒級別)。
    • 適用於對回應時間要求極高的應用場景。
  2. 豐富的資料結構

    • 不同於簡單的 Key-Value store,Redis 支援多種複雜的資料結構,如:
      • String (字串): 最基本的類型,可存儲文字、數字或二進位資料。
      • List (列表): 簡單的字串列表,按插入順序排序 (Linked List),適用於佇列 (Queue)。
      • Set (集合): 無序且唯一的字串集合。
      • Hash (雜湊): 鍵值對集合,適合存儲物件。
      • Sorted Set (有序集合 / ZSet): 類似 Set,但每個元素都會關聯一個分數 (Score),用於排序,適用於排行榜。
      • 進階類型: Bitmap, HyperLogLog, Geospatial (地理位置)。
  3. 持久化 (Persistence)

    • 雖然主要運行在記憶體中,Redis 提供了將資料保存到硬碟的機制,以防重啟後資料丟失:
      • RDB (Redis Database Backup): 定期快照 (Snapshot)。
      • AOF (Append Only File): 記錄每次寫入操作的日誌。
  4. 單執行緒模型 (Single-threaded Interface)

    • Redis 的核心網路 I/O 和鍵值對讀寫是由一個主執行緒處理的。這避免了多執行緒的上下文切換 (Context Switching) 和鎖 (Lock) 的競爭問題,從而保證了高效能。
    • 註:Redis 6.0 引入了多執行緒來處理網路 I/O,但執行命令仍然是單執行緒的。
  5. 高可用與分散式

    • 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 不僅能幫助你大幅提升應用程式的效能,還能解決許多複雜的架構挑戰。

GUI app

https://goanother.com/cn/