Redis 8.0发布,性能大幅提升,重新回归开源!
喜大普奔,时隔两年后,5.1劳动节这一天,Redis 8.0正式发布了。
Redis 创始人antirez发文宣布「Redis 再次开源」:
"五个月前,我重新回归 Redis,并迅速开始与同事们讨论将许可证切换到 AGPL 的可能性。 结果发现公司内部早就在关注这个问题,不少人都觉得 AGPL 比 SSPL 更好。虽然 Redis 最终选择了 SSPL,但公司内部对此的讨论仍在继续。 于是我开始积极为 AGPL 许可证拥趸争取更多支持。因为我直觉认为,SSPL 在实践中未能被社区接受。OSI 不会接受它,软件社区也不会把 SSPL 视为开源许可证。 没过多久,我发现自己这个“假想”在公司的各个层面上得到了越来越多的支持。 说实话,我真心希望自己为全新 Vector Sets 数据类型编写的代码能通过开源许可证发布。 编写开源软件对我而言已是根深蒂固:在我的职业生涯中,我很少写过其他东西。现在年纪太大了,更不适合尝试“新东西”。听起来可能有点理想主义,但我确实是怀着极大的热情在编写 Vector Sets,前提就是 Redis 和我的工作成果能够再次开源。 我很清楚,我们的工作核心只是改进 Redis,持续构建一套良好、实用、简洁且能够根据软件栈需求进行调整的系统。然而,回归开源许可证能够更好地与 Redis 项目定位保持一致、扩大用户群体接受度,也是为这一人类共同努力的成果做出贡献的基础。 所以回归开源许可证虽然不是我一个人能够决定的,但我仍然希望自己能为此做出一点努力。今天我高兴地看到 Redis 再次回归开源阵营,并且遵循 AGPL v3 许可证。 现在是时候回归终端了,用我所能写出的最佳代码来表达对于 Redis 用户的敬意,也希望 Vector Sets 能够更加实用。我还有不少改进思路,希望大家的反馈能够激发我更多的想法。"
总结一下就是,Redis 决定在保留 RSALv2/SSPLv1 的同时,新增 OSI 批准的 AGPLv3作为 Redis 8 及以后版本的授权选项。
这确实是个好消息,因为之前的SSPL协议,完全就是个伪开源协议,被喷成狗。
另外,在新特性方面,给大家做个解读。
新的数据结构
Redis 8.0新增了8种数据结构,分别是向量集合 (vector set)、JSON、时间序列,以及5种概率结构,包括布隆过滤器、布谷鸟过滤器、Count-min sketch、top-k 和 t-digest。
向量集合,这是一种用于向量相似性搜索的新数据类型。由 Redis 的原始创建者 Salvatore Sanfilippo 开发,向量集借鉴了有序集(sorted set)的灵感,并扩展了有序集的概念,允许存储和查询高维向量嵌入,从而增强了 Redis 在涉及语义搜索和推荐系统等 AI 用例中的能力。向量集补充了 Redis Query Engine 中现有的向量搜索功能。
JSON,在 Redis 8 中,JSON 数据结构允许将 JSON 文档作为键存储在 Redis 中。Redis 提供了使用 JSONPath 语言检索和操作文档的命令,以实现对特定元素的更细粒度且高效的访问。Redis 还支持原子更新,因此可以修改 JSON 文档的某些部分,而无需先检索整个文档。
时间序列,时间序列简化了处理快速变化的带时间戳数据(如来自物联网传感器、系统遥测、股票价格、商品价格、外汇汇率和加密货币价格的数据)的用例。
概率性数据结构,概率性数据结构能够更快地处理关于数据流和大型数据集的常见问题。Redis 8.0新推出了有 5 种概率性数据结构。
- Bloom filter和 Cuckoo filter
用于检查给定值是否已在数据流中出现过
- Count-min sketch
用于估计给定值在数据流中出现的次数
- Top-k
用于查找数据流中最常见的值
- t-digest
用于查询数据流中有多少比例的值小于/大于给定值。
(其中Bloom filter以前也支持,但是要通过插件或者Redisson这种框架来实现。)
性能提升
Redis 8 附带了个Query Engine,这个版本可以为哈希和 JSON 数据结构中存储的数据创建二级索引。 Redis Query Engine 最常见的用途包括向量搜索、按条件或标签返回精确匹配项的数据查询,以及按关键词或语义返回最佳匹配项的搜索查询。
Redis Query Engine可以通过两种新的方式进行扩展,官方实测可以通过水平(集群)和垂直(多线程)扩展,查询处理能力能提升 16 倍。
其次是命令执行速度大大提升,在 149 个基准测试中,90 个命令运行更快,延迟更低,最高的提升了87%。
并且新版本引入的新复制机制,使同步时间减少 18%,这还是和 7.2.5相比,如果和更早的版本比,提升会更大。
还有就是线程模型也有些变化, 之前在 6.0中,I/O不是引入了多线程吗,但是效果其实有限,在Redis 8 中,引入了新的 I/O 线程实现,可以通过设置 io-threads 配置参数来启用它,开启之后,可以把吞吐量提升1倍。
以上,就是Redis 8.0的主要更新内容。那么,你会考虑升级吗?