dot Redis 8 现已推出,并且它是开源的

了解更多

深入了解 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 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 Cluster 大大扩展了 Redis 的使用场景,但它确实需要更复杂的客户端库。在较小的语言社区中,支持集群的客户端库从未完全出现。幸运的是,Redis 6.0 完整地配备了一个集群代理,以帮助那些不支持 Redis Cluster 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 安全性 的文章。