Redis 8 種功能
Redis 8.2 Redis 7.x 8.2 在保留熟悉的 Redis 程式模型的同時,在 Streams、位圖、向量搜尋、群集度量方面提供了新的功能。
8.2 的主要高階改良如下:
- 在常見指令和工作負載中大幅提升效能。
- 降低記憶體使用量,尤其是 JSON 和關鍵元資料。
- 流、位操作和向量搜尋的新功能。
- 群集與複製的擴充度量與可觀察性。
從 Redis 7.2 升級到 Redis 8.2
有關如何從 Redis 7.2 升級到 Redis 8.2,請參閱升級到 新的主要版本。
Redis 模組
Redis 8 支援多個官方模組,可針對進階使用個案擴充其功能。 主要模組及其功能將在以下各節說明。
RedisBloom
RedisBloom 是 Redis 的官方模組,提供概率資料結構:Bloom Filter、Cuckoo Filter、Count-Min Sketch 和 Top-K。 這些結構以精確度換取極高的空間效率和速度,因此非常適合可接受已知誤差邊界的近似答案。
RedisBloom 的主要功能如下:
-
Bloom 過濾器:測試元素是否可以在一個集合中,具有可設定的假陽性概率,沒有假陰性。
-
Cuckoo 過濾器:類似 Bloom,但更自然地支援刪除。
-
Count-Min Sketch:以串流方式估計事件的頻率(例如,一個按鍵出現的次數)。
-
Top-K: 追蹤資料流中最常出現的項目。
RedisBloom 的典型用例如下:
-
重複和前見檢查 (URL、電子郵件和使用者 ID)。
-
偵測詐欺和防止濫用 (標示可疑模式,無須儲存完整的歷史記錄)。
-
使用 Count-Min Sketch 和 Top-K 的推薦系統和趨勢清單。
-
快取預先過濾器,避免不必要的後端查詢。
RedisBloom 範例
建立錯誤率為 1% 且容量為 1000 的 Bloom 過濾器:
> BF.RESERVE bikes:models 0.01 1000
OK
若要新增和檢查型號名稱:
> BF.ADD bikes:models "Smoky Mountain Striker"
(integer) 1
> BF.EXISTS bikes:models "Smoky Mountain Striker"
(integer) 1
如需詳細資訊,請參閱 RedisBloom 過濾器說明文件
RediSearch
RediSearch 是 Redis 的查詢和索引引擎,提供全文檢索、次要索引、聚合和向量相似性搜尋支援。 RediSearch 索引 Redis 資料 (例如哈希值和 JSON),並可透過評分、過濾和高亮顯示功能進行強大的查詢。
RediSearch 的主要功能如下:
-
全文檢索,含詞彙、音素和模糊匹配。
-
用於進階篩選器的數值、標籤和地理空間欄位。
-
用於分面、分析和排名的聚合引擎。
-
與向量場整合以進行語意和近似近鄰 (ANN) 搜尋。
RediSearch 的典型用例如下:
-
使用篩選器和切面進行產品目錄搜尋。
-
使用自由文字和結構化篩選器進行日誌和事件搜尋。
-
即時搜尋使用者內容 (推文、文章和文件)。
-
結合文字與向量搜尋,用於人工智慧驅動的應用程式。
RediSearch 範例
若要建立索引並新增一個文件:
> FT.CREATE idx ON HASH PREFIX 1 "doc:" SCHEMA title TEXT
OK
> HSET doc:1 title "hello redis"
(integer) 1
以文字搜尋:
> FT.SEARCH idx "hello"
1) (integer) 1
2) "doc:1"
3) 1) "title"
2) "hello redis"
如需詳細資訊,請參閱 RediSearch 文件。
RedisJSON
RedisJSON 為 Redis 引進原生 JSON 資料類型,可儲存、擷取及部分更新使用類似 JSONPath 語法的 JSON 文件。 RedisJSON 已針對快速存取子文件進行最佳化,並與其他 Redis 功能整合,例如 RediSearch。
RedisJSON 的主要功能如下:
-
將結構化的 JSON 文件儲存為一等級值。
-
擷取或更新特定路徑,無須載入整個文件。
-
支援陣列、物件和巢狀結構。
-
可選擇整合搜尋與查詢功能,以索引 JSON 欄位。
RedisJSON 的典型用例如下:
-
頻繁更新巢狀欄位的使用者設定檔和會話。
-
設定文件和功能標誌。
-
跨服務共用的產品目錄或內容物件。
-
基於 JSON 的 API,其中 Redis 充當高速備份儲存。
RedisJSON 範例:
儲存簡單的 JSON 文件:
127.0.0.1:6379> JSON.SET user:1 $ '{"name":"Alice","age":30}'
OK
要取得一個欄位:
127.0.0.1:6379> JSON.GET user:1 $.name
"\"Alice\""
如需詳細資訊,請參閱 RedisJSON 文件。
RedisTimeSeries
RedisTimeSeries 是一個模組,用於高效率的時間序列資料擷取、儲存、查詢、聚合和降取樣。 RedisTimeSeries 新增時間序列資料類型和相關指令,以建立隨時間變化的度量和事件模型。
RedisTimeSeries 的主要功能如下:
-
具有自動時間戳記的高吞吐量擷取。
-
在時間間隔內進行範圍查詢,並可使用 avg、min、max 及 sum 等彙總功能。
-
長期儲存的保留政策和壓縮規則。
-
標籤用於分組和查詢時間序列集。
RedisTimeSeries 的典型用例如下:
-
基礎架構和應用程式指標 (CPU、記憶體、延遲)。
-
IoT 感測器讀數和遙測。
-
財務勾選資料和市場指標。
-
業務 KPI 和營運儀表板。
RedisTimeSeries 範例
要建立時間序列並加入數值:
> TS.CREATE temp:room1
OK
> TS.ADD temp:room1 * 25.3
(integer) 1736846400000
要取得最新樣本:
> TS.GET temp:room1
1) (integer) 1736846400000
2) "25.3"
如需詳細資訊,請參閱 RedisTimeSeries 文件。
Redis 向量
Redis Vector 提供向量資料類型和向量相似性搜尋功能,支援嵌入式的近似近鄰 (ANN) 查詢。 這可讓語意搜尋和推薦等 AI 和 ML 工作負載直接在 Redis 內執行。
Redis Vector 的主要功能如下:
-
儲存高維向量 (例如 128-1536 維),並可設定 HNSW 及 flat 等索引類型。
-
K-nearest neighbor (KNN) 在向量場上使用距離指標(如余弦、內積或 L2 )進行搜尋。
-
結合向量相似性與結構欄位篩選條件的混合查詢。
-
與 RediSearch 或 Query Engine 整合,提供彈性的方案。
Redis Vector 的典型用例如下:
-
RAG 管道的語意文件搜尋。
-
使用使用者或項目嵌入的個人化推薦。
-
影像、音訊或代碼嵌入的相似性搜尋。
-
使用學習到的嵌入偵測詐騙和異常。
Redis 向量範例:
建立最小向量索引和一個文件(4-dim 範例):
> FT.CREATE vIdx ON HASH PREFIX 1 "vdoc:" \
SCHEMA embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 4 DISTANCE_METRIC COSINE
OK
> HSET vdoc:1 embedding "\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?"
(integer) 1
以 KNN 搜尋最近的向量:
> FT.SEARCH vIdx "(*=>[KNN 1 @embedding $v AS score])" \
PARAMS 2 v "\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?\x00\x00\x80?" SORTBY score DIALECT 2
1) (integer) 1
2) "vdoc:1"
3) 1) "embedding"
2) "\x00\x00\x80?..."
3) "score"
4) "0.000000"
如需詳細資訊,請參閱 向量搜尋概念說明文件。
Redis 7 至 Redis 8 的發佈說明和變更日誌
Redis 7 與 Redis 8 的功能差異如下:
-
增強的 Streams 指令 XDELEX 和 XACKDEL,用於原子訊息生命週期和更乾淨的消費者群組管理。
-
使用更豐富的 BITOP 運算子來分析大型位元集的延伸位元圖操作。
-
更成熟的向量搜尋功能與查詢引擎整合。
-
多項安全性與穩定性修正,這些修正是早期 7.x 版本所沒有的。
-
模組的配送與包裝整合於 8.x,因此可簡化部署。