你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cache for Redis 和卓越运营
Azure Cache for Redis 基于 Redis(远程字典服务器)软件提供内存中数据存储。 这是一个安全的数据缓存和消息传送中转站,可让应用程序以较高的吞吐量、较低的延迟访问数据。
支持卓越运营的最佳实践包括:
以下部分包括特定于 Azure Cache for Redis 的设计注意事项、配置清单和建议配置选项。
设计注意事项
Azure Cache for Redis 服务级别协议 (SLA) 仅涵盖标准层和高级层缓存。 基本层未涵盖。
Redis 是键值对的内存中缓存,默认具有高可用性(基本层除外)。 Azure Cache for Redis 有三个层级:
基本层:不建议用于生产工作负载。 基本层适用于:
- 单节点
- 多个大小
- 开发
- 测试
- 非关键型工作负荷
标准层:在 Microsoft 托管的双节点主辅配置中提供复制的缓存,并提供高可用性 SLA。
高级层:包括所有标准层功能,并包括以下其他功能:
- 与基本层或标准层相比,硬件和性能更快。
- 更大的缓存大小,最高为
120GB
。 - 数据持久性,包括 Redis 数据库文件和只追加文件。
- VNET 支持。
- 群集
- 异地复制:二级缓存位于另一个区域,并从主缓存复制数据以进行灾难恢复。 要将故障转移到二级缓存,需要手动解除这些缓存的链接,然后二级缓存才可用于写操作。 向 Redis 中进行写入的应用程序将需要使用二级缓存连接字符串进行更新。
- 可用性区域:跨可用性区域部署缓存和副本。
注意
默认情况下,每个部署将为每个碎片提供一个副本。 目前,对于具有多个副本的部署,持久性、群集和地理复制都将被禁用。 你的节点将均匀地分布在所有区域。 副本数量应大于等于区域数量。
- 导入和导出。
Microsoft 保证至少 99.9%
的情况下,客户将在缓存终结点和 Microsoft 的互联网网关之间建立连接。
清单
你是否出于卓越运营考虑而配置了 Azure Cache for Redis?
- 计划更新。
- 监视缓存并设置警报。
- 在 VNET 中部署缓存。
- 在你的解决方案中使用正确的缓存类型(本地、角色中、托管、redis)。
- 根据业务需求,配置数据持久性以将缓存的副本保存到 Azure Storage 或使用异地复制。
- 使用连接多路复用器到 Redis 的一个静态或单例实现,并遵循最佳实践指南。
- 请查看如何管理 Azure Cache for Redis。
配置建议
浏览以下建议表以优化针对卓越运营的 Azure Cache for Redis 数据库配置:
建议 | 说明 |
---|---|
计划更新。 | 安排将 Redis 服务器更新应用到缓存的日期和时间,这不包括 Azure 更新,也不包括 VM 操作系统的更新。 |
监视缓存并设置警报。 | 针对异常、CPU 使用率高、内存使用率高、服务器负载和逐出的密钥设置警报,以深入了解何时缩放缓存。 如果缓存需要缩放,那么了解何时缩放非常重要,因为在迁移数据的缩放事件期间,这将增加 CPU。 |
在 VNET 中部署缓存。 | 使客户对可以连接到缓存的流量有更多的控制。 确保子网有足够的可用地址空间来部署缓存节点和分片(群集)。 |
在你的解决方案中使用正确的缓存类型(本地、角色中、托管、redis)。 | 在缓存数据时,分布式应用程序通常会实施以下一种或两种策略: - 使用专用缓存,其中的数据保存在运行应用程序或服务实例的计算机本地。 - 使用共享缓存,充当可由多个进程和计算机访问的公用源。 在这两种情况下,缓存可在客户端和服务器端执行。 通过为系统提供用户界面(例如 Web 浏览器或桌面应用程序)的进程来实现客户端缓存。 通过远程运行的提供业务服务的进程来实现服务器端缓存。 |
根据业务需求,配置数据持久性以将缓存的副本保存到 Azure Storage 或使用异地复制。 | 数据持久性:如果主数据和副本重新启动,数据将从存储帐户中自动加载。 异地复制:二级缓存需要与主缓存断开链接。 次要部分现在将成为主要部分,并可以接收写操作。 |
请查看如何管理 Azure Redis 缓存。 | 了解在重新启动缓存时如何发生数据丢失,以及如何测试应用程序的弹性。 |
源项目
若要识别不在高级层上的 Redis 实例,请使用以下查询:
Resources
| where type == 'microsoft.cache/redis'
| where properties.sku.name != 'Premium'