dot Redis 8 来了——而且是开源的

了解更多

新功能:使用正则表达式分片的 Redis Cloud 集群

我很高兴地宣布,今天我们通过公开提供 RegEx 分片,使我们的集群技术变得更加有用。此功能允许您精确定义 Redis Cloud 如何在数据库的分片之间分配数据,从而使您的应用程序能够在巨大的数据集上以最佳性能继续执行多键操作。我们的标准和新的 RegEx 分片策略可立即供我们所有 Redis Cloud 按需付费用户使用。

什么是 Redis 集群?为什么要使用它?

在深入了解此公告的细节之前,我想先回顾一下 Redis 集群的“原因”和“内容”。 Redis 是当今可用的最快的数据存储,是一个开源的、内存中的 NoSQL 数据库。 Redis 的架构使得单个 Redis 服务器受到其运行主机硬件的限制——特别是服务器的 CPU、RAM 和网络。作为一个(主要)单线程进程,Redis 仅利用服务器的一个 CPU 核心。并且由于它是一个内存数据库,因此 Redis 进程管理的所有数据都必须放入其运行服务器的 RAM 中。最后,一旦 Redis 和应用程序产生的流量使服务器的网络接口饱和,该接口也可能成为瓶颈。虽然单个 Redis 服务器可以处理每秒数万到数十万次操作,但在某些情况下,应用程序需要更多。

向上扩展 Redis 服务器(垂直扩展)是可行的,但只能在一定程度上。当然,您可以向服务器添加更多 RAM,用更快的型号替换 CPU,甚至可以使用更广泛、更快的网络,但最终您将达到任何单个服务器硬件的上限。这就是集群和分片可以提供帮助的地方,它允许您在每台服务器上和超出此范围使用多个 CPU 核心。

Redis 集群由一个或多个服务器组成,每个服务器运行一个或多个 Redis 进程。每个进程管理一个无共享数据库实例,该实例称为分片。集群数据库中的键映射到哈希槽,哈希槽又映射到分片,以便每个分片管理数据库命名空间的互斥子集。从某种意义上说,分片是物理数据库,哈希槽是一个额外的层,有助于执行诸如重新分片之类的管理操作。通过在多个服务器上运行分片,集群本质上允许您使用更多的 CPU 核心、更多的 RAM 和更多的网络资源来管理您的数据库。

集群是一种水平扩展 Redis 数据库的有效方法,因为它允许您使用分布式设置。它提供了一种有效的方法来分配数据库所需的内存需求、处理负载和带宽。但是,有一个问题——由于 Redis 集群是通过无共享分片实现的,因此您无法执行跨越多个哈希槽的多键操作(例如,对多个排序集合执行 ZUNIONSTORE)。这样做会触发错误。为了对多个键执行原子操作(即对多个键执行的单个命令、MULTI/EXEC 块和 Lua 脚本),您必须确保所有相关键都映射到同一哈希槽(更多信息如下)。

Redis 的集群支持

开源 Redis v3 将完全支持原生集群。几周前,Salvatore Sanfilippo 发布了第一个 v3 Release Candidate,预计将在几个月内投入生产。一旦开源集群稳定下来,它将提供任何人设置和操作 Redis 集群所需的所有工具,并有效应对可扩展性挑战。

但是,除了开源实现之外,还有其他 Redis 集群。在过去两年的大部分时间里,我们在 Redis 一直在运行我们自己独立开发的 Redis 集群版本,以提供 Redis Cloud 的可扩展性功能。 Redis 经过生产验证的集群技术使您可以动态地扩展 Redis 数据库,使其远远超出任何单个服务器的限制。我们的一些客户使用集群来管理 TB 级的数据集,而另一些客户则依靠它来维持亚毫秒级延迟的大规模吞吐量。与我们服务中的所有内容一样,我们的集群非常易于使用,无需任何特殊操作。一旦采用,它对应用程序是透明的,并且不需要任何代码更改或专用客户端库——您只需通过一个隐藏架构底层复杂性的数据库端点继续工作即可。

使用正则表达式来分片 Redis

Redis Cloud 集群提供两种分片策略选择:标准和 RegEx。标准策略的设计行为与 开源 Redis Cluster 完全相同。通过在您的键名中使用哈希标签(即“{”和“}”字符),您可以精确地指定用于哈希的键名部分。此标准分片策略将使用由花括号括起来的键名的子字符串将该键映射到哈希槽。

虽然这种标准分片策略是一个强大的工具,但我们通过引入 RegEx 分片策略将其提升到了一个新的水平。这种分片类型允许您配置一组正则表达式规则,这些规则用于从键的名称中提取哈希标签。因为您可以使用多个规则,并且因为每个规则都是一个完全成熟的正则表达式,所以这种自定义分片策略提供了很大的灵活性——有效地允许您对键名实现任何模式匹配逻辑,以提取哈希标签。您可以将部分业务逻辑直接嵌入到分片策略中,以确保完美满足您的应用程序需求。

当将集群与现有应用程序和数据集一起使用时,自定义 RegEx 分片策略特别有用,因为您可以跳过新隐式数据库模式的数据迁移和代码更改。使用自定义 RegEx 分片,您可以“教” Redis Cloud 集群如何构建数据集的键名,并确保需要位于同一哈希槽中的键(用于多键操作)被正确识别。您可以在我们的文档页面上阅读有关我们的分片策略以及如何使用它们的更多信息。

使用 Redis Cloud 集群 Redis 既简单又有趣。我们的数据库可以进行集群和扩展,以适应数据量、吞吐量和流量的增长,只需单击一个按钮,而无需对现有应用程序进行任何更改。有问题?反馈? 发送电子邮件 或 发推文 给我 – 我随叫随到 🙂