Redis 的成功一直根植于我们与用户的深厚联系。构建 Redis 一直是,并将继续是,一项协作性的努力。
今天,我们发布了最新版本 7.4 的 Redis 社区版和 Redis Stack,并将其正式发布 (GA)。它包括广受好评的哈希字段过期功能、用于显着减少内存使用的新向量数据类型以及时间序列插入过滤器。我们继续致力于改善开发人员体验,因此从这个版本开始,我们还保证支持官方 Redis 客户端库和 Redis Insight 中的所有新功能。
Redis 7.4 社区版是 Redis 的第一个版本,采用 RSALv2 和 SSPLv1 双重许可。社区版可供 Redis 社区和我们的客户免费使用,开发人员将继续享受在双重许可下使用 Redis 的宽松权限。Redis 7.2 及更早版本将继续被称为 Redis 开源软件 (OSS)。从 Redis 7.4 开始,我们将开源的免费版本称为 Redis 社区版。
我们的社区一直要求更好地控制 Redis 中的哈希字段。 哈希 数据结构是我们用户和客户最流行的结构之一。哈希包含一组名为字段的名称-值对,非常适合表示数据对象,也经常用于存储会话数据。它提供添加、获取或删除单个字段、获取整个哈希或使用哈希中一个或多个字段作为计数器等功能。
Redis 已经支持键过期。对于每个键,用户可以指定键应过期的时间,或者可以选择指定键将过期的剩余生存时间 (TTL)。一个非常频繁的要求(GitHub:1、2、3、4 和 Stack Overflow:1、2、3)是允许设置单个哈希字段的过期时间或剩余 TTL。此项新增功能将使您的缓存、会话存储或任何其他用例更节省内存并提高性能。
例如,在会话管理中,您可能希望将某些会话数据保留更长时间,例如用户的购物车或其偏好。但某些部分您可能希望过期,例如身份验证令牌。以前,您必须在两个单独的键中建模此项,而从逻辑上讲,这些数据应该在一起。能够只使哈希的一部分过期将简化会话管理和其他用例。
我们从社区了解到,您希望更有效地利用内存,并且需要从 AI 应用程序获得更快的响应。使用检索增强生成 (RAG),实时数据检索和处理对于使用上下文相关的數據增强 LLM 响应至关重要。除了现有的float32 和float64 外,您现在可以利用新的bfloat16 和float16 数据类型,以将哈希数据类型减少的内存消耗降低多达 47%,并将负载下的延迟降低多达 59%。
为了展示这两种新的数据类型的影响,我们对它们与 float32 和 float64 数据类型进行了基准测试,测试了四个不同的数据集。在考虑 M/EF 配置以实现 0.95 的召回率时,我们观察到
关于可实现的最大准确率,在我们基准测试的四个数据集中,有三个保持不变。对于 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": "test@redis.com"}'
OK
要查询先前体验中的电子邮件,您必须转义每个特殊字符。
> FT.SEARCH personIdx '@email:{test\@redis\.com}' DIALECT 4
1) "1"
2) "key:1"
3) 1) "$"
2) "{\"email\":\"test@redis.com\"}"
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)'
查询没有 exchange_rate 属性的合同,或使用否定形式 FT.SEARCH contractIndex '-ismissing(@exchange_rate)'
查询具有此新属性的合同。
最后,我们添加了一些额外的地理空间搜索功能,包括新的INTERSECT 和 DISJOINT 运算符,以及报告索引使用的内存的新方法。请查看文档和发行说明,了解更多详细信息以及我们如何扩展。
许多传感器定期报告数据。通常,新测量值与先前测量值之间的差异可以忽略不计,并且与随机噪声或测量精度限制有关。当当前样本和先前样本之间的时间差和值差都很小时,您现在可以定义插入过滤器以忽略新的测量值。
Redis Stack 7.4 不再包含触发器和函数。经过一段时间的公开预览后,由于开发人员可以使用现有功能实现相同的功能,因此采用率很低。我们删除了这些功能,以使 Redis 更简单。
要开始使用这些最新功能,请下载 Redis 或在 Redis 云上免费开始使用。7.4 将在未来几周内在 Redis 云的更多区域推出。
我们在所有官方客户端库中都添加了对新功能的支持。请查看您选择的语言的发行说明,开始使用。
请告诉我们您如何使用这些新功能,或在我们的Discord 服务器 上向我们提供任何反馈。我们很高兴继续向社区发布新更新,帮助您使用 Redis 快速构建。感谢您成为 Redis 社区的重要组成部分。