我们很高兴宣布 Redis 8 的第二个里程碑版本,这是我们迄今为止最先进、性能最高的产品,今天即可在社区版 (CE) 中试用。
在 CE 8.0 M01 (里程碑 1 预发布版)中,我们引入了新的数据结构:JSON、时间序列和 5 种概率数据结构(之前作为独立的 Redis 模块提供)。
今天,在 CE 8.0 M02 中,我们推出了重大的性能改进。许多常用 Redis 命令的延迟已显著降低。例如,与 Redis 7.2.5 相比,ZADD 命令的延迟降低了多达 36%,SMEMBERS 命令降低了多达 28%,HGETALL 命令降低了多达 10%。
在此版本中,我们还向社区提供了两项重要的改进,这些改进以前仅在 Redis Cloud 和 Redis Software 中提供。我们增加了对 Redis Query Engine 进行垂直和水平扩展的能力。为了展示可以实现的效果,我们在一个 Redis 社区版集群上创建了一个针对十亿个 768 维向量的矢量搜索基准测试。
现在,您还可以下载 Community Edition 8.0-M02 的 Alpine 或 Debian Docker 镜像。随着我们推进到 8.0 CE GA 版本,将提供更多发行版。
我们持续监控成千上万的客户和社区成员如何使用我们的Redis 托管服务。收集的匿名统计数据使我们能够非常准确地了解 Redis 的使用方式。基于此,我们优化了在性能改进方面的持续投入。
自 Redis 7.2.5 以来,我们针对许多常用命令和使用模式引入了显著的延迟降低和吞吐量提升。
有关性能优化的完整列表,请参阅 7.4 RC1、8.0 M01 和 8.0 M02 版本说明中的“性能和资源利用率改进”部分。M01 和 M02 版本中有 18 项性能优化,严格专注于减少 CPU 周期、减少内存分配以及优化常用代码的数据访问模式—包括回复处理、数据结构改进和重复数据删除。简而言之,Redis 现在 CPU 效率更高,缓存更友好。
下图按数据结构展示了 Redis 8.0-M02 相较于 Redis 7.2.5 的 p50(中位数)延迟降低情况。我们可以看到,所有数据类型的 p50 延迟都有所改进,延迟降低范围为 9% 至 53%。
按命令查看 p50 延迟时,例如,我们可以看到 ZADD 的中位数延迟降低了多达 36%,SMEMBERS 的中位数延迟降低了多达 28%。
每个命令的 (% of DBs) 是使用此命令的我们托管服务中数据库的百分比。
不仅中位数延迟显著降低;尾部延迟也降低了,如下图 p99 图所示。这意味着 Redis 8.0 命令更快,并且每个命令的性能更可预测且稳定。
我们看到 Redis 的 20 多个命令有了显著的性能改进,其中一些命令使用广泛且影响很大。70% 的 Redis 数据库使用 SET/SETEX 命令,30% 使用 ZADD。总的来说,绝大多数 Redis 用户将看到显著的性能改进。
Community Edition 8.0 还包含了 Redis Query Engine 的两项扩展功能,这些功能以前仅在 Redis Cloud 和 Redis Software 中提供。第一项功能支持在集群数据库中进行查询,使您能够通过扩展到更多 Redis 进程来管理带有索引的超大数据集并支持更高的读写吞吐量。第二项功能允许您通过垂直扩展来增加处理能力,提高查询吞吐量,比以前提高了多达 16 倍。通过这些增强功能,Redis Community Edition 现在成为最快的免费矢量数据库。
利用 Redis CE 8.0 的扩展能力,我们展示了如何在十亿个 768 维向量嵌入上实时执行高精度矢量搜索查询。
我们使用了与我们的 Intel® 合作伙伴协作准备的矢量数据集,该数据集包含十亿个 768 维向量,使用 FLOAT16 精度,并包含 1 万个查询,每个查询有 100 个真实结果(精确近邻),这些数据源自 LAION-5B 数据集,这是一个用于训练下一代图像-文本模型(如 Stable Diffusion 和 OpenClip)的开放大型数据集。
矢量索引使用了欧几里得距离度量和 FLOAT16 精度,并调整了以下参数以在查询时实现不同的精度
数据集的 100 个最近邻真实结果被用于评估每个回复的准确性(召回率),我们调整了出边数量 M(在 4、8、16 和 32 之间变化)、EF_CONSTRUCTION(在 4、8、16 和 32 之间变化)以及 EF_RUNTIME(在 4、8、16、32、64、128、256、512、1024、2048、4096 和 8192 之间变化)。为确保结果可重现,每个配置运行了 3 次,并选择了最佳结果。阅读更多关于 HNSW 配置参数和查询的信息。
在之前的一篇博客文章中,我们着重证明了 Redis 是最快的矢量数据库。现在我们证明了我们可以从百万级向量用例扩展到十亿级向量用例,同时保持实时延迟。
在十亿向量规模下,通过实时索引,Redis CE 8.0 在允许至少 95% 精度(M 16 和 EF_CONSTRUCTION 32)的索引配置下,可以保持每秒 6.6 万次向量插入。对于精度较低的索引配置(M 4 和 EF_CONSTRUCTION 4),Redis CE 8.0 可以支持每秒 16 万次向量插入的更高摄取率。通过使用更多服务器可以进一步提高吞吐量。
对于高精度查询,我们可以看到更大的 HNSW 索引(更高的 M 和 EF_CONSTRUCT)提高了搜索质量,但会增加延迟。对于前 100 个最近邻,在同时执行 50 个搜索查询时,我们在包含 RTT 的 200ms 中位数延迟下达到 90% 的精度,在包含 RTT 的 1.3 秒中位数延迟下达到 95% 的精度。
由于所需的精度和延迟权衡取决于具体用例,因此调整 HNSW 参数(如上图所示)非常重要。
我们致力于持续改进和创新。在 Redis CE 8.0-M01 中,我们引入了新的整数数据类型。在 8.0-M02 中,我们针对常用模式下的 20 多个命令,将延迟降低了高达 54%。此外,我们增强的查询引擎现在支持快速查询、搜索和矢量搜索,并可水平和垂直扩展。
对于即将发布的 8.0 预发布版本,我们仍有令人兴奋的计划,值得期待。与此同时,您可以通过从 Docker Hub 下载 Alpine 或 Debian Docker 镜像来试用 8.0-M02。
我们的基准测试是使用本地部署进行的,总共使用了 6 台服务器,搭载了第三代至强可扩展服务器处理器(Intel IceLake CPU):1 台客户端服务器和 5 台 DB 服务器,连接到高速 40Gb 交换机。硬件由 Intel 设置。阅读更多关于 Redis 如何与 Intel 协作优化性能的信息。
结果是使用 Redis CE (Community Edition) 8.0-M02 获得的,集群总共有 200 个主节点。
我们的结果以确定且易于重现的方式获得。要重现上述结果,您应该使用 redis-benchmark-specification,特别是客户端运行器工具,这是一个易于安装的工具,包含运行基准测试和分析结果所需的所有条件。
您可以使用以下命令(并调整连接详情)来获得相同的改进。