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

这条提示意味着 Redis 当前的内存淘汰策略设置为 noeviction
,即当 Redis 的可用内存耗尽时,不会自动清理旧数据,而是直接拒绝新的写入请求。这可能会导致 WordPress 站点在 Redis 资源耗尽时出现性能问题,甚至崩溃。
解决方案
修改 Redis 淘汰策略
建议将 Redis 的淘汰策略更改为 allkeys-lru
或 volatile-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 站点健康检查中重新运行检测,应该不会再出现该警告。