配置用于 Redis 的 Azure 缓存

已完成

体育统计信息开发团队已确定缓存可以显着提高最近请求数据的性能。 下一步是创建并配置用于 Redis 的 Azure 缓存实例。

创建并配置用于 Redis 的 Azure 缓存实例

可使用 Azure 门户、Azure CLI 或 Azure PowerShell 创建 Redis 缓存。 需要确定几个参数才能根据需要正确配置缓存。

名称

Redis 缓存需要全局唯一名称。 该名称在 Azure 中必须唯一,因为它用于生成面向公众的 URL 以与服务连接和通信。

该名称必须介于 1 到 63 个字符之间,由数字、字母和 - 字符组成。 缓存名称的开头或末尾不能是 - 字符,并且连续的 - 字符是无效的。

资源组

用于 Redis 的 Azure 缓存是托管资源,需要“资源组”所有者。 可创建新资源组,也可以使用有权访问的订阅中的现有资源组。

位置

需要通过选择 Azure 区域来确定 Redis 缓存的物理位置。 请始终将缓存实例和应用程序放在同一区域。 连接到不同区域中的缓存可能会明显提高延迟并降低可靠性。 若要连接到 Azure 外部的缓存,请选择与数据使用者应用程序的运行位置相靠近的位置。

重要

尽可能将 Redis 缓存放在更靠近数据“使用者”的位置。

定价层

如上一个单元中所述,Azure Cache for Redis 有三个可用的定价层。

  • 基本:基本缓存适用于开发/测试。 其仅限于一台服务器、53 GB 的内存和 20,000 个连接。 此服务层没有 SLA。
  • 标准:此为生产缓存,支持复制且包含 99.99% SLA。 它支持两个服务器(主/辅助),并具有与基本层相同的内存/连接限制。
  • 高级:此为企业层,基于标准层构建,包括持久性、群集和横向扩展缓存支持。 高级是性能最高的层,具有高达 530 GB 的内存和 40,000 个并发连接数。

通过为基本/标准层从 C0-C6 中选择缓存级别,为高级层从 P0-P4 中选择缓存级别,可控制每层可用的缓存内存量。 有关完整详细信息,请查看定价页

提示

Microsoft 建议为生产系统使用标准层或高级层。 基本层是不提供数据复制且没有 SLA 保障的单节点系统。 此外,使用至少一个 C1 缓存。 事实上,C0 缓存面向的是简单开发/测试方案,因为它们的 CPU 核心是共享的,且内存很少。

使用高级层可以通过两种方式来保存数据,以提供灾难恢复:

  1. RDB 持久性创建定期快照,在发生故障时,可以使用该快照重新生成缓存。

    Azure 门户的屏幕截图,其中显示了新 Redis 缓存实例上的 RDB 暂留选项。

  2. AOF 暂留将每个写入操作保存到日志,该日志每秒至少保存一次。 AOF 创建的文件比 RDB 的更大,但数据丢失较少。

    Azure 门户的屏幕截图,其中显示了新 Redis 缓存实例上的 AOF 暂留选项。

其他一些设置仅适用于高级层。

虚拟网络支持

如果创建高级层 Redis 缓存,可将其部署到云中的虚拟网络。 缓存仅可用于同一虚拟网络中的其他虚拟机和应用程序。 当服务和缓存都托管于 Azure 中或通过 Azure 虚拟网络 VPN 连接时,部署到虚拟网络可提供更高级别的安全性。

群集支持

可通过高级层 Redis 缓存实现群集,从而在多个节点之间自动拆分数据集。 若要实施群集,请将分片数指定为最多 10 个。 产生的成本是原始节点的成本乘以分片数。

访问 Redis 实例

Redis 支持一组已知的命令。 命令通常以 COMMAND parameter1 parameter2 parameter3 的形式发出。

下面是一些可用的常见命令:

命令 说明
ping 对服务器进行 Ping 操作。 返回“PONG”。
set [key] [value] 在缓存中设置键/值。 成功时返回“OK”。
get [key] 从缓存中获取值。
exists [key] 如果缓存中存在该键,则返回“1”,否则返回“0”
type [key] 返回与给定键的值相关联的类型。
incr [key] 以一为增量递增与键关联的给定值。 该值必须是整数或双精度值。 返回新值。
incrby [key] [amount] 以指定的数量为增量递增与关联的给定值。 该值必须是整数或双精度值。 返回新值。
del [key] 删除与关联的值。
flushdb 删除数据库中的所有键和值。

Redis 提供一个命令行工具 (redis-cli),使用该工具可以直接体验这些命令。 下面是一些示例。

> set somekey somevalue
OK
> get somekey
"somevalue"
> exists somekey
(string) 1
> del somekey
(string) 1
> exists somekey
(string) 0

下面是 INCR 命令的用法示例。 这些命令非常方便,因为它们在使用缓存的多个应用程序之间提供原子递增。

> set counter 100
OK
> incr counter
(integer) 101
> incrby counter 50
(integer) 151
> type counter
(integer)

将过期时间添加到值

缓存非常重要,因为它可让我们在内存中存储常用的值。 但是,我们还需要通过某种方式使陈旧的值过期。 Redis 通过将生存时间 (TTL) 应用到某个密钥来处理过期。

TTL 过后,会自动删除该键,就像是发出了 DEL 命令一样。 下面是有关 TTL 过期的一些说明。

  • 可以使用秒或毫秒精度设置过期时间。
  • 过期时间解析度始终为一毫秒。
  • 即使 Redis 服务器处于停用状态,时间也会流逝。
  • 过期信息会被复制并保存在磁盘上。
  • Redis 保存密钥到期日期。

下面是过期时间的示例:

> set counter 100
OK
> expire counter 5
(integer) 1
> get counter
100
... wait ...
> get counter
(nil)

从客户端访问 Redis 缓存

要连接到用于 Redis 的 Azure 缓存实例,将需要一些信息。 客户端需要主机名、端口和缓存的访问密钥。 可以在 Azure 门户中通过“设置”>“访问密钥”页检索此信息。

  • 主机名是缓存的公共 Internet 地址,该地址是使用缓存名称创建的,例如 sportsresults.redis.cache.windows.net

  • 访问密钥充当缓存的密码。 创建了两个密钥:主密钥和辅助密钥。 可以使用任一密钥。两者都会提供,以防你需要更改主密钥。 可将所有客户端切换到辅助密钥,然后重新生成主密钥。 但所有使用原始主密钥的应用程序都会受阻。 Microsoft 建议定期重新生成密钥,就像定期更改个人密码一样。

警告

访问密钥应视为机密信息,请像对待密码一样对待它们。 获取访问密钥的任何人可以针对你的缓存执行任何操作!