共计 2811 个字符,预计需要花费 8 分钟才能阅读完成。
背景
WordPress 的最小化安装有三种组件:
- WordPress
- MySQL
- PHP
外围的有组件主要有:
- cache,例如 redis & memcache 等
- web 服务,例如 nginx & caddy & apache 等
相比于hugo,hexo 等纯静态建站方案,wordpress 的 php + mysql 显得比较重,性能方面也自然不如。
但是我家中有台高配服务器,更追求的是可拓展性和生态的完善程度。
不过性能问题也不是不能解,这篇文章主要会介绍如何使用 redis 提升网站的访问速度。
Redis 能够做什么?
其实接触 redis 已经很久,公司的生产环境业务,访问量大点儿都会用 redis 来作缓存。
在 wordpress 中使用 redis ,主要可以缓存以下几类数据:
- MySQL相关:数据库中会存储文章、页面、评论、用户信息等数据,这些数据可以预先缓存在 redis 中,降低数据库的查询。
- PHP相关:当一些查询结果和数据被缓存到 redis 中时,wordpress 可以通过直接从Redis获取数据而跳过执行对应的PHP代码。
实操
redis 部署
本站是使用 docker-compose 进行部署的,所以 redis 也同样以容器的方式部署。它们会位于同一网络下。
在使用 redis 前,docker-compose.yml 只管理了 wordpress 和 mysql,配置如下:
# 查看目录结构
[root@ ubuntu-family /usr/local/wordpress]
22:05:18 # ls -la
total 24
drwxr-xr-x 3 root root 4096 Sep 5 22:05 .
drwxr-xr-x 17 root root 4096 Sep 3 15:50 ..
-rw-r--r-- 1 root root 889 Sep 5 20:01 docker-compose.yml
drwxr-xr-x 4 root root 4096 Aug 24 12:02 volumes
# 查看配置内容
22:03:18 # cat docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- ./volumes/database:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: your_mysql_password
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: your_mysql_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./volumes/html:/var/www/html
如果需要加上 redis,不仅仅需要安装redis,还需要额外给 php 增加 redis 拓展。而 php 是在 wordpress 的镜像中管理的。
所以我们需要使用 Dockerfile 定制一个新的镜像。
# 备份原docker-compose.yml
mv docker-compose.yml docker-compose.yml-noredis
# 编辑Dockerfile
# vim Dockerfile
FROM wordpress:latest
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
git \
unzip \
libzip-dev \
; \
pecl install redis; \
docker-php-ext-enable redis; \
rm -rf /tmp/pear; \
apt-get clean; \
rm -rf /var/lib/apt/lists/*
# 创建新docker-compose.yml
# vim docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- ./volumes/database:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: your_mysql_password
wordpress:
depends_on:
- db
- redis
build:
context: .
dockerfile: Dockerfile
ports:
- 8000:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: your_mysql_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./volumes/html:/var/www/html
redis:
image: redis:latest
restart: always
# 重启服务
docker-compose restart
到这里,服务端的配置已经完成:
- 安装 redis
- 安装并启用 PHP redis 拓展
配置使用 redis
服务端的配置完毕后,还需要在站点中使用插件,以使用 redis 作为缓存。
进入管理后台,点击 插件
–> 安装插件
–> 搜索 Redis Object Cache
–> 安装 –>启用,如图:
插件配置如图:
点击 设置
–> Redis
–> Enable Object Cache
完毕后如下图:
至此所有配置已经结束。
效果
未使用 redis 的页脚性能统计:
使用 redis 后的页脚性能统计:
- 使用前
- 加载耗时:0.155s
- 数据库查询次数:55次
- 使用后
- 加载耗时:0.066s
- 数据库查询次数:8次
关于 页脚展示性能统计数据,可以参考站内文章:wordpress 页面加载性能数据。
结论
其实现在网站的访问量并不大,加速效果并不会很明显。但是当负载上来后,缓存是一个很重要的处理层,对于性能提升很有帮助。
同时对于 wordpress 站点,性能优化的方式还有很多,例如使用 cdn 缓存静态资源,压缩图片资源,CSS优化 等。 日后有需要再进行深究。
关于 使用 cdn 缓存静态资源,可粗略参考站内文章:家宽建站的几种方式 之 方案3 CDN
。