Redis Stack 擴展功能筆記(基于 Redis 7)
一、Redis Stack 概述
- 定位:Redis OSS + 擴展模塊(JSON、搜索、布隆過濾器等),提供高級數據處理能力。
- 核心模塊:
RedisJSON
:原生 JSON 支持,支持路徑查詢和原子操作。Search and Query
:全文搜索(類似 ElasticSearch),支持復雜條件過濾。Bloom Filter
:高效判斷元素是否存在(節省空間,有誤判率)。Cuckoo Filter
:支持刪除操作的布隆過濾器改進版。
二、核心擴展功能詳解
- Redis JSON
- 功能:
- 存儲/查詢 JSON 數據:
JSON.SET user $ '{"name":"loulan"}'
- 路徑操作:
JSON.GET user $.name
,JSON.NUMINCRBY user $.age 2
- 數組操作:
JSON.ARRAPPEND user $.hobbies '"swimming"'
- 存儲/查詢 JSON 數據:
- 優勢:
- 二進制存儲(高效省內存),性能媲美 MongoDB。
- 與 Redis 生態(TTL、事務)無縫集成。
- 功能:
- Search and Query
- 傳統 SCAN 缺陷:
- 僅支持簡單 Key 過濾:
SCAN 0 MATCH k* COUNT 20
(阻塞風險)。
- 僅支持簡單 Key 過濾:
- RedisSearch 方案:
- 創建索引(支持 JSON/HASH):
- 傳統 SCAN 缺陷:
FT.CREATE productIndex ON JSON SCHEMA $.name AS name TEXT $.price AS price NUMERIC
-
-
- 復雜查詢(電商場景):
-
FT.SEARCH productIndex "@name:HUAMET @price:[1000 5000]" RETURN 2 id name
- Bloom Filter
- 原理:位數組 + 多哈希函數(空間高效,存在誤判)。
- 使用場景:緩存穿透防護(快速攔截無效請求)。
- Redis 操作:
BF.RESERVE bf 0.01 1000 # 創建(容錯率1%,容量1000)
BF.ADD bf A # 添加元素
BF.EXISTS bf a # 檢查(返回1可能存在,0一定不存在)
- Cuckoo Filter
- 改進點:支持刪除(
CF.DEL
),空間利用率更高。 - 參數:桶大小(
BUCKETSIZE
)影響誤判率和性能(默認 2)。 - 創建:
- 改進點:支持刪除(
CF.RESERVE cf 1000 BUCKETSIZE 2 MAXITERATIONS 20
三、擴展模塊集成
- 手動安裝:(Redis8不用安裝,默認集成,或者用redis-stack:v7.4.0-v5的Docker鏡像也集成了stack)
- 從?Redis 下載中心?獲取模塊(如?
redisbloom.so
)。 - 配置加載:
- 從?Redis 下載中心?獲取模塊(如?
loadmodule /path/redisbloom.so
-
- 驗證:
MODULE LIST
- 驗證:
- Java 客戶端調用:
- 通過 Lua 腳本執行擴展命令(需處理模塊未加載異常):
// 創建布隆過濾器
String script = "return redis.call('BF.RESERVE', KEYS[1], '0.01','1000')";
redisTemplate.execute(new DefaultRedisScript<>(script, String.class), keys);
四、Redis 8 新特性補充
基于 Redis 8 與 Redis Stack 的演進:
- 原生 JSON 性能優化:
- 支持完整?JSONPath 語法,增強查詢靈活性。
- 向量搜索(Vector Search):
- 新增?
RedisVL
?模塊,支持 AI 向量相似度搜索(集成 Hugging Face 模型)。
- 新增?
- 客戶端緩存改進:
- 服務端輔助的客戶端緩存(Tracking),減少網絡開銷。
- 持久化增強:
- 多線程 AOF 重寫,提升大數據集持久化效率。
注意:Redis Stack 從 8 開始與 Redis OSS 版本號對齊,擴展模塊更新更緊密。
參考:Redis Stack 官方文檔?|?Redis 8 Release Notes