Redis 技術講義:核心概念與資料結構
本單元介紹 Redis 作為高效能鍵值儲存系統的核心設計:以**鍵值對(Key-Value pairs)**為基礎,**鍵(Key)**作為存取識別,**值(Value)**為實際儲存的內容。
一、Redis 的三種部署方案
Redis 提供三種部署選項,以因應開發、測試與企業生產需求:
- Redis Community Edition(社群版):可安裝於本機,支援從原始碼編譯或以 Docker 容器執行,適合開發與測試環境。
- Redis Cloud:全託管雲端資料庫服務(DBaaS),提供免費版(Free)、基礎版(Essentials)與專業版(Pro),支援自動故障轉移(Auto failover)與多區域部署。
- Redis Software:企業級自管方案,可部署於地端或私有雲。
二、核心資料結構(Data Structures)
Redis 除支援簡單字串外,亦支援多種進階資料結構:
1. 字串(Strings)
- 特性:最基礎的資料結構,為**二進位安全(binary safe)**的位元組序列。
- 用途:除純文字與數值(可進行遞增/遞減運算)外,亦可儲存序列化 JSON、影像、影片或音訊檔案。
- 常用指令:
SET寫入、GET讀取。
2. 列表(Lists)
- 特性:有序字串集合,允許重複元素。
- 操作:支援自左端(Head)或右端(Tail)進行
PUSH(新增)與POP(移除並回傳)。 - 用途:實作佇列(Queue)、**堆疊(Stack)**或近期瀏覽紀錄等情境。
3. 集合(Sets)
- 特性:無序且不重複的字串集合,自動去重。
- 功能:支援集合運算,如聯集(Union)、交集(Intersection)、差集(Difference)。
- 用途:不重複訪客追蹤、資料去重。
4. 雜湊(Hashes)
- 特性:欄位(Field)與值(Value)的對應集合,可視為單筆紀錄的鍵值對集合。
- 用途:儲存**使用者工作階段(session data)**或物件紀錄(如產品資訊)。
5. 有序集合(Sorted Sets)
- 特性:類似集合,但每個成員關聯一個分數(Score),依分數排序。
- 用途:排行榜(Leaderboards)、推薦引擎等依分數查詢的場景。
6. JSON
- 特性:支援巢狀 JSON 文件儲存,並可透過 JSON Path 查詢或更新特定欄位,無須反序列化整個字串。
- 優勢:支援強型別(如 Boolean、Numbers)。
三、進階與特殊資料結構
1. 機率型資料結構(Probabilistic Data Structures)
以適度犧牲精確度換取極低記憶體與高吞吐:
- HyperLogLog:用於估計基數(Cardinality)(不重複項目數量),標準誤差約 0.81%。
- Bloom Filter(布隆過濾器):用於成員存在性測試。回傳「否」表示一定不存在;回傳「是」表示可能存在(有誤報機率)。
2. 串流(Streams)
- 特性:依時間順序記錄事件,每筆事件具唯一 ID。
- 用途:作為**事件匯流排(Event Bus)**或使用者行為串流紀錄。
3. 地理空間索引(Geospatial)
- 儲存成員經緯度,支援半徑查詢、距離計算與座標查詢。
4. 向量資料庫(Vector Database)
- 將資料(如圖片、PDF)轉為向量(embeddings),支援語意搜尋(semantic search)、生成式 AI 與推薦系統。
四、關鍵功能與管理
1. 鍵值過期(Key Expiration)
- 持久鍵(Persistent Keys):未設定 TTL,除非手動刪除否則持續存在。
- 揮發鍵(Volatile Keys):設定存活時間(TTL),到期自動刪除,為實作**快取(Caching)**的基礎。
2. 鍵名規範與命名空間(Key Spaces)
- 建議採用一致命名慣例,例如以冒號(
:)分隔層級前綴,如app:config:service。
3. 管理工具:Redis Insight
- **圖形化介面(GUI)**工具,用於視覺化資料、執行指令、分析效能瓶頸與管理資料結構。
五、主要應用場景(Use Cases)
- 企業級快取(Caching):利用次毫秒級回應降低後端資料庫負載,加速網頁與 API 回應。
- 搜尋與查詢(Search & Query):對 Hash、JSON 進行多維度查詢。
- 工作階段管理(Session Management):提供低延遲的分散式 session 存取,確保使用者在多台伺服器間切換時狀態一致(如購物車)。
- AI 與向量搜尋:儲存非結構化資料的向量表示,支援聊天機器人與推薦引擎。