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,因此可簡化部署。