另类WordPress优化:将缓存文件存储到内存盘高速读写

作为一个动态的CMS程序,WordPress优化手段一般是将动态页面转为静态页面。这种方式利用插件将首次访问的 PHP 动态页面生成 HTML 静态页面并存储在硬盘中,后续直接读取静态页面,从而减少数据库查询和 PHP 计算,提升WordPress访问速度。但是硬盘速度是远低于内存盘的,因此我们可以考虑将生成的WordPress缓存文件放到内存盘里面,速度自然更快了。

另类WordPress优化:将缓存文件存储到内存盘

1.内存读写速度测试

在开始本文的教程之前,我们可以对常用的缓存文件存储位置:硬盘、memcached、redis和内存做一个读写测试

1.1 内存 Vs 硬盘

测试脚本代码,放到宝塔的计划任务里面,选择添加shell脚本

内存盘目录:/dev/shm/test

硬盘目录:/www/wwwroot/test.xcbtmw.com/test

#!/bin/bash

# 设置测试路径
MEMORY_PATH="/dev/shm/test"
DISK_PATH="/www/wwwroot/test.xcbtmw.com/test"

# 创建测试目录
mkdir -p $MEMORY_PATH
mkdir -p $DISK_PATH

# 文件大小 (500MB)
FILE_SIZE="500"

# 测试硬盘
echo "=== 测试硬盘读写速度 ==="
echo "写入测试 (硬盘):"
dd if=/dev/zero of=$DISK_PATH/bigfile bs=1M count=$FILE_SIZE oflag=direct 2>&1
echo "读取测试 (硬盘):"
dd if=$DISK_PATH/bigfile of=/dev/null bs=1M iflag=direct 2>&1

# 测试内存盘
echo "=== 测试内存盘读写速度 ==="
echo "写入测试 (内存盘):"
dd if=/dev/zero of=$MEMORY_PATH/bigfile bs=1M count=$FILE_SIZE oflag=direct 2>&1
echo "读取测试 (内存盘):"
dd if=$MEMORY_PATH/bigfile of=/dev/null bs=1M iflag=direct 2>&1

# 清理测试文件
rm -f $DISK_PATH/bigfile $MEMORY_PATH/bigfile
echo "测试完成,已清理测试文件。"

点击执行任务,可见结果为:

=== 测试硬盘读写速度 ===
写入测试 (硬盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 3.26227 s, 161 MB/s
读取测试 (硬盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 2.32547 s, 225 MB/s
=== 测试内存盘读写速度 ===
写入测试 (内存盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.289275 s, 1.8 GB/s
读取测试 (内存盘):
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.104858 s, 5.0 GB/s
测试完成,已清理测试文件。
----------------------------------------------------------------------------
★[2024-12-12 19:23:16] Successful

1.2 内存 Vs memcached

本节测试节选自:https://www.znian.cn/4698-24.html

读取100000次数据

//使用memcache
require_once ‘tools/cache/memcached-client.php';
$mem = new memcached($options);
$mem->set(‘x’ , ‘0’);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->get(‘x’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);

连续运行三次脚本,结果分别为10.5,10.46,10.63

//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_get_contents(‘/dev/shm/php_system/vipcache’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);
——————————–

连续运行三次脚本,结果分别为3.2,3.25,3.2

写入100000次数据

//使用memcache
$mem = new memcached($options);
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){ $mem->set(‘x’ , ‘0’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);

连续运行三次脚本,结果分别为10.93,9.22,9.41,与读取测试结果相差不大,说明memcache的读与写时间是差不多的

//使用共享内存/dev/shm
$time = microtime(TRUE);
for ($i = 0 ; $i < 100000 ; $i++){
$data = file_put_contents(‘/dev/shm/php_system/vipcache’ , ‘0’);
}
$end = microtime(TRUE);
echo round($end – $time , 2);

连续运行三次脚本,结果分别为2.5,2.52,2.53,内存盘写跟读的性能一样优越!

1.3 小结

通过内存盘和硬盘、内存盘和memcached读写速度测试对比,我们可以发现内存盘速度是非常快的。相比 Memcached 和 Redis,内存盘具备配置简单、直接利用本地内存、支持文件系统操作和低资源占用的优势。它无需额外软件或网络通信,速度更快,使用更高效。

因此把缓存文件放到内存盘里面是非常合适的,不用担心丢失(缓存文件丢失也无妨),访问速度还快。

2.宝塔面板设置内存盘

宝塔面板有两种内存目录,二者区别如下:

  • 第一种是固定的内存目录/dev/shm , Linux 系统默认配置,不可更改;
  • 第二种是使用Linux工具箱创建的自定义内存盘,基于内存的临时文件系统,例如 tmpfsramfs。相比第一种灵活性更高:可以通过手动挂载 tmpfsramfs,设置自定义挂载点、大小和访问权限。
注意
除了fastcgi缓存外,WordPress缓存插件内置的缓存文件目录一般在站点目录下,如:/www/wwwroot/www.xcbtmw.com/wp-content/cache,因此我们选择第二种内存盘是比较合适的。

2.1 挂载内存盘

(方法参考自:https://cloud.tencent.com/developer/article/1464010)

老白博客我用的是宝塔面板,可以直接通过Linux工具箱软件设置挂载内存盘

另类WordPress优化:将缓存文件存储到内存盘高速读写

2.2 选择缓存目录

我们选择wordpress下的一个空的目录(可以自己创建)

如:www.xcbtmw.com/wp-content/cache

另类WordPress优化:将缓存文件存储到内存盘高速读写

注意
不能选择已有文件的目录,需要先关闭缓存插件再选择

3.WordPress设置缓存目录

WP Super Cache 插件为例,设置里把缓存位置换成刚才创建挂载在内存文件夹的目录即可

另类WordPress优化:将缓存文件存储到内存盘高速读写

小技巧
如果不支持设置缓存目录的,那就看插件默认设置的目录是哪个,然后停止插件;清空原目录内容,挂载内存盘,再启用

4.关于WordPress优化

缓存对象的选择:https://www.xcbtmw.com/31105.html#h25

优化参考:2024基于网站性能测试的WordPress优化指南

服务器端优化:宝塔面板nginx-php-MySQL提速指南