Redis
是什麼
設想一下:把此刻需要的便籤放在面前的桌上,而不是每次都走到檔案櫃去拿——快得多,但一斷電桌面就清空了。Redis 就像那張桌子:它把資料放在快速的工作記憶體(RAM,隨機存取儲存器)裡,而不是磁碟上,所以讀寫極快。需要時它也可以儲存到磁碟。它本質上是一個鍵值儲存,但支援豐富的資料結構,如列表、集合、有序集合、雜湊和流。它最常作為快取、會話儲存、佇列或限流器,與主資料庫配合使用。
優勢
- 得益於記憶體執行,延遲低至亞毫秒級。
- 結構多樣:字串、雜湊、列表、集合、有序集合、流。
- 內建 TTL(存活時間)/過期機制——每個條目可在設定時間後自動刪除自己——非常適合快取和會話。
- 原子操作和 Lua 指令碼可用於實現安全的計數器和鎖。
- 釋出/訂閱和流支援訊息傳遞與事件管道。
權衡取捨
- 資料受可用記憶體限制;大數據整合本高昂。
- 持久化是可選的,崩潰時可能丟失最近的寫入。
- 不能替代持久化的關係型儲存。
- 叢集為分片和故障轉移帶來了運維複雜度。
何時使用
使用 Redis 來快取代價高昂的查詢結果、儲存會話、實現限流、管理任務佇列、構建排行榜或傳遞即時訊息。務必將其與一個持有真實資料來源的持久化資料庫搭配使用。
與 vibe coding 的契合度
在指揮 AI 時,要明確指出 Redis 是快取或輔助儲存,而非系統的記錄源。因此它應當始終為快取條目設定 TTL。它還應當設計清晰的鍵命名方案(例如 user:123:profile)。要求 AI 使用 INCR 這樣的原子命令來做計數器、用 SET ... NX EX 來做鎖,而不是使用可能產生競態的讀-改-寫序列。一個好建議:讓 AI 使用 cache-aside 模式。簡單說就是:先查快取;如果沒有,就從資料庫取;然後把它存進快取,供下次使用。還要讓 AI 說明它的失效策略——也就是如何清除陳舊、過時的資料——以免不再有效的資料殘留。
# 快取一個值,1 小時後過期
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600
# 原子的限流計數器
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60
# 分散式鎖:僅當不存在時設定,自動過期
SET lock:job:42 "owner-a" NX EX 30
# 用有序集合做排行榜
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES