通过 Redis 缓存提升 WordPress 访问速度

常情况下每当用户对文章或者页面进行一次访问的时候,WordPress 程序都会对数据库发送一条查询命令且由数据库返回查询信息,这个过程在大量访问(请求)的情况下,若服务器性能较差,就可能因资源耗尽而导致宕机。而每一次访问都进行一次查询,在一定程度上也会导致正常的访问速度显得没那么流畅,此时如果我们采用 Redis 对数据库进行缓存,大多数查询无需前往数据库,仅通过 Redis 便可以完成,这样既能提升了查询速度,也能降低了数据库负载。

虽然 MySQL 拥有 Query Cache 这种自带的缓存体系 Query Cache 是一个适用较少情况的缓存机制,因为当每一次 Posts 数据表发生更新,无论更新是不是影响到了 Cache 的数据,都会将全部和 Posts 表相关的 Cache 清除,如果数据表更新频繁,那么 Query Cache 可能将成为服务器的负担,而 Redis 是通过将数据写入内存来降低数据库负载且仅在数据发生改变时进行特定修改,因此更加迅速。

简单来说可以如下描述:

读取:当 Redis 没有对应数据则读取 MySQL 将数据写入 Redis

写入:写入 MySQL 成功则写入 Redis

这将会获取 MySQL 的全部修改、写入、删除事件,并且对 Redis 进行对应操作

为什么使用 Redis 不使用 Memcached 呢?Memcached 是一种比较“纯粹”的缓存,而 Redis 可以在缓存的同时也将数据持久化到磁盘上进行保存。且 Redis 支持更多复杂数据类型,同时 Redis 是一种 Key-Value 分布式存储系统,因此有更快的查询速度,能接受的并发次数也更多。

安装 Redis 程序

这里我们首先前往 Redis 官网 下载稳定版的 Redis 备用(建议直接 wget)

这篇文章所在时间的稳定版如上 6.0.10 版本(实际上这里自己用的版本甚至还低一点)

接下来在服务器使用如下指令来完成安装

wget https://download.redis.io/releases/redis-6.0.10.tar.gz
tar xzf redis-6.0.10.tar.gz
cd redis-6.0.10/
make && make PREFIX=/usr/local/redis install
  • 注意:
  • 1.这里将 Redis 安装到了 /usr/local/redis 这个路径,如果需要安装到其他地方,请修改上方 make PREFIX= 的路径
  • 2.如果出现 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type] 报错,请更新 gcc 版本。 CentOS7 可以使用如下指令安装高版本 gcc
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash

现在将配置文件复制到对应目录 cp /root/redis-6.0.10/redis.conf /usr/local/redis/bin 就可以准备启动 Redis 了

这里我们先修改 redis.conf 文件来后端模式启动,修改 daemonize 为 yes 即可。

现在输入 ./redis-server ./redis.conf 即可正常启动

这里我们通过输入 ps -aux | grep redis 即可看到 Redis 进程情况

好了,以上就是安装方法,关于开机自启方面可以使用以下两种方案

vim /etc/rc.local

编辑 rc.local 添加如下内容

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis-conf

或者创建一个启动脚本

vim /etc/init.d/redis

内容如下

#!/bin/sh  
#chkconfig: 2345 80 90  
# Simple Redis init.d script conceived to work on Linux systems  
# as it does use of the /proc filesystem.  
REDISPORT=6379                         
REDISPATH=/usr/local/redis/bin/              
EXEC=${REDISPATH}/redis-server            
CLIEXEC=${REDISPATH}/redis-cli  
PIDFILE=/var/run/redis_${REDISPORT}.pid 
CONF="${REDISPATH}/redis.conf"    
case "$1" in  
  start)  
    if [ -f $PIDFILE ]  
    then  
        echo "$PIDFILE exists, process is already running or crashed"  
    else  
        echo "Starting Redis server..."  
        $EXEC $CONF  
    fi  
    ;;  
  stop)  
    if [ ! -f $PIDFILE ]  
    then  
        echo "$PIDFILE does not exist, process is not running"  
    else  
        PID=$(cat $PIDFILE)  
        echo "Stopping ..."  
        $CLIEXEC -p $REDISPORT shutdown  
        while [ -x /proc/${PID} ]  
        do  
          echo "Waiting for Redis to shutdown ..."  
          sleep 1  
        done  
        echo "Redis stopped"  
    fi  
    ;;  
  *)  
    echo "Please use start or stop as first argument"  
    ;;  
esac  

退出保存,且给予权限

chmod 777 /etc/init.d/redis
chkconfig redis on

安装 PHP 的 Redis 扩展

首先先下载 Redis 扩展 ,选择对应版本即可,这里将会以 PHP 7.2 为例展开

wget https://pecl.php.net/get/redis-5.3.2.tgz
tar -xzvf redis-5.3.2.tgz
cd redis-5.3.2/

注意,以下的 /usr/local/php/bin/phpize 中请替换为自己的 PHP 安装路径

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

接下来修改 PHP 配置文件加入 extension = redis.so 重启 PHP 即可

在站点目录下创建一个 phpinfo.php 文件,写入如下代码

<?php
phpinfo();
?>

访问 http(s)://youdomain/phpinfo.php 显示如下则 Redis 扩展安装正常

使用 Redis Object Cache 插件加速 WordPress 访问

搜索插件 Redis Object Cache 或者于官网下载

安装完成后,启动如下选择启动对象缓存,显示如下则无问题

总结

完成如上操作,Redis 加速 WordPress 就算是完成了,实际上大部分操作都非常简单,但是这对于访问速度的提升来说都是值得的。

如果有什么错误或者,有什么疑问可以在下面留言,会第一时间查看回复的。

顺便附带一下之前无聊做的 Redis Object Cache 汉化,点击 下载