W3 Total Cache默认把缓存的页面放在磁盘上。我的廉价vps是机械硬盘加ssd缓存,性能上差一些,如何把插件缓存的数据放在内存里呢?这样做对加快博客的浏览速度很有帮助。
一,tmpfs(Temporary File System,临时文件系统)
我们把博客缓存数据放到内存里需要使用tmpfs技术。
它是 Linux 内核自带的一种非常神仙的顶级存储技术。简单来说,它就像是在你的服务器物理内存(RAM)里硬生生“劈”出来一块空间,然后把它伪装成一个普通的硬盘分区挂载到系统里。你可以像读写普通文件夹一样去用它,但它的底层速度是纯粹的物理内存速度。
二,具体操作如下:
1,在ssh端分别执行一下命令行:
# 1. 强行清空现有的机械硬盘缓存文件
rm -rf /www/wwwroot/你的网站域名/wp-content/cache/
# 2. 将该缓存目录直接挂载为 tmpfs 内存盘(200M可以根据自己实际情况填写)
mount -t tmpfs -o size=200M tmpfs /www/wwwroot/你的网站域名/wp-content/cache/
2,设置开机自动挂载。
每次重启服务器,缓存的数据都会丢失,缓存的数据会重新存储在硬盘上,为了让博客数据缓存到内存里,我们需要设置开机自动挂载内存盘。在宝塔面板里编辑 /etc/fstab,把以下代码放到最后,然后保存,在ssh端运行 mount -a 让挂载生效。
tmpfs /www/wwwroot/网站目录/wp-content/cache tmpfs defaults,size=512m,mode=755,uid=1000,gid=1000 0 0
上面网站域名和512M可以根据自己实际情况填写。
其中uid和gid具体数值获取执行一下命令:
id www
id后面的名称如何确定,执行如下命令:
ps aux | grep nginx
# 或者
ps aux | grep apache
输出解读: 在输出的第一列(最左边),除了主进程显示为 root 以外,其他的子进程(worker process)显示的名字就是实际运行的 Web 用户。例如,如果第一列显示的是 www,那么你就去运行 id www 来获取它的 UID/GID。
三,修改配置文件。
网站配置文件的规则顺序保证正确,下面是配置文件部分内容,
error_page 497 https://$host$request_uri;
# =======================================================
# 🌟第一位【最高优先级】W3TC 内存缓存核心规则控制链
# 包含了:Clean Query、重写到内存文件、针对 _gzip 文件的特殊响应头
# =======================================================
include /www/wwwroot/www.tlmm123.com/nginx.conf;
# =======================================================
# 🚀第二位【防盗链联动】将防盗链逻辑应用到全局静态资源
# 采用 map 方式在 W3TC 规则外围做防盗链,防止规则冲突导致图片 404
# =======================================================
valid_referers none blocked www.tlmm123.com;
if ($invalid_referer) {
return 403;
}
#第三位REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.tlmm123.com.conf;
#REWRITE-END
error_page 404 /404.html;
#第四位 PHP-FPM 处理器
include enable-php-85.conf;
include /www/wwwroot/www.tlmm123.com/nginx.conf; 这段代码需要手动添加,否则页面增强缓存无法生效,必须添加。其他三个规则默认都有,但是必须按照顺序填写,详细细节根据自己实际情况填写,不要照抄。
四,重载配置Nginx,让伪静态规则生效。
五,登录博客后台,清理缓存数据。
六,删除缓存html格式文件
每个缓存到内存里的网页都有两个格式,它们分别是.html_gzip压缩版和纯.html,网页压缩可以减少70%的体积。现在几乎所有主流浏览器都支持网页压缩格式,只有极少数老旧浏览器才需要纯html格式。对于内存富裕的服务器无所谓,对于低配服务器很有必要删除纯html格式,内存占用可以节省70%左右。
我在插件找不到设置的方法,删除纯html缓存就用宝塔面板计划任务定时执行脚本,脚本内容如下:
#!/bin/bash
# ==========================================================================
# 宝塔计划任务:WordPress W3TC 内存缓存精准清理脚本(智能保留压缩包版)
# ==========================================================================
# 1. 严格匹配您的完整路径(末尾包含对应域名子目录)
DIR_WWW="/www/wwwroot/www.tlmm123.com/wp-content/cache/page_enhanced/www.tlmm123.com/"
echo "--------------------------------------------------------"
echo "★ 智能缓存清理任务启动: $(date '+%Y-%m-%d %H:%M:%S')"
echo "--------------------------------------------------------"
# ==================== 处理站点 (www) ====================
if [ -d "$DIR_WWW" ]; then
BEFORE_SIZE=$(du -sh "$DIR_WWW" 2>/dev/null | awk '{print $1}')
# 规则 1:精准清理 10 分钟前的纯文本原文件
find "$DIR_WWW" -type f -name "*.html" -mmin +10 -delete
# 规则 2:秒杀所有 W3TC 遗留的 _old 废弃备份文件
find "$DIR_WWW" -type f -name "*_old" -delete
# 规则 3:顺便清理空文件夹
find "$DIR_WWW" -type d -empty -delete
AFTER_SIZE=$(du -sh "$DIR_WWW" 2>/dev/null | awk '{print $1}')
echo "【站点 www】清理成功!内存体积变化: $BEFORE_SIZE -> $AFTER_SIZE"
else
echo "【站点 www】提示: 目录不存在,请检查路径: $DIR_WWW"
fi
echo "--------------------------------------------------------"
echo "✔ 恭喜!全站智能清理任务全部结束,压缩加速包已安全保留。"
上述代码是博客的清理纯html脚本,大家把里面的缓存路径改成自己的就行。
我设置成每30分钟执行一次脚本,删除纯html格式缓存,效果非常好,我的博客数据库40M左右,内存缓存却有300M左右,对于低配服务器来说缓存占据300M内存太多了,执行脚本后,缓存数据减少70%左右,博客运行几乎不受影响。