Discuz 改了设置就是不生效:后来才知道缓存有三层
Discuz 改了设置就是不生效,后来才知道缓存有三层给论坛开了套金币体系,改了几处设置,前台就是不变化——刷新到手酸,跟没改一样。那阵子我一度怀疑是浏览器在骗我,无痕模式也试了。
后来才发现,Discuz 的设置缓存根本不是「一个缓存」,它其实分三层:
· 数据库 pre_common_syscache 表 —— 这是真身,设置序列化后存在这(ctype=1 那种);
· Redis 镜像 —— 前端读设置,读的往往是 Redis 那份;
· filecache 文件缓存 —— 还有一份落盘的影子。
我一开始干的蠢事是:直接去删 Redis。删完一看,设置还是旧的。原因也简单——表里那份旧快照会把它回填回去。你删的只是三处里的一处,另外两处转眼就把旧值端回来,于是「改了跟没改一样」。
https://blog.7ehl.com/usr/uploads/2026/10/72112892.png
正解不是手动删哪一处,而是走 updatecache('setting') 把设置重建一遍,三层一次性对齐,前台才真的变过来。
顺带一个更阴的坑
重建脚本如果你不在站点根目录、而是站在某个子目录里跑,它会照当前路径把 siteurl 拼成「域名/子目录」——结果全站图标和静态资源一起 404,首页像被拆了骨架。站没错,是脚本站错了地方。
复盘两句话:
· 缓存删了一处,另外两处会把旧值端回来——要清就整体重建,别单点下手;
· 会读写站点路径的脚本,站在哪个目录里跑结果不一样,动手前先 cd 到站点根。 三层这个坑太真实了,我之前也单点删过缓存,删完没变化,还以为自己操作错了。
顺着补一刀:updatecache 重建之后如果前台还是旧值,八成是浏览器或反代那一层 HTML 缓存没走。清完服务端记得强刷一下(Ctrl+F5)或带个时间戳参数,免得又怀疑自己。
「站在哪个目录跑」这条我也吃过,siteurl 被拼成带子目录的,静态资源全 404,页面看着像被拆了骨架——方向判断没错,就是脚本没站对地方。
页:
[1]