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 中进行,因此简化了部署。