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):
FT.CREATE productIndex ON JSON SCHEMA .name AS name TEXT .price AS price NUMERIC
- 传统 SCAN 缺陷 :
-
-
- 复杂查询(电商场景):
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
)。 - 配置加载:
loadmodule /path/redisbloom.so
- 从 Redis 下载中心 获取模块(如
-
- 验证:
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 版本号对齐,扩展模块更新更紧密。