解决 WP 站点健康提示 “Redis uses the noeviction policy”

作者:WenM

更新于:2025年2月26日 21:25

解决 WP 站点健康提示 “Redis uses the noeviction policy”

如果 WordPress 网站使用了 Redis 对象缓存,如 Object Cache Pro 等插件,那么 WordPress 的站点健康检查页面中可能会提示推荐的改进: “Redis uses the noeviction policy”。那么这是什么意思,它会造成什么影响以及如何解决?


问题原因及影响

这条提示意味着 Redis 当前的内存淘汰策略设置为 noeviction,即当 Redis 的可用内存耗尽时,不会自动清理旧数据,而是直接拒绝新的写入请求。这可能会导致 WordPress 站点在 Redis 资源耗尽时出现性能问题,甚至崩溃。

解决方案

修改 Redis 淘汰策略

建议将 Redis 的淘汰策略更改为 allkeys-lruvolatile-lru,以便在内存不足时自动删除旧数据。

编辑 Redis 配置文件 redis.conf(通常位于 /etc/redis/redis.conf):

找到 maxmemory-policy 相关行,建议修改为:

maxmemory-policy allkeys-lru

说明: maxmemory-policy 在默认情况下值为 noeviction,以下为可用的策略。

  • noeviction:不会驱逐键,但是当您尝试执行会缓存新数据的命令时,服务器将返回一个错误。如果您的数据库使用复制,则此条件仅适用于主数据库。请注意,仅读取现有数据的命令仍能正常工作。
  • allkeys-lru:驱逐最近最少使用(LRU)的键。
  • allkeys-lfu:驱逐最不经常使用(LFU)的键。
  • allkeys-random:随机驱逐键。
  • volatile-lru:驱逐设置了过期字段为真的键中最近最少使用的那些。
  • volatile-lfu:驱逐设置了过期字段为真的键中最不经常使用的那些。
  • volatile-random:仅当键设置了过期字段为真时,随机驱逐这些键。
  • volatile-ttl:驱逐设置了过期字段为真的键中剩余生存时间(TTL)值最短的那些。

如果没有键设置过期字段为真,或者对于 volatile-ttl 策略来说,如果没有键设置了生存时间值,则volatile-xxx策略的行为类似于noeviction(更多相关信息)。

保存后,重启 Redis 使其生效:

sudo systemctl restart redis

如果使用宝塔面板,可在面板提供的设置界面中修改配置文件与重启 Redis 。

在 Object Cache Pro 插件配置中设置合理的最大生存时间

define('WP_REDIS_CONFIG', [
    'maxttl' => 86400 * 7, // 缓存最大生存周期,7天
]);

对于大部分网站而言,推荐如上设置 7 天。可查看更多关于 Object Cache Pro 插件配置的说明

验证修改是否生效

在 WordPress 站点健康检查中重新运行检测,应该不会再出现该警告。

© 版权声明

本文由站长帮(zhanzhangb.cn)发布,保留所有权利。

未经明确书面许可,不得转载、摘编本站内容。对于侵权行为,我们将保留追究法律责任的权利。