Azure Redis 缓存 基于 Redis(远程字典服务器) 软件提供内存中数据存储。 它是一个安全的数据缓存和消息传送代理,可提供对应用程序的数据的高吞吐量和低延迟访问。
支持可靠性的关键概念和最佳做法包括:
以下部分包括特定于 Azure Redis 缓存的设计注意事项、配置清单和建议的配置选项。
设计注意事项
Azure Redis 缓存服务级别协议(SLA)仅涵盖标准和高级层缓存。 未涵盖基本层。
Redis 是密钥值对的内存中缓存,默认情况下具有高可用性(HA),但基本层除外。 Azure Redis 缓存有三个层:
基本: 不建议用于生产工作负荷。 基本层非常适合:
- 单节点
- 多种尺寸
- 开发
- 测试
- 非关键工作负荷
标准:由 Microsoft 管理的双节点主配置和辅助配置中复制的缓存,具有高可用性 SLA。
高级:包括所有标准层功能,并包含以下其他功能:
- 与基本层或标准层相比,硬件和性能更快。
- 更大的缓存大小,最大为
120GB
. - 数据持久性,包括 Redis 数据库文件 (RDB) 和仅追加文件 (AOF)。
- VNET 支持。
- 群集
- 异地复制:辅助缓存位于另一个区域中,并从主要区域复制数据,以便进行灾难恢复。 若要故障转移到次要节点,需要手动取消链接缓存,然后次要节点可用于写入。 需要使用辅助节点的缓存连接字符串更新写入 Redis 的应用程序。
- 可用性区域:跨可用性区域部署缓存和副本。
注释
默认情况下,每个部署的每个分片都有一个副本。 持久化、群集和地理复制目前都被禁用于具有多个副本的部署。 节点将均匀分布在所有区域。 你的副本计数应该
>=
区域数。 - 导入和导出。
Microsoft 保证客户在至少 99.9%
的时间内可以将缓存终结点与 Microsoft 的 Internet 网关进行连接。
清单
是否在考虑复原能力的情况下配置了 Azure Redis 缓存?
- 计划更新。
- 监视缓存并设置警报。
- 在 VNET 中部署缓存。
- 评估 Redis 缓存中的分区策略。
- 配置 数据持久性 以将缓存的副本保存到 Azure 存储或使用异地复制,具体取决于业务需求。
- 在 Azure Redis 缓存的上下文中实现重试策略。
- 使用一个静态或单例实现将多路复用器连接到 Redis,并遵循最佳做法指南。
- 查看 如何管理 Azure Redis 缓存。
配置建议
浏览以下建议表,以优化 Azure Redis 缓存配置,实现服务可靠性:
建议 | DESCRIPTION |
---|---|
计划更新。 | 计划 Redis 服务器更新应用于缓存的日期和时间,这不包括 Azure 更新或虚拟机操作系统的更新。 |
监视缓存并设置警报。 | 设置异常、高 CPU、高内存使用率、服务器负荷和逐出密钥的警报,了解何时扩展缓存。 如果需要缩放缓存,请了解何时进行缩放非常重要,因为它会在缩放事件期间增加 CPU 以迁移数据。 |
在 VNET 中部署缓存。 | 让客户能够更好地控制可连接到缓存的流量。 确保子网有足够的地址空间可用于部署缓存节点和分片(群集)。 |
评估 Redis 缓存中的分区策略。 | 将 Redis 数据存储分区涉及到跨 Redis 服务器的实例拆分数据。 每个实例组成单个分区。 Azure Redis 缓存抽象化外观后面的 Redis 服务,不会直接公开它们。 实现分区的最简单方法是创建多个 Azure Redis 缓存实例并跨这些实例分散数据。 可以将每个数据项与标识符(分区键)相关联,该标识符指定存储数据项的缓存。 然后,客户端应用程序逻辑可以使用此标识符将请求路由到相应的分区。 此方案很简单,但如果分区方案发生更改(例如,如果创建了额外的 Azure Redis 缓存实例),可能需要重新配置客户端应用程序。 |
配置 数据持久性 以将缓存的副本保存到 Azure 存储或使用异地复制,具体取决于业务需求。 | 数据持久性:如果主数据库和副本重新启动,数据将自动从存储帐户加载。 异地复制:辅助缓存需要从主缓存取消链接。 辅助缓存现在将成为主要缓存,并且可以接收写入。 |
在 Azure Redis 缓存的上下文中实现重试策略。 | 大多数 Azure 服务和客户端 SDK 都包含重试机制。 这些机制不同,因为每个服务都有不同的特性和要求。 每个重试机制都针对特定的服务进行调整。 |
查看 如何管理 Azure Redis 缓存。 | 了解如何在缓存重启时发生数据丢失,以及如何测试应用程序复原能力。 |
源项目
若要识别不在高级层上的 Redis 实例,请使用以下查询:
Resources
| where type == 'microsoft.cache/redis'
| where properties.sku.name != 'Premium'