dot Redis 8 来了——而且它是开源的

了解更多

宣布推出 Redis Community Edition 和 Redis Stack 7.4

Redis 的成功始终植根于我们与用户之间的深厚联系。构建 Redis 过去是,将来也仍然是一项协作努力。

今天,我们正式发布 (GA) 了 Redis Community Edition 和 Redis Stack 的最新版本 7.4。它包含了备受期待的哈希字段过期功能、可显著减少内存使用的新向量数据类型以及时间序列插入过滤器。我们将继续努力改进开发者体验,因此从这个版本开始,我们也保证官方 Redis 客户端库和 Redis Insight 将支持所有新功能。 

Redis 7.4 Community Edition 是第一个 采用 RSALv2 和 SSPLv1 双许可协议 的 Redis 版本。Community Edition 对 Redis 社区和我们的客户免费开放,开发者将继续在双许可下宽松地使用 Redis。Redis 7.2 及更早的版本将继续被称为 Redis 开源软件 (OSS)。从 Redis 7.4 开始,我们将开放的、免费提供的版本称为 Redis Community Edition。

现在可以为哈希字段设置过期时间。

我们的社区 长期以来一直要求 更好地控制 Redis 中的哈希字段。哈希数据结构是我们用户和客户最常使用的数据结构之一。哈希存储一组名称-值对,称为 字段,是表示数据对象的理想选择,也常用于存储会话数据。它提供了添加、获取或移除单个字段、获取整个哈希或将哈希中的一个或多个字段用作计数器的能力。 

Redis 已经支持 键过期。对于每个键,用户可以 指定键应该过期的时间,或者 指定剩余的生存时间 (TTL),在此之后键将过期。一个非常频繁的请求(GitHub:1, 2, 3, 4 和 Stack Overflow:1, 2, 3)是允许为单个哈希字段设置过期时间或剩余 TTL。这项新增功能将使您的缓存、会话存储或任何其他用例更节省内存并提高性能。 

例如,此功能的一个有用之处在于会话管理。会话中的某些数据(例如用户的购物车或偏好设置)您可能希望保留更长时间。但某些部分(例如身份验证令牌)您可能希望其过期。以前,您必须将这些数据建模为两个单独的键,而从逻辑上讲,这些数据是属于一起的。 能够只使哈希的部分内容过期将简化会话管理和其他用例。

Redis Insight 现在显示每个哈希字段的 TTL

使用新数据类型减少向量数据库中的内存消耗。 

我们从社区了解到,您希望更有效地利用内存,并需要 AI 应用程序更快地响应。对于检索增强生成 (RAG),实时数据检索和处理对于用与上下文相关的数据增强 LLM 响应至关重要。现在,除了现有的 float32float64 数据类型外,您还可以利用新的 bfloat16float16 数据类型,使用 Hash 数据类型将内存消耗降低高达 47%,并将负载下的延迟降低高达 59%。 

为了展示这两种新数据类型的影响,我们针对四种不同的数据集将它们与 float32 和 float64 数据类型进行了基准测试。当考虑在召回率为 0.95 时产生的 M/EF 配置时,我们观察到

  • 与 float32 相比,索引时间降低高达 31%,与 float64 相比,降低高达 58%。 
  • 虽然 bfloat16 和 float16 的数据集大小逻辑上是 float32 的一半,但索引大小取决于 M/EF 配置。我们观察到总使用内存减少了 22% 到 47%。
  • 对于多客户端测试,与 float32 相比,我们实现了高出 34% 的 QPS 和低 52% 的延迟;与 float64 相比,实现了高出 134% 的 QPS 和低 59% 的延迟。

关于可达到的最大精度,在我们进行基准测试的四个数据集中,有三个保持不变。对于 DBpedia 数据集,最大精度损失为 0.03。需要注意的是,精度损失本质上与数据集本身相关。因此,在处理生产级设置和数据时,对每个案例进行单独评估非常重要。

二级索引现在更易于使用。

Redis 查询引擎最初是为全文搜索构建的(因此有 FT. 命令),但我们注意到社区和客户经常寻求简单的二级索引。他们就如何增强开发者体验以及缺少哪些功能提供了宝贵的反馈。 

在 Redis 查询引擎中进行二级索引,我们有一种高效的索引类型称为 TAG。以前,查询存储在 TAG 中的电子邮件地址需要转义特殊字符,例如 '@' 和 '.',这使得查询实现起来很麻烦,并且如果操作不正确会导致没有结果或语法错误。 

现在,要查询包含特殊字符的 TAG,只需将查询项用双引号括起来即可,无需转义特殊字符。这里有一个简单的代码示例来说明此项改进。让我们创建索引并添加一些示例数据

redis > FT.CREATE personIdx ON JSON PREFIX 1 person: SCHEMA $.email AS email TAG
OK 
redis> JSON.SET person:1 $ '{"email": "[email protected]"}'
OK

在以前的体验中,要查询电子邮件,您必须转义每个特殊字符。

> FT.SEARCH personIdx '@email:{test\@redis\.com}' DIALECT 4
1) "1"
2) "key:1"
3) 1) "$"
   2) "{\"email\":\"[email protected]\"}"

7.4 版本还包括处理 空字段和缺失字段的索引和查询 的重大改进。这项功能是社区和客户高度要求的,它支持更动态的数据模型,并支持在后期阶段向文档添加字段的场景。 

例如,在银行中,某些客户的合同可能需要选择使用汇率。要为不含 'exchange_rate' 字段的合同创建索引,并稍后根据此字段的存在与否来查询合同,您只需使用新关键字 INDEXMISSING 使 索引感知到此情况

FT.CREATE contractIndex ON HASH PREFIX 1 'contract:' SCHEMA CustomerID TAG description TEXT exchange_rate TAG INDEXMISSING

查询时,对于没有汇率属性的合同,您应该使用以下语法:FT.SEARCH contractIndex 'ismissing(@exchange_rate)';对于具有新属性的合同,则使用否定形式:FT.SEARCH contractIndex '-ismissing(@exchange_rate)'

最后,我们通过新的 INTERSECT 和 DISJOINT 运算符以及报告索引使用的内存的新方法,添加了一些额外的地理空间搜索功能。请查阅文档和 版本说明 以获取更多详细信息以及我们的扩展方式。 

使用插入过滤器减少时间序列大小。 

许多传感器会定期报告数据。通常,新测量值与先前测量值之间的差异微不足道,这与随机噪声或测量精度限制有关。当当前样本与先前样本之间的时间差和值差都很小时,您现在可以定义一个插入过滤器来忽略新的测量值。

移除触发器和函数。 

Redis Stack 7.4 不再包含触发器和函数。经过长时间的公开预览后,由于开发者可以使用现有功能实现相同的功能,采用率较低。我们移除了这些功能以使 Redis 更简单。

下载 Redis 开始使用。

要开始使用这些最新功能,请下载 Redis在 Redis Cloud 上免费开始。7.4 版本将在未来几周内陆续推广到 Redis Cloud 的更多区域。

所有官方客户端库都添加了对新功能的支持。请查阅针对您选择的语言的版本说明以开始使用。

请通过我们的Discord 服务器告诉我们您如何使用这些新功能或提供任何反馈。我们很高兴能继续向社区发布新更新,以帮助您使用 Redis 快速构建。感谢您成为 Redis 社区的重要一员。