英語で読む

次の方法で共有

内存管理

本文介绍 Azure Redis 缓存中内存管理的最佳做法。

选择正确的逐出策略

选择适合应用程序的逐出策略。 Azure Cache for Redis 的默认策略为 volatile-lru,这意味着只有利用 EXPIRE 等命令设置了生存时间 (TTL) 值的键才符合逐出条件。 如果没有键具有 TTL 值,则系统不会逐出任何密钥。 如果希望系统允许在内存压力下逐出任何密钥,请考虑该 allkeys-lru 策略。

设置密钥过期日期

由于内存压力而逐出可能会导致服务器上的负载增加。 设置密钥的过期值,以主动删除密钥,而不是等待内存压力。 有关详细信息,请参阅 Redis EXPIREEXPIREAT 命令的文档。

最小化内存碎片

大型键值可能会使内存在逐出时碎片化,并可能导致内存使用率和服务器负载过高。

监视内存使用量

监视内存使用情况,以确保不会耗尽内存。 创建警报 ,让你有机会在出现问题之前缩放缓存。

配置 maxmemory-reserved 设置

配置 maxmemory-reserved 设置以最大程度地提高系统响应能力。 足够的预留设置对于写入密集型工作负荷尤其重要,或者,如果要在缓存中存储值 100 KB 或更多。

  • maxmemory-reserved 设置用于配置群集中预留给非缓存操作(例如故障转移期间的复制)的每个实例的内存量(以 MB 为单位)。 设置此值能够在负载变化时具有更一致的 Redis 服务器体验。

  • maxfragmentationmemory-reserved 设置用于配置群集中预留以容纳内存碎片的每个实例的内存量(以 MB 为单位)。 设置此值后,当缓存已满或接近满的状态并且碎片比率很高时,Redis 服务器体验更加稳定。

当为这些操作保留内存时,无法用于存储缓存数据。 默认情况下,创建缓存时,将大约 10% 的可用内存保留给maxmemory-reserved,另外 10% 保留给maxfragmentationmemory-reserved。 如果具有写入密集型负载,可以增加保留的量。

maxmemory-reservedmaxfragmentationmemory-reserved 允许的范围是 maxmemory 的 10%-60%。 如果尝试将这些值设置为低于 10% 或高于 60%,则系统会重新评估这些值,并将其设置为最小值 10% 和最大值 60%。

纵向扩展或缩减缓存时,maxmemory-reservedmaxfragmentationmemory-reserved 设置都会自动根据缓存大小成比例进行缩放。 例如,如果在 maxmemory-reserved 6 GB 缓存上设置为 3 GB,并且缩放到 12 GB 缓存,则设置会在缩放过程中自动更新为 6 GB。 如果缩小,则会发生相反的情况。

请考虑更改 maxmemory-reservedmaxfragmentationmemory-reserved 内存预留值可能会如何影响已经运行的大量数据缓存。 例如,如果你有一个 53-GB 缓存,其保留值设置为 10% 最小值,则系统的最大可用内存约为 42 GB。 如果当前used_memory值或used_memory_rss值高于 42 GB,则系统必须逐出数据,直到这两者都used_memoryused_memory_rss低于 42 GB。

逐出可能会增加服务器负载和内存碎片。 有关缓存指标(例如,used_memoryused_memory_rss)的更多信息,请参阅创建自己的指标

注意

使用 Azure PowerShell、Azure CLI 或 REST API 以编程方式纵向扩展或缩减缓存时,任何包含 maxmemory-reservedmaxfragmentationmemory-reserved 设置都将被忽略为更新请求的一部分。 只会遵循缩放更改。 缩放作完成后,可以更新内存设置。