布丁快跑

VPS 启用 Memcached 动态缓存数据库 优化加速 WordPress 博客

Memcached 是一套高性能分布式内存对象高速缓存系统,用于动态 Web 应用减轻数据库负载以提高动态 web(如 WordPress)响应速度。Memcached 通过在内存中缓存数据和对象来减少数据库查询次数,从而提高动态、数据库驱动网站的速度。

「VPS 启用 Memcached 动态缓存数据库 优化加速 WordPress 博客:https://bdkp.net/17」

Memcached 简介

Memcached 官网:http://www.memcached.org

What is Memcached?

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

「VPS 启用 Memcached 动态缓存数据库 优化加速 WordPress 博客:https://bdkp.net/17」

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

相关资料:PHP 手册 Memcached

「VPS 启用 Memcached 动态缓存数据库 优化加速 WordPress 博客:https://bdkp.net/17」

VPS 安装 Memcached

实测环境:搬瓦工 CentOS 7 X64 + OneinStack or LNMP(php 8.0)+ WordPress 5.9

LNMP 一键包自带 Memcached 安装脚本,折腾起来很方便。进入 lnmp 解压后的目录,执行:

./addons.sh install memcached

可以根据自己需求选择 php-memcache 或 php-memcached 扩展,功能上 php-memcached 更强大一些,建议选择安装 php-memcached。

「VPS 启用 Memcached 动态缓存数据库 优化加速 WordPress 博客:https://bdkp.net/17」

Starting Memcached...
Starting memcached: done
====== Memcached install completed ======
Memcached installed successfully, enjoy it!

看到上面回显信息表示安装成功,可运行下面命令检查验证:

php -m | grep memcached

会输出 memcached

OneinStack 开启 Memcached 更简单,可以在编译环境时顺带开启。如果编译时没有开启,OneinStack 执行如下命令即可安装 php-memcached 扩展:

cd /root/oneinstack
./install.sh --php_extensions memcached

测试 Memcached 缓存:

<?php
$m = new Memcached();
$m->addServer( '127.0.0.1', 11211 );
$m->set( 'foo', 100 );
echo $m->get( 'foo' ) . "\n";

将上面代码保存为 test.php,然后执行 php -f test.php,输出 100 表示安装成功。至此,VPS 系统环境已经支持 memcached 缓存。

自动守护 Memcached 进程 不存在则自动重启进程

复制下面代码保存为 memcachedcheck.sh 文件,上传至 root 目录,执行 chmod +x memcachedcheck.sh

#!/bin/sh
#check memcached process and restart if down
DATE=`date -d "today" +"%Y-%m-%d-%H:%M"`
MM=`ps aux |grep "memcached" |grep "11211" |grep -v "grep" |wc -l`
#if 语句判断进程是否存在,如果不存在,输出日志记录并重启 memcached 服务
if [ "$MM" == "0" ];
then
echo "$DATE The memcached is problem and restart" >> /root/memcached_check.logs
service memcached restart
fi

然后添加至 crontab 计划任务,比如每隔 5 分钟检测一次。

*/5 * * * * /root/sh/memcachedcheck.sh

WordPress Memcached 缓存配置

至此,虽然 VPS 系统已经支持 Memcached,但是 WordPress 也要添加相应支持,以及 WordPress 主题代码优化适配缓存。

安装 wordpress-pecl-memcached-object-cache 插件,下载地址:https://github.com/tollmanz/wordpress-pecl-memcached-object-cache

下载解压得到 object-cache.php,上传到 wp-content 目录即可开启 memcached 缓存。

注意:若安装的是 memcache,这里需要使用 WordPress 官网上号称 Memcached 的 object-cache.php 插件,并且它只支持 memcache,不支持 Memcached。两者不能混用,否则会出现 WordPress 打不开,前台后台页面一片空白。(php-memcache + memcached)

检查缓存效果,从官方下载 memcached 探针(状态显示):http://pecl.php.net/package/memcache,比如目前最新版本:memcache-8.0.tgz(memcache-8.0.tgz 支持 php 8.0,PHP 7.x 使用 4.0.5.1 版本)

解压,里面有一个 memcache.php 文件,编辑并找到如下代码:

define('ADMIN_USERNAME','memcache');    // Admin Username
define('ADMIN_PASSWORD','password'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

修改为:

define('ADMIN_USERNAME','memcache');    // Admin 登录名称,自行修改 
define('ADMIN_PASSWORD','password'); // Admin 登录密码,自行修改
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
//下面是定义 memcached 服务器,一般是单机部署,可注释掉一行,并将服务器地址根据实际修改,一般是 127.0.0.1
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array
//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

然后将文件上传到网站私密目录,然后通过前台访问 memcache.php,输入上面的用户名和密码即可看到 memcached 状态。

上面两个文件如果下载不到,可以下载博主备份文件:memcached-files

Memcached 其他设置

如果 Memcached 状态页面可以打开,但是里面没有 Hits 数据,可以刷新多几次 WordPress 博客页面,如果还是没有,说明 WordPress 并没有成功连接到 memcached,这时候可以在 wp-config.php 加入如下参数:

global $memcached_servers;
$memcached_servers = array(
array(
'127.0.0.1', // Memcached 服务器 IP
11211 // Memcached 服务器端口
)
);

memcached 实际监听 IP 和端口,可以通过如下命令查看:

netstat -nutlp | grep memcache

如果调整 Memcached 最大占用内存大小?

CentOS 系统 Memcached 配置路径一般是 /etc/init.d/memcached,修改其中 CACHESIZE 配置即可:

vi /etc/init.d/memcached

CACHESIZE=256 #单位 M,默认 256M,一般博客 64M 就绰绰有余。

修改完成重启一下服务:

systemctl daemon-reload
service memcached restart  #重启生效

退出移动版