Redis 8 个特点
Redis 8.2 Redis 7.x 通过提供更高的性能、更强的内存效率、更强的可观察性和更好的开发人员体验,8.2 在保留熟悉的 Redis 编程模型的同时,提供了流媒体、位图、向量搜索和集群度量方面的新功能。
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 的主要功能如下:
-
布鲁姆过滤器:测试元素是否在集合中,假阳性概率可配置,无假阴性。
-
Cuckoo Filter:与 Bloom 类似,但更自然地支持删除。
-
计数-最小草图:以流式方式估算事件的频率(例如,一个键出现的次数)。
-
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 的应用程序接口,其中 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 的主要功能如下:
-
高吞吐量摄取与自动时间戳。
-
在时间间隔内进行范围查询,并使用平均值、最小值、最大值和总和等聚合运算。
-
长期存储的保留政策和压缩规则。
-
用于分组和查询时间序列集的标签。
RedisTimeSeries 的典型用例如下:
-
基础设施和应用程序指标(CPU、内存、延迟)。
-
IoT 传感器读数和遥测数据。
-
财务勾选数据和市场指标。
-
业务关键绩效指标和业务仪表板。
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 向量提供了一种向量数据类型和向量相似性搜索功能,支持对嵌入进行近似近邻(ANN)查询。 这样,人工智能和 ML 工作负载(如语义搜索和推荐)就可以直接在 Redis 中运行。
Redis Vector 的主要功能如下:
-
存储高维向量(例如 128-1536 维),可配置 HNSW 和平面等索引类型。
-
使用余弦、内积或 L2 等距离度量对向量场进行 K 近邻(KNN)搜索。
-
将向量相似性与结构化字段的过滤条件相结合的混合查询。
-
与 RediSearch 或查询引擎集成,实现灵活的模式。
Redis Vector 的典型使用情况如下:
-
针对 RAG 管道的语义文档搜索。
-
利用用户或项目嵌入进行个性化推荐。
-
图像、音频或代码嵌入的相似性搜索。
-
利用学习嵌入检测欺诈和异常。
Redis 矢量示例:
创建最小矢量索引和一个文档(4 维示例):
> 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 在功能上的区别如下:
-
增强了流指令 XDELEX 和 XACKDEL,可实现原子消息生命周期和更简洁的用户组管理。
-
扩展位图操作,使用更丰富的 BITOP 运算符对大型位集进行分析。
-
更成熟的矢量搜索功能与查询引擎集成。
-
多个安全性和稳定性修复,这些修复在 7.x 早期版本中没有提供。
-
模块的分发和包装统一在 8.x 中进行,因此简化了部署。