dot 速度的未来即将在您的城市举行活动。

加入我们在 Redis 发布会

新:使用正则表达式分片的 Redis 云集群

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

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

在深入探讨此公告的细节之前,我首先要介绍一下 Redis 集群的“为什么”和“是什么”。Redis 是当今最快的可用数据存储,是一个开源的内存 NoSQL 数据库。Redis 的架构是这样的:单个 Redis 服务器受其运行的主机硬件的约束——具体而言是该服务器的 CPU、RAM 和网络。Redis 作为(主要)单线程进程,只利用服务器的一个 CPU 内核。并且由于它是一个内存数据库,Redis 进程管理的所有数据都必须适合其运行的服务器的 RAM。最后,运行 Redis 的服务器的网络接口在饱和 Redis 和应用程序生成的流量后也可能成为瓶颈。虽然单个 Redis 服务器每秒可以处理 数十万甚至数百万次操作,但在某些情况下,应用程序需要更多。

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

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

集群是水平扩展 Redis 数据库的有效方法,因为它允许您使用分布式设置。它提供了一种有效的方法,可以将数据库所需的内存需求、处理负载和带宽在多台服务器之间分配。但是,有一个问题——由于 Redis 集群是使用无共享分片实现的,因此您无法执行跨越多个哈希槽的多键操作(例如,在多个有序集合上执行 ZUNIONSTORE)。这样做会导致错误。为了对多个键执行原子操作(即对多个键进行操作的单个命令、MULTI/EXEC 块和 Lua 脚本),您必须确保所有相关键都映射到相同的哈希槽(后面会详细介绍)。

Redis 的集群支持

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

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

使用正则表达式对 Redis 进行分片

Redis 云集群提供了两种分片策略可供选择:标准和 RegEx。标准策略旨在表现得与 开源 Redis 集群 一样。通过在您的键名中使用哈希标签(即“{”和“}”字符),您可以精确指定将用于哈希的键名部分。此标准分片策略将使用键名中用大括号括起来的部分来将该键映射到哈希槽。

虽然此标准分片策略是一个强大的工具,但我们通过引入 RegEx 分片策略将其提升到了一个新的高度。这种类型的分片允许您配置一组正则表达式规则,这些规则用于从键名的名称中提取哈希标签。由于您可以使用多个规则,并且每个规则都是一个完整的正则表达式,因此此自定义分片策略提供了很大的灵活性——实际上允许您在键名上实现任何模式匹配逻辑来提取哈希标签。您可以将部分业务逻辑直接嵌入到分片策略中,以确保完全符合应用程序的要求。

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

使用 Redis 云,集群化 Redis 非常容易且有趣。我们的数据库可以集群化并扩展以适应数据量、吞吐量和流量的增长,只需单击一个按钮,而无需对现有应用程序进行任何更改。有任何问题?任何反馈?电子邮件推特 我——我全天候提供服务🙂