点 快速的未来正在您所在的城市举办活动。

加入我们在 Redis 发布会

深入 Redis 6.0

点击此处下载最新版本.

您知道泳池浅水区上的“禁止跳水”警示吗?好吧,新的 Redis 6 绝不是对世界上最受欢迎的数据库的浅层更新——它非常深,您可以直接跳入。现在 Salvatore Sanfilippo 已将 Redis 6 正式发布,让我们来了解一下新的更改和功能。

新功能可以分为几个不同的类别:安全、性能、易用性,甚至一些全新的功能。每个类别都包含许多改进,因此请仔细阅读,了解它们如何从根本上改变您使用 Redis 的方式。

Redis 6 带来了新的安全功能

Redis 6 中可能最大、最具革命性的功能是访问控制列表 (ACL)。ACL 将“用户”的概念引入 Redis。每个用户都可以拥有定义的一组功能,这些功能规定他们可以运行哪些命令以及在哪些键上运行。如果您已经使用 Redis 一段时间,您可能已将此功能列入愿望清单——它减少了在生产服务器上运行 FLUSHDB 等操作的需要,并允许您执行更复杂的任务,例如为特定操作创建特定用户,以便每个操作都以 最小权限原则 运行。

JavaNode.jsPython.NET 中的 Redis 客户端已经支持 ACL,并且我们预计支持会随着 Redis 6 的正式发布而迅速扩展到更多语言和库。

ACL 将允许用户根据用户指定的权限仅访问特定的命令、键,甚至键模式。

除了 ACL 之外,Redis 6 还带来了通过 SSL 加密流量的功能。在该版本之前,Redis 中的加密被延迟到进程之外,这意味着它需要其他应用程序来提供加密,并且许多实例未加密。这是 Redis 向前迈出的重要一步,允许在加密是关键要求的更多环境中使用 Redis。

Redis 6 更快

尽管 Redis 凭借其高性能而享有盛誉,但其单线程架构在工程师中一直存在争议,他们想知道 Redis 是否可以更快。Redis 6 开启了一个新时代:虽然它保留了核心单线程数据访问接口,但 I/O 现在已实现多线程化。

通过将用于读取和写入 I/O 套接字的时间委派给其他线程,Redis 进程可以将更多周期用于操作、存储和检索数据,从而提高整体性能。此改进保留了先前版本的事务特性,因此您无需重新考虑您的应用程序即可利用性能提升。同样,Redis 的单线程 DEL 命令现在可以配置为像自 Redis 版本 4 以来一直可用的多线程 UNLINK 命令一样工作。

局部变量的性能几乎总是无与伦比的。最后,即使像 Redis 这样高性能的数据库,也会比从堆栈或堆中访问数据慢得多。Redis 6 添加了一种新技术,用于让复杂的客户端库实现客户端缓存层,以在您自己的进程中存储数据子集。此实现足够智能,可以管理对同一数据的多次更新,并尽可能使您的数据保持同步——同时保留 Redis 的优势,以及局部变量的速度。

Redis 6 更易于使用

多年来,Redis 协议的第二个版本 (RESP2) 已被证明非常灵活。它不仅支持 Redis 的内置数据结构,还支持 Redis 功能以及这些功能带来的新命令和数据。Redis 6 开始支持协议的新版本 RESP3。该新协议是先前版本的演变,它为结果增加了丰富性,让接口库能够更好地将 Redis 响应与主机语言中的可变类型匹配。此外,此版本的协议为更薄的客户端库铺平了道路,这些库的代码更少,最终将允许更快地采用新的命令和功能。RESP2 将与我们共存相当长一段时间,因为社区需要一些时间才能将软件、工具和客户端库迁移到新协议。但是,如果您想一头扎进,现在就可以在 Redis 6 上尝试 RESP3——只需了解 RESP3 仍处于开发的早期阶段。

Redis 集群极大地扩展了 Redis 的使用范围,但它确实需要更复杂的客户端库。在较小的语言社区中,支持集群的客户端库从未完全出现。幸运的是,Redis 6.0 配备了集群代理,可以帮助不支持 Redis 集群 API 的语言平台连接到 Redis 集群。这掩盖了复杂性,因此只需要一个简单的单实例库实现。

自 Redis 1.0 以来,开发人员能够将键设置为在给定时间后过期,这是一个对缓存不可或缺的功能。此过期一直依赖于抽样技术来避免在许多键同时过期时出现不可预测的延迟。Redis 6.0 中的过期循环已重写,以允许更快地过期,更接近生存时间 (TTL) 属性。此外,您现在可以调整过期时间,以准确满足您的特定情况所需的精度。

认识最长公共子序列族

现在是时候介绍一些完全不同的内容了。在最近让社区惊喜的一件事中,Redis 的作者 Salvatore 发布了版本 6 的一个新的命令 最长公共子序列 (LCS) 命令 可用于在字符串之间查找非连续序列。如果您曾经使用过 diff,那么您就间接地使用过此算法。在 Salvatore 自身命名的示例中:

STRALGO LCS STRINGS salvatore sanfilippo
"salo"

此命令是如何得出该结果的?

salvatore sanfilippo

如您所见,STRALGO LCS STRINGS 命令跳过了许多字节——并且对于尝试查找最长公共字节序列的每个参数,该数量可能不同。

这仅仅是开始,Redis 的这种新功能还有更多内容。由于 LCS 命令族适用于二进制数据(与 Redis 中几乎所有其他内容一样),因此只需考虑文本处理之外的可能性。 Salvatore 已经提到了将其用于 RNA 和 DNA 分析的可能性。非常棒,但请记住,这是一个非常新的命令,您可能想要将其视为沙盒——该命令名称在上周发生了更改,因此如果它在所有地方都不受支持,请不要感到惊讶。

开始使用 Redis 6

Redis 6 为 Redis 社区打开了巨大的可能性。它带来了从更好的安全性到增量性能改进的所有内容,更不用说更易于使用并引入了使用 Redis 的新方法。如果您准备开始,您可以 立即从 redis.io 下载全新版本!要详细了解 Redis Enterprise 6.0 的正式发布(它利用了 Redis 6 的改进并将 Redis 安全性提升到更高水平),请查看我们关于 使用 Redis Enterprise 6.0 重新发现 Redis 安全性 的文章。