测试站调试时敲了一次 flushdb,线上首页缓存同时被清空,数据库 QPS 从 800 冲到 6000,持续了四十秒才缓过来。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
define('WP_REDIS_DATABASE', 3);
define('WP_CACHE_KEY_SALT', 'staging:');
# 或在 redis.conf 用 ACL 禁用 flushall
两个环境的 Redis 连的是同一个实例同一个 db,键名也没有前缀区分。测试站的运维脚本默认清空当前库,一执行就波及线上。这一点先确认清楚,后面就不用反复试。
「Redis 多环境共用」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,给每个环境分配独立的 db 编号,测试用 db 3,线上用 db 0;键名统一加环境前缀,方便肉眼确认;测试站禁用 flushall 这类命令,用 ACL 限制;清理缓存改成按前缀扫描删除,别整库清。
改完照着核一遍,测试站清缓存后线上键数量不变,Redis 监控里线上命中率没有波动。
