Published on

在 Wordpress 上使用 Redis 缓存

Authors
  • avatar
    作者
    老麦

上文我们使用 Docker 搭建 Wordpress 并成功运行了起来,当时选择构建自定义镜像的目的就是要在 Wordpress 上使用 Redis 缓存。至于 Redis 是什么?为什么要在 Wordpress 上使用 Redis?我想既然能点开这篇文章的你心里也有了个大概的概念,在此不过多叙述了。

前提检查

在开始配置之前我们先检查一下安装的 Redis 是否正常的运行,详细的安装过程请查阅 「使用 Docker 来部署 Wordpress」

# 查看正在运行的容器
docker ps -a

# 进入redis容器内部
docker exec -it 容器NAME/容器ID /bin/bash

# 检查redis
redis-cli

127.0.0.1:6379> 

当返回的结果是 127.0.0.1:6379> 时就证明运行正常,如果要退出来输入 quit 即可。

安装插件

Wordpress 之所以强大就是因为它有一整套完整且强大的生态,尤其是在主题与插件这两个方面,真的可以叫嚣道:“还有谁?”

为了能够直观的在 Wordpress 上查看 Redis 的相关情况,我们需要安装两个插件。

Query Monitor

CleanShot 2023-07-28 at 18.41.24@2x.webp

安装并启用后 Wordpress 的顶部菜单就会出现一个选项,如图所示;

CleanShot 2023-07-28 at 18.55.29@2x.webp

点击展开后底部会弹出一个面板,点击 Overview 查看概述;

CleanShot 2023-07-28 at 18.59.03@2x.webp

这里可以看到站点加载了 22 条数据并给出了所需时间(本地测试环境,因此速度相对较快。),我们重点关注红色警告那一行,这里提示:“PHP 的 Redis 对象缓存扩展已安装,但未被 WordPress 使用。您应该安装一个 Redis 插件。”

Redis Object Cache

CleanShot 2023-07-28 at 19.08.41@2x.webp

安装并启用后,我们可以在设置 ☞ Redis 查看状态;

CleanShot 2023-07-28 at 19.16.50@2x.webp

这里出错了,连启用的按钮都是灰色且不能操作的。报错的原因是因为我们之前给 Redis 加了密码,回忆并查看 Redis 容器启动命令

这时我们可以修改 wp-config.php 这个文件来定义 Redis 连接;

require_once ABSPATH . 'wp-settings.php';这一行前面添加以下代码:

define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', '6379');
define('WP_REDIS_PASSWORD', 'redis密码');
define('WP_REDIS_DATABASE', '0');

修改完成后回到 Wordpress 后台可以看 Redis 插件已经连接成功,启动按钮也变成可按状态。点击按钮启用插件即可;

CleanShot 2023-07-28 at 20.00.21@2x.webp

检验成果

这时我们打开自己的 Wordpress 站点,随便点击几个站内的链接,让 Redis 缓存运行起来。然后展开 Query Monitor 查看,这时我们发现数据读取变成 None,Object Cache 也正常运行了。证明缓存已经生效了。

CleanShot 2023-07-28 at 20.04.13@2x.webp

Another Redis Desktop Manager(广告)

这里推荐一个管理 Redis 的桌面工具,该项目在 Github 上已斩获 26K Star,进入官方仓库 查阅相关详情。

CleanShot 2023-07-28 at 20.27.21@2x.webp

连接之后就可以查到已经缓存的数据了;

CleanShot 2023-07-28 at 20.35.49@2x.webp

结语

此至,我们就顺利地在 Wordpress 上使用 Redis 来做数据缓存了,至于更加高阶的用法不在此进行讨论。

redis 官网吐槽:别再拿 redis 做乱七八糟的事了,redis 为缓存而生。

最后,Redis 只是缓存了数据库的查询和对象。至于 Wordpress 页面上的缓存选择会相对多一点,后续也会更新来推荐一下我习惯使用的一些页面缓存的插件。