Redis缓存-什么时候可以触发大型逐出?

时间:2018-12-03 15:38:09

标签: azure redis azure-redis-cache

我们在Azure Standard 2.5gb上有一个Redis缓存。我们观察到以下行为:

enter image description here

我们时不时地观察到内存使用量的大幅下降。似乎有大量资源被驱逐。

注意事项:

  • 驱逐政策是LRU
  • 可用的缓存大小为2.5gb
  • 没有应用程序代码可以驱逐出如此大的内存(最大的对象约为80kb,而大多数则明显较小)
  • 观察到的内存丢失代表数万个键
  • 我们很少在缓存的对象上使用明确的到期日期,当我们这样做时,它们总是<1小时。

我的问题是,除了应用程序逻辑显式退出密钥之外,Redis是否还有其他情况会驱逐大量密钥?

2 个答案:

答案 0 :(得分:7)

内存清除可能不代表驱逐。

您说“似乎”有大量资源在被驱逐,但是如果您只是依靠回收的内存来获得这种外观,则可能是在追赶幽灵。您是否检查过此图如何与Azure门户中可用的Total Keys指标重叠?覆盖这两个系列应该可以使您了解内存回收确实是由于驱逐还是由于其他进程(例如Azure)可能在缓存实例上定期调用MEMORY PURGE进行清理脏页?

答案 1 :(得分:0)

您可以将重新部署驱逐策略更改为with input(id, col, col_1, val, val_1) as ( select 1, 'ABC', 'DEF', 10, 20 from dual union all select 2, 'GHI', 'JKL', 30, 40 from dual ) select id, ord, c, v from input unpivot ( (c, v) for ord in ((col, val) as 1, (col_1, val_1) as 2)) ; ID ORD C V ---------- ---------- --- ---------- 1 1 ABC 10 1 2 DEF 20 2 1 GHI 30 2 2 JKL 40 ,看看是否可以解决您的问题吗?这样做意味着您将必须自己管理所有内容。 https://redis.io/topics/lru-cache有更多详细信息。