问题描述
我的WordPress站点配置了每天凌晨自动重启服务器。但最近发现一个奇怪的问题:每次重启后,站点都会白屏,前端没有任何报错信息,必须手动清除Redis数据库才能恢复正常访问。
这个问题持续了有三天时间,每天凌晨自动重启后都要早上才发现需要进服务器手动处理一次,非常影响使用体验。
排查过程
首先查看Nginx错误日志,发现了关键线索:
objectcache.notice: Cache metadata not found, skipping integrity protection flush because `strict` mode is disabled
这条日志来自Object Cache Pro插件,说明Redis中的缓存元数据丢失了。通过阅读插件源码,我理解了启动流程:
- WordPress加载时,Object Cache Pro从Redis读取元数据(metadata)
- 元数据用于缓存完整性校验
- 如果元数据丢失,且
strict=false(默认配置),插件只记录日志不做处理,导致白屏 - 如果
strict=true,插件会自动清空缓存并重建
那为什么元数据会丢失?检查宝塔面板的Redis配置后发现:
- AOF持久化:关闭
- RDB持久化:0秒/0条(永远不会触发)
根因找到了:Redis没有开启任何持久化机制,服务器重启后内存中的数据全部丢失。
为什么之前没问题,现在才有?
Object Cache Pro在较新版本中引入了metadata完整性检查机制。旧版本在Redis数据丢失后会直接重建缓存,不会有问题。新版本检测到metadata丢失后会触发完整性保护,如果配置不当(strict=false)就会导致白屏。
解决方案
1. 开启Redis AOF持久化(根本解决)
- 登录宝塔面板 → 软件商店 → Redis → 设置
- 找到 AOF持久化,改为 开启
- appendfsync 保持 everysec(每秒同步,性能和安全的平衡)
- 点击保存,重启Redis服务
AOF持久化会记录每个写操作到日志文件,Redis重启时自动重放恢复数据,最多只丢失1秒的数据。
2. 调整Object Cache Pro配置(辅助容错)
在wp-config.php中调整Redis配置:
define('WP_REDIS_CONFIG', [
'token' => 'your_token_here',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
'maxttl' => 21600,
'timeout' => 1.0,
'read_timeout' => 1.0,
'retries' => 5, // 重试次数增加到5
'retry_interval' => 500, // 重试间隔增加到500ms
'prefetch' => false,
'split_alloptions' => true,
'strict' => true, // 改为true:元数据丢失时自动清空缓存
'debug' => false,
'analytics' => false,
'save_commands' => false,
]);
关键配置说明:
strict => true:元数据丢失时自动清空缓存并重建,而不是留下不一致的状态retries => 5和retry_interval => 500:增加连接重试次数和间隔,防止Redis启动慢导致连接失败
修复效果
开启AOF持久化后,服务器重启时Redis会自动恢复数据,Object Cache Pro能找到元数据,站点正常启动,白屏问题彻底解决。
总结
对于使用Redis缓存的WordPress站点,建议:
- 开启Redis AOF持久化,确保重启后数据不丢失
- 配置Object Cache Pro的
strict=true模式,增加容错能力 - 定期检查Redis持久化文件是否正常生成





修复服务器重启后WordPress白屏问题:等您坐沙发呢!