【问题标题】:Does Redis's allkeys-lru maxmemory policy require keys to have expiration set?Redis 的 allkeys-lru maxmemory 策略是否要求键具有过期设置?
【发布时间】:2023-03-14 22:55:01
【问题描述】:

Redis 的 allkeys-lru maxmemory 策略是否要求数据库中的所有键都设置过期时间?

没有设置过期时间的故障转移是什么?

【问题讨论】:

  • 它将杀死最近最少使用的非过期密钥。我发现了这一点,因为 AWS ElastiCache 默认为 volatile-lru,我们的空间不足,切换到 allkeys-lru 很好地解决了这个问题。
  • @ceejayoz 我一直在使用allkeys-lru,有时似乎无法删除下一个键所需的空间,并且redis崩溃
  • 这看起来很奇怪,不符合我的经验或文档。您确定配置更改确实有效吗?在这些崩溃之一之后,日志会说什么?
  • @ceejayoz 我查看了日志,里面只有启动日志 - 没有关于崩溃的内容。我在 redis-cli 上执行“信息”以检查它是否有效……确实如此。 used_memory_peak_rss 远高于 maxmemory... 可能有内存碎片?
  • 检查您的主服务器系统日志,特别关注显示oom 的任何内容。我敢打赌,您的服务器在 Redis 之前内存不足,因此内存不足的杀手正在终止 Redis(作为一个内存繁重的进程)。

标签: php apache redis


【解决方案1】:

allkeys-* 驱逐策略不关心 TTL。

应将崩溃和意外行为(看着你@ceehayoz)报告给项目的 repo,尽管 EC 是一项服务,并且他们使用的 Redis 版本可能与官方 OSS 项目相同,也可能不同。

【讨论】:

  • 您可以选择与您的 Elasticache 实例一起使用的 Redis 版本,然后它会崩溃(用词不当 - 我没有说它崩溃了,我们的 Laravel 安装无法存储更多会话并抛出my 案例中的错误)是预期的行为(只是我不属于的行为)。按照我的理论,Redis 被 OOM 杀死不应该报告给 Redis 项目,因为它与他们无关。
  • 啊 - 好的,我放心了,感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2015-04-20
相关资源
最近更新 更多