Redis 缓存——什么时候可以触发大规模驱逐?
Redis caches - when can large evictions be triggered?
我们在 Azure Standard 2.5gb
上有一个 Redis 缓存。我们观察到以下行为:
我们时不时地观察到内存使用量大幅下降。似乎有很多资源正在被逐出。
注意事项:
- 驱逐政策是 LRU
- 可用缓存大小为 2.5gb
- 没有应用程序代码会占用如此大量的内存(最大的对象约为 80kb,大多数都小得多)
- 观察到的内存下降代表数以万计的键
- 我们很少在缓存对象上使用明确的到期日期,即使我们这样做,它们也总是小于 1 小时。
我的问题是,除了应用程序逻辑显式驱逐键外,Redis 是否还有其他情况会驱逐大量键?
您能否将您的 redis 逐出策略更改为 noeviction
,看看是否能解决您的问题?这样做意味着您必须自己管理所有内容。 https://redis.io/topics/lru-cache 有更多详细信息。
内存清理可能不代表逐出。
你说"it appears"很多资源都被驱逐了,但如果你只是靠回收的内存做那种表象,那你可能是在追鬼。您是否检查过此图如何与 Azure 门户中提供的 Total Keys
指标重叠?叠加这两个系列应该可以让您看到内存回收 真的 是由于驱逐还是由于其他进程(例如 Azure)可能会定期在缓存上调用 MEMORY PURGE清理脏页的实例?
我们在 Azure Standard 2.5gb
上有一个 Redis 缓存。我们观察到以下行为:
我们时不时地观察到内存使用量大幅下降。似乎有很多资源正在被逐出。
注意事项:
- 驱逐政策是 LRU
- 可用缓存大小为 2.5gb
- 没有应用程序代码会占用如此大量的内存(最大的对象约为 80kb,大多数都小得多)
- 观察到的内存下降代表数以万计的键
- 我们很少在缓存对象上使用明确的到期日期,即使我们这样做,它们也总是小于 1 小时。
我的问题是,除了应用程序逻辑显式驱逐键外,Redis 是否还有其他情况会驱逐大量键?
您能否将您的 redis 逐出策略更改为 noeviction
,看看是否能解决您的问题?这样做意味着您必须自己管理所有内容。 https://redis.io/topics/lru-cache 有更多详细信息。
内存清理可能不代表逐出。
你说"it appears"很多资源都被驱逐了,但如果你只是靠回收的内存做那种表象,那你可能是在追鬼。您是否检查过此图如何与 Azure 门户中提供的 Total Keys
指标重叠?叠加这两个系列应该可以让您看到内存回收 真的 是由于驱逐还是由于其他进程(例如 Azure)可能会定期在缓存上调用 MEMORY PURGE清理脏页的实例?