共计 3074 个字符,预计需要花费 8 分钟才能阅读完成。
前言
不得不说 WordPress 站点的响应速度是比较缓慢的, 在后台编辑以及前台打开的时候可以感觉到比较明显的加载延迟. 查看主题代码也能够发现在Wordpress中一个页面的加载往往要进行好几次甚至几十次数据库的访问. 所以才诞生了其他的博客框架. 但Wordpres确实是众多博客网站中主题插件最为全面,使用文档最多的. 或许无法从源码的角度进行修改, 但有redis这种神器的存在,可以在数据库与应用之间搭建一个缓存层, 加快固定速度的加载. 当然此处得吐槽一下PHP为何都2023年了一个页面加载还要从数据库往返数据几十次!
介绍
Redis Object Cache插件 插件页面 仓库链接
由Redis提供支持的持久对象缓存后端。 支持 Predis 、 PhpRedis(PECL) 、Relay、replication、sentinels、clustering 和WP-CLI。
- 针对原始性能重写
- 100% WordPress API兼容
- 加快序列化和压缩
- 易于调试的&日志记录
- 缓存预取和分析
- 完全单元测试(100%代码覆盖率)
- 使用TLS实现安全连接
- 通过WordPress WP CLI进行健康检查&
- 针对WooCommerce,Jetpack&Yoast SEO优化
安装配置解析
本文主要介绍当 WordPress 部署在Docker中时 Redis Object Cache 如何配置连接参数.
-
在 WordPress 插件安装界面自行搜索 Redis Object Cache 并安装插件并启用.如图
-
启用后在 WordPress 的设置中可以找到一个Redis的标签如图
-
刚安装时Redis信息应该是未连接状态 参考Github 上插件的配置文档 需要在映射的
/var/www/html/wp-config.php
源代码中进行配置以下是配置文档中相关参数解析.
// Redis 连接访问的主机 127.0.0.1
define( 'WP_REDIS_HOST', '127.0.0.1' );
// Redis 连接访问的端口 6379
define( 'WP_REDIS_PORT', 6379 );
// 定义存储数据的 Redis 库index 范围 0-15 配置0
define( 'WP_REDIS_DATABASE', 0 );
// Redis 连接密码 123456
define( 'WP_REDIS_PASSWORD', '123456' );
// 更改每个站点的前缀和数据库以避免缓存数据冲突 my-moms-site
define( 'WP_REDIS_PREFIX', 'my-moms-site' );
// 连接超时单位秒 1秒
define( 'WP_REDIS_TIMEOUT', 1 );
// 读取超时单位秒 1秒
define( 'WP_REDIS_READ_TIMEOUT', 1 );
// 以上参数自行配置为你所使用的Redis连接所使用的参数.
// 编辑 wp-config.php 文件时,重要的是在文件的较高位置定义 WP_REDIS_* 常量,即这些行之上: 必须在 wp-config.php 文件中这一行代码之前添加
require_once(ABSPATH . 'wp-settings.php');
Dokcer中配置
在 WordPress Docker 版本中的配置方式略有不同. 主机安装中如果没有原本没有 Redis 实例还需要额外去安装Redis. 在Docker中我们可以拉取Redis的镜像即刻部署一个Redis.. WordPress Docker 安装配置过程可以参考我这篇文章 使用Docker Caddy Nginx部署WordPress博客, 首先我们修改映射的 /var/www/html/wp-config.php
文件. 在这段 require_once ABSPATH . 'wp-settings.php';
代码的上方加入以下代码.
define( 'WP_REDIS_HOST', getenv_docker('WP_REDIS_HOST', 'reids') );
define( 'WP_REDIS_PORT', getenv_docker('WP_REDIS_PORT', 6379) );
define( 'WP_REDIS_DATABASE', getenv_docker('WP_REDIS_DATABASE', 0) );
define( 'WP_REDIS_PASSWORD', getenv_docker('WP_REDIS_PASSWORD', null) );
define( 'WP_REDIS_PREFIX', getenv_docker('WP_REDIS_PREFIX', null) );
define( 'WP_REDIS_TIMEOUT', getenv_docker('WP_REDIS_TIMEOUT', 1) );
define( 'WP_REDIS_READ_TIMEOUT', getenv_docker('WP_REDIS_READ_TIMEOUT', 1) );
其中 getenv_docker
函数是 WordPress Docker 版本特有的函数 用来获取容器的环境变量配置, 上面的代码配置了 WP_REDIS
所需的所有参数从 环境变量中读取, 不存在的使用默认值. 接下来在 docker-compose.yml
文件中使用环境变量配置Redis
, 以下代码包含 Redis 安装. 与Reids无关的参数我将会用 #...
省略.
version: '2.4'
services:
# ...
redis:
image: redis:alpine
container_name: server_redis
restart: always
command: --requirepass "{你的Redis密码}"
ports:
- '6379:6379'
volumes:
- ./data/redis/data:/data
# ...
wordpress:
image: wordpress:fpm-alpine
container_name: server_wordpress
restart: always
environment:
TZ: Asia/Shanghai
# ...
WP_REDIS_HOST: redis
WP_REDIS_PORT: 6379
WP_REDIS_DATABASE: 11 # 指定一个空闲的库
WP_REDIS_PASSWORD: {你的Redis密码}
volumes:
- ./etc/wordpress/my.ini:/usr/local/etc/php/conf.d//my.ini
- ./data/wordpress/html:/var/www/html
执行 docker compose up -d
命令自动拉取部署 redis
实例, 并且自动重启 wordpress 应用因为我们更改了 wordpress 的参数, 如果配置没有生效也可以手动重启 wordpress 使用命令 docker compose restart wordpress
然后 再到 WordPress 后台界面中 Redis信息应该是绿色已连接状态. 点击按钮启用对象存储. 我们整个网站就接入了缓存啦, Redis Object Cache 插件会拦截大多数 WordPress 页面加载时的数据库读取请求缓存在Redis中. 日常使用会感觉页面加载速度快了许多
or一些
. 有时会出现修改了菜单或者Wordpress的某项配置没有即时生效的情况, 这时只需要点击左上角的对象缓存
>刷新缓存
刷新一下就好如图.
总结
Redis Object Cache这款插件在安装后还是可以很明显的感觉到页面加载速度的提升的, 在网站访问量大的时候也可以部署多节点分布式缓存. redis 搭配 docker 目前感觉还不错~