Redis 是一套開源的記憶體(in-memory)鍵值資料庫:所有資料存在 RAM 中,讀寫延遲僅約微秒等級,最常用於快取、排行榜、佇列、Session 與即時計數等場景。最新穩定版 8.10.1(2026 年 8 月釋出)把過去要另外裝模組的 JSON、全文搜尋、時間序列、機率型資料結構與 Vector Set 向量搜尋全部內建,並新增 AGPLv3 開源授權選項與 LLM 語意快取(LangCache)——2026 年的 Redis 已從「快取神器」進化成一套 AI 應用也能直接使用的通用資料平台。
如果你在本站看過 SQLite 完整教學、PostgreSQL 完整教學 與 DuckDB 完整教學,會發現這四兄弟其實各司其職:SQLite 是嵌入式單機資料庫、PostgreSQL 是全能關聯式主力、DuckDB 專攻分析,而 Redis 的角色是「速度」——把最常被讀取的資料放進記憶體,讓你的 API 從幾十毫秒降到 1 毫秒以下。本文從零開始,帶你把 Redis 的原理與實戰一次學完。
先搞懂定位:Redis 跟其他資料庫哪裡不同?
| 特性 | Redis | PostgreSQL | SQLite | DuckDB |
|---|---|---|---|---|
| 儲存位置 | 記憶體(可持久化) | 磁碟 | 磁碟/檔案 | 磁碟/記憶體 |
| 讀寫延遲 | 微秒級(<1ms) | 毫秒級 | 毫秒級 | 毫秒級(分析用) |
| 資料模型 | 鍵值 + 多種資料結構 | 關聯式(SQL) | 關聯式(SQL) | 關聯式(SQL) |
| 最佳用途 | 快取、佇列、計數、排行榜 | 主要業務資料庫 | 單機應用、邊緣裝置 | 大資料分析 |
| 持久化 | RDB/AOF 可選 | 內建(WAL) | 內建 | 內建 |
一句話記法:SQLite/PostgreSQL 負責「記得」,Redis 負責「快」。真正的系統通常是 PostgreSQL 當主力、Redis 擋在最前面當快取層。
安裝:Docker 一條指令搞定
不熟悉 Docker 可以先看本站的 Docker 完整教學 2026。2026 年官方映像檔只有一個 redis(Redis Stack 已正式退役),直接跑:
docker run -d --name my-redis -p 6379:6379 redis:8
# 驗證
docker exec -it my-redis redis-cli ping
# 回傳 PONG 即成功
用 Docker Compose 管理更乾淨(順便開持久化與密碼):
services:
redis:
image: redis:8
container_name: my-redis
ports:
- "6379:6379"
command: ["redis-server", "--requirepass", "你的強密碼", "--appendonly", "yes"]
volumes:
- redis-data:/data
restart: unless-stopped
volumes:
redis-data:
核心觀念:7 大資料型態一次看懂
Redis 最迷人之處,是用一組精心設計的資料結構解決不同問題——不是只會存字串:
| 型態 | 特性 | 常見情境 | 指令範例 |
|---|---|---|---|
| String | 字串/數值 | 快取、計數器、Session token | SET user:100 "Alice"、GET user:100、INCR page_views |
| Hash | 欄位-值對映 | 物件、使用者資料、Session | HSET user:100 name "Alice" age 30、HGET user:100 name |
| List | 雙向串列 | 任務佇列、最新消息 | LPUSH queue job1、RPOP queue、LRANGE logs 0 9 |
| Set | 無序不重複集合 | 標籤、去重、共同好友 | SADD tags redis db、SISMEMBER tags redis |
| ZSet | 帶分數的有序集合 | 排行榜、延遲佇列 | ZADD leaderboard 100 player1、ZRANGE leaderboard 0 9 WITHSCORES |
| Stream | 追加式事件日誌 | 事件串流、訊息佇列(進階) | XADD events * type login user 42 |
| JSON(Redis 8 內建) | 原生 JSON 文件 | 巢狀結構、購物車 | JSON.SET cart:1 $ '{"items":[]}'、JSON.GET cart:1 $.items |
💡 Redis 8 新語法:
HSETEX key field value EX 60/HGETEX讓 Hash 的單一欄位也能獨立設 TTL,存 Session 超好用(以前只能整個 key 一起過期)。
三大必學實戰:快取、限流、排行榜
實戰 1:Cache-Aside 快取模式(後端標準配備)
快取最經典的「旁路(Cache-Aside)」流程:讀取時先查 Redis,沒命中才查資料庫並回填;更新時直接刪快取,讓下次讀取重新載入,避免髒資料。
sequenceDiagram
participant App as 應用程式
participant R as Redis
participant DB as PostgreSQL
App->>R: GET user:100
alt 命中 (Cache Hit)
R-->>App: 回傳快取資料
else 未命中 (Cache Miss)
R-->>App: nil
App->>DB: SELECT * FROM users WHERE id=100
DB-->>App: 回傳資料
App->>R: SET user:100 資料 EX 300
App-->>User: 回傳(含快取延遲節省)
end
Note over App,R: 更新時:DEL user:100(失效刪除)Python + redis-py 只要幾行:
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
def get_user(user_id: int):
key = f"user:{user_id}"
cached = r.get(key)
if cached:
return cached # 快取命中,直接回
data = query_db(user_id) # 未命中 → 查 PostgreSQL
r.set(key, data, ex=300) # 回填,5 分鐘後自動過期
return data
實戰 2:API 限流(Rate Limiting)
分散式架構下,用 Redis 的 INCR + EXPIRE 做固定時間窗限流,比單機記憶體計數可靠得多:
INCR rate:api:使用者ID # 請求數 +1
EXPIRE rate:api:使用者ID 60 # 60 秒後重置
超過門檻就回 HTTP 429。進階的滑動視窗、Token Bucket 也能用 Lua script 在 Redis 內原子執行——這是 nginx 以外的輕量替代方案,也是 GraphQL API 防爆量的標配。
實戰 3:排行榜與計數器
ZSet 天生就是排行榜:ZINCRBY leaderboard 10 player1 加積分,ZREVRANGE leaderboard 0 9 WITHSCORES 抓前十名;配合 INCR 做點讚數、觀看數,再把資料定期寫回 PostgreSQL 持久化——這是台灣電商與手遊後端的常見組合拳。
Redis 8.x:為什麼 2026 年值得重新認識它
Redis 8.0 於 2025 年 5 月正式 GA,是近年最大的一次架構升級,8.10.1(2026-08-17 釋出)是目前的穩定版。以下是四個關鍵改變:
- One Redis:模組全部內建。過去要另外裝的 RediSearch(搜尋)、RedisJSON、RedisTimeSeries、RedisBloom 全部併入核心,還多了五種機率型資料結構(Bloom Filter、Cuckoo Filter、Count-Min Sketch、Top-K、t-digest)。舊的 Redis Stack 發行版已於 2025 年 12 月停止維護,2026 年安裝只需
redis:8一個映像檔。 - Vector Set 向量集(原生向量搜尋):全新的資料型態,用 HNSW 圖做相似度搜尋,細節見下一節——這是 Redis 打進 AI 應用市場的關鍵武器。
- I/O Threading:多執行緒處理網路 I/O,搭配 pipeline 單節點吞吐量可達 Redis 7.2 的 5 倍以上(官方測試最高約 350 萬 ops/sec),Hash 與 ZSet 的記憶體占用也分別減少最高 16.7% 與 30.5%。
- 授權轉變:AGPLv3 回歸。Redis 從 8.0 起提供 RSALv2 / SSPLv1 / AGPLv3 三選一,其中 AGPLv3 是 OSI 認證的開源授權——2024 年授權爭議後,Redis 重新成為「可自由使用的開源軟體」(企業若需完全寬鬆授權則選 Valkey,見下文比較)。
8.6 之後還陸續加入 volatile-lrm / allkeys-lrm 淘汰策略(Least Recently Modified:只認寫入時間,很適合「會被一直讀取但很少更新」的 AI 快取)、HOTKEYS 熱點 key 診斷指令,以及 Stream 的冪等生產保證。
AI 時代應用:Redis 向量搜尋 + LLM 語意快取
用 Vector Set 做相似度搜尋
向量資料庫百家爭鳴,但如果你只是要「存幾萬筆 embedding、做相似度比對」,Redis 8 內建的 Vector Set 可能就夠了——不必再引進一整個新系統。用法很直覺:
# 1. 存入向量(VADD 會自動建立向量集;Q8 量化為預設)
VADD movies VALUES 3 0.5 1.2 0.75 "inception" SETATTR '{"year":2010,"genre":"scifi"}'
VADD movies VALUES 3 0.9 1.5 0.66 "interstellar" SETATTR '{"year":2014,"genre":"scifi"}'
VADD movies VALUES 3 0.4 1.9 0.92 "titanic" SETATTR '{"year":1997,"genre":"romance"}'
# 2. 查詢最相似的 3 筆(以既有元素為 query)
VSIM movies ELE "inception" WITHSCORES COUNT 3
# 3. 混合過濾:只找 2000 年後的相似電影
VSIM movies ELE "inception" WITHSCORES COUNT 3 FILTER '.year > 2000'
# 4. 維運指令
VCARD movies # 元素總數
VINFO movies # 向量集資訊(維度、量化方式)
VREM movies "titanic"
VSIM 也支援直接丟 query 向量(KNN):VSIM movies VALUES 3 0.5 1.2 0.75 ... WITHSCORES WITHATTRIBS COUNT 5。詳細語法可參考官方 Vector Sets 教學。RAG 應用的標準架構是:PostgreSQL + pgvector 存全部文件(詳見本站 PostgreSQL 教學的 pgvector 章節),Redis Vector Set 負責最熱門語料的極速檢索。
語意快取:讓 LLM 少燒一點錢
傳統快取要「問題一模一樣」才命中;**語意快取(Semantic Cache)**則是把問題轉成向量、找到「意思相近」的舊答案直接回傳,省下重複的 LLM API 呼叫。Redis 官方推出 LangCache 支援這個模式:
flowchart LR
A[使用者提問] --> B{Redis LangCache<br/>向量相似度搜尋}
B -->|相似度 ≥ 門檻<br/>例如 0.65| C[直接回傳歷史 LLM 答案<br/>0 成本 0 延遲]
B -->|未命中| D[呼叫 LLM API<br/>產生新答案]
D --> E[答案存入 LangCache]LangCache 以環境變數控制,門檻範例為 LANGCACHE_CACHE_THRESHOLD=0.65(相似度超過 0.65 就視為同一問題),並用 Redis Hash 記錄命中/未命中統計。對客服機器人、RAG 問答這類「同樣的問題被問幾百遍」的場景,語意快取常能砍掉 30–60% 的 LLM 成本。想進一步省錢,也可以參考本站的 LLM 模型路由教學——路由管「該用哪個模型」,快取管「能不能根本不用模型」,兩者互補。
Redis vs Valkey vs Memcached:2026 年怎麼選?
2024 年的 Redis 授權風波催生了 Valkey 分支,2026 年兩邊都已站穩,選擇變得很實際:
| 比較 | Redis 8.10 | Valkey 9.x | Memcached |
|---|---|---|---|
| 授權 | AGPLv3 / RSALv2 / SSPLv1 三選一 | BSD-3-Clause(最寬鬆) | BSD-3-Clause |
| 維護者 | Redis Ltd. | Linux 基金會 + 社群 | 社群 |
| 進階型態 | JSON、Vector Set、TimeSeries、Bloom 全內建 | JSON/Search 為模組 | 僅簡單鍵值 |
| 向量搜尋 | ✅ 原生 Vector Set(8.0+) | 需模組(如 ValkeySearch) | ❌ |
| 語意快取 | ✅ LangCache 官方支援 | 社群方案 | ❌ |
| 適合誰 | 想用最新功能與完整 AI 生態 | 授權政策「只能 BSD」的企業 | 極簡純快取、不想學新東西 |
結論:一般開發者與新專案直接選 Redis 8 就對了——功能最完整、官方文件與工具(Redis Insight)最齊。只有在公司授權政策嚴格要求「零 copyleft」時才需要遷移到 Valkey;Memcached 則只剩「只需要 get/set 的極簡快取」這種場景值得考慮。
安全設定別偷懶:3 分鐘防爆
Redis 預設無密碼且綁定所有介面,直接暴露在公網 = 等著被加密勒索。上線前至少做到:
# redis.conf
bind 127.0.0.1 # 只綁本機(或用內網 IP)
protected-mode yes # 保護模式(預設)
maxmemory 512mb # 設記憶體上限
maxmemory-policy allkeys-lru # AI 語意快取可改 allkeys-lrm
appendonly yes # 開啟 AOF 持久化
多使用者情境改用 ACL 取代萬用密碼:
ACL SETUSER app on >強密碼 ~cache:* +@read +@write # 只能存取 cache:* 的 key
總結
Redis 的學習曲線比 SQLite 平坦、比 PostgreSQL 短,投資報酬率卻極高:它是 2026 年幾乎所有大型 Web 服務的「第一道防線」,也是 AI 應用語意快取與向量檢索的輕量解。照著本篇走完 Docker 安裝 → 資料型態 → 快取/限流實戰 → Vector Set → 安全設定,你的 side project 或公司服務的效能與成本就已經贏過大半對手了。下一步想深入,官方文件(redis.io/docs)與 Redis 8.0 What’s New 是最佳起點。
延伸閱讀
- PostgreSQL 完整教學 2026:關聯式主力資料庫(含 pgvector 向量搜尋)
- SQLite 完整教學 2026:地表最普及的嵌入式資料庫
- DuckDB 完整教學 2026:資料分析神器(與 Redis 定位互補)
- LLM 模型路由完整教學 2026:OpenRouter、LiteLLM、RouteLLM 比較與實作
