在执行某些任务时,高性能的可扩缩 Web 应用通常会先使用内存中的分布式数据缓存,当其不可用时才会使用可靠的永久性存储空间。我们建议您使用 Memorystore for Redis 作为缓存服务。请注意,Memorystore for Redis 不提供免费层级。如需了解详情,请参阅 Memorystore 价格。
开始之前,请确保您的应用不会超出 Memorystore for Redis 配额。
何时使用内存缓存
会话数据、用户偏好设置以及网页查询返回的其他数据都非常适合进行缓存。通常,如果频繁运行的查询所返回的结果集不需要立即显示在您的应用中,便可以缓存结果。如此,后续请求可以检查缓存,只有当结果缺失或过期时才会查询数据库。
如果您将某个值仅存储在 Memorystore 中,而没有将其备份到永久性存储空间,请确保在该值过期及从缓存中移除时,您的应用仍可正常运作。例如,如果用户会话数据的突然缺失会导致会话出现故障,则应考虑除了在 Memorystore 中存储该数据之外,还应将其存储在数据库中。
了解 Memorystore 权限
与 Google Cloud 服务之间进行的每一次交互操作都需要经过授权。例如,如需与 Memorystore 托管的 Redis 数据库进行交互,您的应用需要提供有权访问 Memorystore 的帐号的相应凭据。
默认情况下,您的应用会提供 App Engine 默认服务帐号的凭据,该帐号有权访问与您应用同属一个项目中的数据库。
如果满足以下任何条件,则您需要使用明确提供凭据的备用身份验证技术:
您的应用和 Memorystore 数据库位于不同的 Google Cloud 项目中。
您已更改分配给默认 App Engine 服务帐号的角色。
如需了解备用身份验证技术,请参阅为服务器到服务器的生产应用设置身份验证。
使用 Memorystore 概览
如需在您的应用中使用 Memorystore,请执行以下操作:
设置 Memorystore for Redis,此操作需要您在 Memorystore 上创建 Redis 实例并创建无服务器 VPC 访问通道,以供您的应用与 Redis 实例通信。
安装适用于 Redis 的客户端库并使用 Redis 命令缓存数据。
Memorystore for Redis 与适用于 Redis 的任何客户端库都兼容。本指南介绍如何使用 node_redis 客户端库从应用中发送 Redis 命令。
设置 Memorystore for Redis
如需设置 Memorystore for Redis,请执行以下操作:
在 Memorystore 中创建 Redis 实例。
当系统提示您为 Redis 实例选择地区时,请选择您的 App Engine 应用所在的地区。
记下您创建的 Redis 实例的 IP 地址和端口号。您在自己的代码中创建 Redis 客户端时,将会用到这些信息。
将 App Engine 连接到 VPC 网络。您的应用只能通过 VPC 连接器与 Memorystore 通信。
请务必按照将应用配置为使用连接器中的说明,将 VPC 连接信息添加到
app.yaml
文件中。
安装依赖项
要使 node_redis 客户端库可供在 App Engine 中运行的应用使用,请将此库添加到该应用的package.json
文件中。例如:
详细了解如何为 Node.js 应用指定依赖项。
创建 Redis 客户端
如需与 Redis 数据库进行交互,您的代码需要创建 Redis 客户端才能管理与 Redis 数据库的连接。以下部分介绍如何使用 node_redis 客户端库创建 Redis 客户端。
指定环境变量
node_redis 客户端库使用两个环境变量为您的 Redis 数据库组建网址:
- 用于标识您在 Memorystore 中创建的 Redis 数据库的 IP 地址的变量。
- 用于标识您在 Memorystore 中创建的 Redis 数据库的端口号的变量。
我们建议您在应用的 app.yaml
文件中定义这些变量,而不是直接在您的代码中定义这些变量。这样可以更轻松地在不同的环境(例如本地环境和 App Engine)中运行您的应用。
app.yaml
文件中:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
导入 node_redis 并创建客户端
在定义了REDISHOST
和 REDISPORT
环境变量后,您可以使用以下行导入 node_redis 库并创建 Redis 客户端:
使用 Redis 命令在缓存中存储和检索数据
虽然 Memorystore Redis 数据库支持大多数 Redis 命令,但您只需使用几个命令即可在缓存中存储和检索数据。下表建议了一些可用于缓存数据的 Redis 命令。如需了解如何从您的应用调用这些命令,请参阅客户端库的文档。
任务 | Redis 命令 |
---|---|
在数据缓存中创建一个条目, 并为该条目设置到期时间 |
SETNX MSETNX |
从缓存中检索数据 | GET MGET |
替换现有的缓存值 | SET MSET |
递增或递减缓存数值 | INCR INCRBY DECR DECRBY |
从缓存中删除条目 | DEL UNLINK |
支持与缓存进行并发交互 | 请参阅有关 Redis 事务的详细信息。 |
测试更新
当您在本地测试应用时,请考虑运行 Redis 的本地实例以避免与生产数据交互(Memorystore 不提供模拟器)。如需在本地安装并运行 Redis,请按照 Redis 文档中的说明进行操作。请注意,目前无法在 Windows 上本地运行 Redis。
部署应用
一旦您的应用能够在本地开发服务器上无错误地正常运行,请执行以下操作:
如果应用无错误地正常运行,请使用流量拆分功能为更新后的应用缓慢增加流量。请先仔细监控应用是否存在任何数据库问题,然后再将更多流量路由到更新后的应用。