你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 托管 Redis (预览版)开发

连接复原能力和服务器负载

开发客户端应用程序时,请务必考虑与连接复原能力管理服务器负载相关的最佳做法。

考虑更多键和较小的值

Azure 托管 Redis (预览版)最适合使用较小的值。 若将数据分布到多个键,请考虑将较大的数据块划分为较小的区块。 有关理想值大小的详细信息,请参阅这篇文章

请求或响应大小过大

请求/响应过大可能导致超时。 例如,假设你在客户端上配置的超时值为 1 秒。 你的应用程序(使用相同的物理网络连接)的同时请求两个键 (例如,A 和 B)。 大多数客户端支持对请求进行“管道操作”,使得请求“A”和“B”可以逐个发送,而无需等待响应。 服务器会按相同顺序将响应发送回来。 如果响应“A”较大,可能会消耗掉后续请求的大部分超时时间。

在以下示例中,请求“A”和“B”快速发送到服务器。 服务器开始快速发送响应“A”和“B”。 由于数据传输需要时间,即使服务器的响应速度很快,响应“B”也必须等到响应“A”超时。

|-------- 1 Second Timeout (A)----------|
|-Request A-|
     |-------- 1 Second Timeout (B) ----------|
     |-Request B-|
            |- Read Response A --------|
                                       |- Read Response B-| (**TIMEOUT**)

此请求/响应很难度量值。 可对客户端代码进行检测,以跟踪大型请求和响应。

针对大型响应的解决方法各不相同,但是包括:

  • 优化应用程序以处理大量的小值,而不是处理少量的大值。
  • 增加虚拟机 (VM) 的大小以获得更高的带宽功能
    • 提高客户端或服务器 VM 上的带宽可以缩短较大响应的数据传输时间。
    • 将两台计算机上的网络用量与当前 VM 大小的限制进行比较。 只提高服务器上的带宽,或者只提高客户端上的带宽,都不足以解决问题。
  • 增加应用程序使用的连接对象数。
    • 使用轮询方法通过不同的连接对象发出请求。

使用管道

尝试选择支持 Redis 管道的 Redis 客户端。 管道有助于高效利用网络并尽可能获取最佳吞吐量。

避免高开销的操作

某些 Redis 操作(如 KEYS 命令)开销很高,应避免使用。 有关长时间运行命令的一些注意事项,请参阅长时间运行的命令

选择适当的层级

Azure 托管 Redis 提供内存优化层、均衡层、计算优化层和闪存优化层。 在此处详细了解如何选择层。 建议进行性能测试以选择适当的层级,并验证连接设置。 有关更多信息,请参阅性能测试

选择适当的可用性模式

Azure 托管 Redis 提供启用或禁用高可用性配置的选项。 禁用高可用性模式时,不会复制 AMR 实例的数据,因此 Redis 实例在维护期间将不可用。 在计划或非计划维护期间,AMR 实例中的所有数据也将丢失。 建议仅对开发或测试工作负载禁用高可用性。 由于缺少数据复制,因此具有高可用性的 Redis 实例的性能也可能较低,复数复制对于在主数据分片和副本数据分片之间分配负载至关重要。

客户端与 Redis 实例位于同一区域

将 Redis 实例和应用程序定位在同一区域中。 连接到不同区域中的 Redis 可能会明显增大延迟并降低可靠性。

虽然可以从 Azure 外部进行连接,但不建议这样做,尤其是使用 Redis 加快应用程序的速度或提高数据库性能时。 如果仅将 Redis 服务器用作键/值存储,那么延迟可能不是主要问题。

依赖主机名而不是公共 IP 地址

分配到 AMR 的公共 IP 地址可能会因缩放操作或后端改进而发生变化。 建议依赖主机名,而不依赖显式公共 IP 地址。

使用 TLS 加密

默认情况下,Azure 托管 Redis 要求使用 TLS 加密通信。 目前支持 TLS 版本 1.2 和 1.3。 如果客户端库或工具不支持 TLS,则可以启用未加密的连接。

监视内存使用情况、CPU 使用指标、客户端连接和网络带宽

在生产环境中使用 Azure 托管 Redis 实例时,我们建议为“已用内存百分比”、“CPU”指标、“连接的客户端”设置警报。 如果这些指标一直高于 75%,请考虑将实例缩放到更大的内存或更好的吞吐量层。 有关更多详细信息,请参阅“何时缩放”

考虑启用数据持久性或数据备份

Redis 默认针对临时数据而设计,这意味着在极少数情况下,你的数据可能会因各种情况(例如维护或中断)而丢失。 如果应用程序对数据丢失很敏感,建议使用数据导出操作启用数据持久性或定期数据备份。

数据持久化功能旨在当缓存出现故障时自动为数据提供快速恢复点。 通过将 RDB 或 AOF 文件存储在装载到缓存实例的托管磁盘中,可以实现快速恢复。 磁盘上的持久性文件不能被用户访问,也不能供任何其他 AMR 实例使用。

许多客户希望使用持久化来定期备份其缓存中的数据。 不建议以这种方式使用数据持久化。 请使用导入/导出功能。 可以将 RDB 格式的数据副本直接导出到选择的存储帐户中,并根据需要随时触发数据导出。 然后,可以将这些导出的数据导入到任何 Redis 实例。 可以通过门户或使用 CLI、PowerShell 或 SDK 工具来触发导出。

特定于客户端库的指南

有关详细信息,请参阅“Azure 托管 Redis 客户端库”