Skip to main content

Redis 介紹

· 6 min read
Thomas
Web Developer

Redis(Remote Dictionary Server)把資料放在記憶體裡,用微秒級讀寫支援快取、計數與排行榜這類高併發場景。

Redis 是什麼​

Redis 是開源的、基於記憶體(In-memory)的鍵值對(Key-Value)資料庫。它通常被用作資料庫、快取(Cache)和訊息代理(Message Broker)。資料主要存在記憶體中,讀寫很快,是目前常見的 NoSQL 選擇之一。

核心特性​

極致效能​

Redis 將資料存在記憶體中,讀寫通常落在微秒級,適合對回應時間很敏感的應用。代價是資料量受實體記憶體限制,擴充成本比磁碟型資料庫高。

豐富的資料結構​

它不只是單純的字串鍵值,還內建多種結構,讓常見需求不必自己在應用層組裝。

類型特性常見用途
String(字串)文字、數字或二進位資料快取、計數器
List(列表)依插入順序排列的字串列表(Linked List)佇列(Queue)
Set(集合)無序、元素唯一去重、標籤
Hash(雜湊)一個 key 底下的欄位集合存物件
Sorted Set(ZSet)每個元素帶一個分數(Score)並依分數排序排行榜
進階類型Bitmap、HyperLogLog、Geospatial位元統計、基數估計、地理位置

持久化(Persistence)​

主資料在記憶體,但 Redis 可以把資料寫到硬碟,避免程序重啟後全部消失。兩種機制可以單獨開,也可以一起用。

RDB(Redis Database Backup)AOF(Append Only File)
做法定期把記憶體做成快照(Snapshot)把每次寫入追加進日誌
恢復直接載入快照,通常較快重放日誌,較接近當機前的狀態
取捨兩次快照之間的寫入可能丟失檔案較大,重放較久

當機時會不會丟資料,取決於採用哪一種持久化、以及寫入磁碟的頻率。

單執行緒模型​

核心的網路 I/O 與鍵值讀寫由一個主執行緒處理。少了多執行緒的上下文切換(Context Switching)和鎖競爭,命令執行順序也比較好推理。

Redis 6.0 起可以用多執行緒處理網路 I/O,執行命令仍然是單執行緒。

高可用與分散式​

  • Replication(主從複製):Master-Replica 架構,用來做讀寫分離與備份。
  • Sentinel(哨兵):監控 Master,Master 失效時自動故障轉移(Failover)。
  • Cluster(叢集):自動分片(Sharding),把資料攤到多個節點做水平擴展。

常見應用場景​

  • 快取(Caching):擋在 MySQL 這類資料庫前面,減輕讀取壓力。
  • Session 儲存:多個服務實例共用同一份登入狀態。
  • 排行榜:用 Sorted Set 依分數即時排序。
  • 計數器:用原子指令 INCR 累加播放量、按讚數。
  • 訊息隊列:用 List,或 Pub/Sub(發布/訂閱)做簡單的非同步傳遞。
  • 分散式鎖:多個服務實例協調對同一份資源的存取。

基本指令範例​

以下是 redis-cli 裡最常用的幾類操作。字串用來存值與計數,List 的左右推入可以當成佇列,Hash 則用來存一筆物件的多個欄位。

# 字串操作
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 等,很多模式不用另接一套中介軟體。
  • 客戶端齊全:主流語言都有 client,文件也完整。

缺點

  • 記憶體受限:資料量受實體記憶體大小限制,成本較高。
  • 持久化有窗口:當機時仍可能丟掉最後一段寫入,丟多少取決於 RDB/AOF 的設定。

GUI​

本機除錯時可以用圖形客戶端看 key 與結構。Another Redis Desktop Manager 是其中一個選擇。

總結​

Redis 用記憶體換速度,並用 String、List、Hash、Sorted Set 這些結構覆蓋快取、計數、佇列與排行榜。要上線時,再依資料能不能丟,決定 RDB、AOF,以及要不要加 Sentinel 或 Cluster。