Google Cloud Blog

Unlock 3x QPS and microsecond latency with Memorystore for Valkey 9.1

6.9内容质量
Unlock 3x QPS and microsecond latency with Memorystore for Valkey 9.1

TL;DR · AI 摘要

Memorystore for Valkey 9.1: 3x QPS Caching Google Cloud Blog Databases Unlock 3x QPS and microsecond latency with Memory...

核心要点

  • 主题聚焦:Unlock 3x QPS and microsecond latency with Memor
  • 来源:Google Cloud Blog,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#后端#云计算#安全
打开原文

Memorystore for Valkey 9.1:实现3倍QPS缓存 | Google Cloud 博客

数据库

通过 Memorystore for Valkey 9.1 实现3倍QPS与微秒级延迟

2026年9月26日

##### Ankit Sud

Google 高级产品经理

##### Jacob Murphy

Google 软件工程师

##### 立即体验 Gemini Enterprise

职场人工智能的入口

立即体验

在 Google Cloud,我们致力于通过开源软件提供最佳的托管体验。今天,我们宣布 Memorystore for Valkey 9.1 正式上线,相比 Memorystore for Redis Cluster,其性能实现了每秒查询数(QPS)最高提升3倍,延迟低至微秒级。

我们对 Valkey 的支持始于2024年,当时 Redis Inc. 将其许可模式从宽松的开源 BSD 许可证转向双重许可模式。对此,Google Cloud 与众多科技领袖共同支持创建了 Valkey——一个由 Linux 基金会监管的开源替代方案。

自那时起,Valkey 取得了显著进展,推出了多项性能和功能更新,突破了原始分支的诸多限制。对于需要处理数百万并发用户的 AI 和微服务架构组织而言,Valkey 显得尤为强大。在此场景下,后端开发人员和架构师必须同时实现海量吞吐量与微秒级延迟的双重目标。

在本文中,我们将探讨 Valkey 9.1 如何实现其性能表现、新增的开发者功能、如何快速上手,以及客户如何实际应用这些特性。

内部机制:重新思考线程通信

在高吞吐量的内存数据库中,高效的 I/O 卸载对于保持主线程执行循环畅通至关重要。此前,Valkey 采用静态轮询方式将客户端套接字分配给 I/O 线程,要求主线程持续轮询待处理客户端列表以检测完成的工作。

Valkey 9.1 引入了无锁多队列消息架构,取代了列表轮询方式,消除了跨线程CPU浪费并实现动态负载均衡。该架构包含三个互补队列:

  • 主线程到I/O线程队列:将读写任务分发至单生产者多消费者(SPMC)队列。空闲工作线程按需拉取任务,实现动态任务窃取机制,防止线程饥饿或热点问题。
  • I/O线程到主线程队列:工作线程将完成的任务推送到多生产者单消费者(MPSC)队列。主线程可立即弹出已完成工作,消除忙等待列表遍历。
  • I/O线程专用队列:专用单生产者单消费者(SPSC)队列处理线程绑定内存清理和高吞吐量 epoll 卸载。

Valkey 9.1 还用两阶段动态扩展引擎取代了静态线程阈值:

  • CPU驱动的"点火"机制:当主线程CPU使用率超过30%时,引擎会自动激活首个后台I/O线程,提前吸收流量以避免队列瓶颈。
  • 队列深度自动扩展:启动后,Valkey 根据实时SPMC队列积压情况动态调整活跃I/O工作线程数量,仅在需要时启用额外核心,空闲时自动停用。

#### 1. 细粒度的数据库级访问控制(ACL)

我们最近在 Memorystore for Valkey 上推出了访问控制列表(ACL)功能,通过 IAM 实现更细粒度的密钥级和命令级授权。这项基础安全机制无需额外成本,包含以下功能:

  • 集中管理:采用 1:N 映射方式,允许您定义单一 ACL 策略并跨多个集群应用。
  • 安全多租户:组织可轻松实施最小权限原则,实现数据库舰队的安全多租户管理。
  • 增强可观测性:该功能包含版本化策略修订和全面的审计日志。

此前,ACL 规则在实例内全局生效。Valkey 9.1 允许管理员在 ACL 框架内,针对特定数字数据库级别限制用户访问。

现实案例:您可以配置一个用于测试环境或特定服务的用户,并严格限制其仅访问非生产数据库:

  • 生产用户:@all ~* db=0
  • 测试用户:@all ~* db=1
  • 开发用户:@all ~* db=2

通过跨多个数据库使用数据库级访问控制,无需为密钥添加前缀即可防止未授权数据访问和应用程序错误。

#### 2. CLUSTERSCAN:高效的集群级密钥扫描

此前,扫描大型集群中的密钥需要逐个查询节点。这种方法既不感知集群状态,也不支持故障转移。因此,扫描可能遗漏密钥、返回重复数据,或在槽迁移或节点故障转移期间失败。

CLUSTERSCAN 命令通过引入拓扑感知游标解决了这些限制。该游标编码了当前槽位、本地哈希表指纹和本地游标。借助这些额外的编码信息,客户端可以在整个集群中扫描密钥,同时优雅处理拓扑变化和重定向。

CLUSTERSCAN 支持两种主要扫描策略:

#### 用例 1:顺序全集群扫描(单个工作线程)

此策略适用于优先考虑简单性而非速度的简单脚本或后台任务。客户端从游标 0 开始,按顺序遍历集群中的所有槽位:

加载中...

CLUSTERSCAN 0 MATCH "user:*" COUNT 10 1) "0B3a21-{06S}-64" 2) 1) "user:101" 2) 2) ...

要继续扫描,请将返回的游标传递给下一次调用。当当前槽位完全扫描后,游标会自动切换到下一个槽位。

CLUSTERSCAN 0B3a21-{06S}-64 MATCH "user:*" COUNT 10 1) "0B3a21-{07T}-0" 2) 1) "user:102" 2) 2) ...

当命令返回游标 "0" 时,扫描完成。

#### 用例 2:并行化集群扫描(多个工作线程)

此策略适用于高吞吐量扫描。使用 SLOT 参数可将扫描限制在特定槽位,允许您将 16,384 个槽位分配给多个并行工作线程。

工作线程 1(扫描槽位 0):

CLUSTERSCAN 0 SLOT 0 MATCH "user:*" COUNT 10 1) "0B3a21-{06S}-64" 2) 1) "user:101" 2) 2) ...

工作线程 2(并行扫描槽位 1000):

CLUSTERSCAN 0 SLOT 1000 MATCH "user:*" COUNT 10 1) "0B3a21-{08X}-32 2) 1) "user:999" 2) 2) ...

从这里开始,工作线程 1 继续传递 SLOT 0,工作线程 2 继续传递 SLOT 1000。槽位与游标不匹配时会返回错误。当所有 16384 个槽位扫描完成后,集群扫描即被视为完成。

#### 3. 更多用于原子性和过期处理的命令

HGETDEL:原子性获取并删除 一种常见的应用场景是读取哈希字段后立即删除(例如消费一次性认证令牌或短暂会话状态)。Valkey 9.1 新增了 HGETDEL 命令,该命令可在单次网络往返中原子性地获取哈希字段值并删除。

实际应用示例: HSET user:1001 temp_token "abcde" (integer) 1 HGETDEL user:1001 FIELDS 1 temp_token 1. "abcde" HGET user:1001 temp_token (nil)

MSETEX:多键共享过期时间 为消除多命令流水线开销,新增的 MSETEX 命令支持通过单次操作为多个键设置统一的过期时间。

实际应用示例: 设置一个临时会话状态,要求多个独立键在 300 秒后同时过期: MSETEX 2 session:auth "ok" session:user_id "1001" EX 300 (integer) 1 TTL session:auth (integer) 300

增强的 HSETEX 带有条件标志 HSETEX 现在支持 NX(仅当字段不存在时设置)和 XX(仅当字段存在时设置)条件标志。

实际应用示例: 初始化一个带 1 小时 TTL 的限流阈值字段,确保不会覆盖现有活动限制: HSETEX config:123 NX EX 3600 FIELDS 1 "rate_limit" "100" (integer) 1

基于 Memorystore 的 Valkey 9.0 版本

Valkey 9.1 的发布建立在我们于 Google Cloud Next '26 上为 Memorystore for Valkey 公布的重大更新基础之上:

  • AI 与向量工作负载内置模块:原生 JSON 支持和布隆过滤器可实现快速文档查询和成员检查。
  • 六种新节点规格:为帮助您管理成本并实现扩展,我们新增了六种节点规格。
  • 小型节点规格:Custom-Pico(1.25 GB)、Custom-Micro(2.5 GB)和 Custom-Mini(3.5 GB),适用于轻量级微服务和开发/测试环境。这些规格仅适用于禁用集群模式的环境。
  • 高 CPU 和大规格 SKU:HighCPU-Medium(8 vCPU/13 GB)和 Standard-Large(8 vCPU/26 GB),专为 CPU 密集型应用优化。
  • XXL 规格:Highmem-XXLarge 每节点配备 110 GB 内存和 16 vCPU,用于大规模集群整合,满足最苛刻的工作负载需求。

(注:以上数据基于开源基准测试;实际性能提升将根据您的具体工作负载有所不同。)

迁移到全托管的 Memorystore for Valkey

自行管理 Redis OSS/Valkey 缓存层会消耗宝贵的工程资源,并在扩展时产生操作摩擦。我们也很高兴宣布推出新的迁移工作流,帮助您迁移到 Memorystore for Valkey。

通过此次发布,迁移基础设施变得简单、全托管,只需在应用端进行一次配置更改即可指向 Memorystore for Valkey(数据迁移完成后)。该工作流现已全面可用。要从自行管理的 Redis 或 Valkey 迁移到全托管的 Memorystore for Valkey,请按照以下四步操作:

  1. 创建目标实例:部署一个配置了所需分片数、节点规格和集群数据库选项的 Memorystore for Valkey 实例。
  2. 建立在线复制:从源数据库直接发起连续的双向同步在线迁移。
  3. 验证数据同步:实时监控复制指标,确认数据集完全对齐且复制健康度低延迟。
  1. 执行切换操作:将应用程序连接端点切换至 Memorystore for Valkey,开始使用新缓存。

Memorystore for Valkey 客户的评价

目前,全球排名前 100 的 Google Cloud 客户中已有超过 95% 依赖 Google Cloud Memorystore 来支撑高吞吐量的严苛工作负载,其中 Memorystore for Valkey 用户数量持续增长。

以实时体育赛事领域为例,提供无瑕的数字体验至关重要。当出现改变比赛走势的关键瞬间时,数百万粉丝会立即拿起设备查看实时统计数据、观看精彩集锦并参与互动功能。这些巨大且难以预测的流量高峰需要底层架构具备惊人的扩展能力。作为 Valkey 早期合作伙伴之一,美国职业棒球大联盟(MLB)必须在不牺牲性能的前提下管理不可预测的流量高峰。

"我们信任 Memorystore for Valkey 能够支撑实时棒球赛事的超大规模需求,为数百万粉丝提供实时统计数据和无缝的数字体验。展望未来,我们对 Memorystore for Valkey 9.1 的发布感到非常兴奋。引擎优化和延迟改进将为我们提供更强的处理能力,以应对最不可预测的比赛日流量高峰,确保粉丝获得游戏所能提供的最佳技术驱动体验。" —— 美国职业棒球大联盟软件工程高级副总裁 Rob Engel

除了体育场馆,零售行业也面临自身的严峻扩展挑战,尤其是在大型购物节假日或限时促销期间。现代电商平台依赖实时个性化推荐、动态定价和即时库存更新来保持用户参与度。即使出现几毫秒的延迟也可能破坏用户体验并影响企业收益。为了保持竞争优势,像 Target 这样的领先零售商需要超响应式的缓存层来支撑其关键的客户面向平台。

"通过使用 Google Cloud Memorystore for Valkey,Target 为个性化服务提供了超低延迟且具备弹性的缓存解决方案。我们期待利用 Valkey 9.1 的性能改进,在需求高峰期使个性化平台更快、更可扩展且更具弹性。" —— Target 高级工程经理 Scott Weide 和 Sumanth Huddar

对这种超低延迟架构的需求远不止体育和零售行业。在数字领域,银行、原生 AI 开发、数字流媒体和电信行业的组织都面临共同的挑战:需要超快速且高可用的缓存。无论是处理高频金融交易、实时提供复杂的机器学习推理、无缝传输全球视频流,还是路由海量电信数据,微秒级延迟已成为成功的新基准。

迁移到 Valkey

停止让缓存瓶颈拖慢您的关键应用。立即体验 Memorystore for Valkey 9.1 的性能、动态可扩展性和增强安全性。

  • 开始构建:通过 Google Cloud 控制台创建 Memorystore for Valkey 9.1 实例。
  • 深入了解:阅读技术文档,查看 Memorystore for Valkey 支持的完整命令列表、ACL 配置和详细功能。

发布类别:

  • 数据库