# 为 WordPress 加入 Redis 缓存优化访问性能

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/
- Published: 2022-01-30T12:32:32+08:00
- Author: 白宦成

文章目录

 [Toggle](https://www.ixiqin.com/2022/01/30/redis-object-cache/#)

 * [Requirements](https://www.ixiqin.com/2022/01/30/redis-object-cache/#requirements)
 * [安装 Redis 缓存](https://www.ixiqin.com/2022/01/30/redis-object-cache/#%e5%ae%89%e8%a3%85_redis_%e7%bc%93%e5%ad%98)
 * [FAQ](https://www.ixiqin.com/2022/01/30/redis-object-cache/#faq)
 * [1. 如何使用非本地 Redis Server 或如何使用带密码鉴权的 Redis Server？](https://www.ixiqin.com/2022/01/30/redis-object-cache/#1_%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8%e9%9d%9e%e6%9c%ac%e5%9c%b0_redis_server_%e6%88%96%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8%e5%b8%a6%e5%af%86%e7%a0%81%e9%89%b4%e6%9d%83%e7%9a%84_redis_server%ef%bc%9f)
 * [2. 如果我一个服务器上有多个 Redis ，如何配置使数据不会混淆呢？](https://www.ixiqin.com/2022/01/30/redis-object-cache/#2_%e5%a6%82%e6%9e%9c%e6%88%91%e4%b8%80%e4%b8%aa%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e6%9c%89%e5%a4%9a%e4%b8%aa_redis_%ef%bc%8c%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae%e4%bd%bf%e6%95%b0%e6%8d%ae%e4%b8%8d%e4%bc%9a%e6%b7%b7%e6%b7%86%e5%91%a2%ef%bc%9f)
 * [3. Metrics 怎么理解？](https://www.ixiqin.com/2022/01/30/redis-object-cache/#3_metrics_%e6%80%8e%e4%b9%88%e7%90%86%e8%a7%a3%ef%bc%9f)
 * [延展阅读](https://www.ixiqin.com/2022/01/30/redis-object-cache/#%e5%bb%b6%e5%b1%95%e9%98%85%e8%af%bb)

在之前的文章[我是如何优化博客的](https://www.ixiqin.com/2020/06/13/i-am-how-to-optimize-the-blog/)
和[本站在用的一些WordPress插件](https://www.ixiqin.com/2019/02/13/this-site-is-using-some-of-the-wordpress-plugin/)
中我提到，我是使用了 WP-Optimize这个插件来进行博客优化的。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-11.
png)

WP Optimize

WP-Optimize 为用户提供了开箱即用的缓存方式，可以将你的 WordPress 文章加入文件缓存，
从而减少在 MySQL 中查询的次数。

不过，文件缓存的问题是性能受限于你所使用的磁盘，而我使用的是阿里云的标准云磁盘，
性能一般，所以访问速度并不能算快。

过去在我还愿意折腾 WordPress 的时候，我是会在 WordPress 上加入一些别的缓存的，比如
Redis、Memcached。不过，随着时间的流逝，我折腾的意愿变得越来越弱，就远离了这些。

直到最近刚好有空，于是开始研究起了 Redis 缓存。

其实在古早时代（比如我刚开始折腾个人博客的时候，2012年），WordPress 的 Redis 功能
并不是特别好用，需要自己手动下载 `object-cache.php` 放在对应目录中，然后修改配置
文件手动来开启，甚至还需要替换掉 index.php 文件来让请求通过缓存进行。

这次的折腾，让我感受到，时代在进步，配置缓存也变得简单了许多。

## Requirements

在这篇博客中我并不打算介绍 Redis Server 的安装和调试过程，你可以在搜索引擎中找到
各种各样的教程引导你如何完成安装的过程，因此，请自行完成 Redis Server 的安装，后
续的各项操作会默认你已经完成了 Redis Server 的安装调试。

需要注意的是，如果你不打算修改配置文件，则需要在安装 Redis 之后，设置为空密码。而
空密码是不安全的，建议你通过 iptables、安全组策略等方式，屏蔽掉 6379 端口的外部请求，
只允许本地请求。

## 安装 Redis 缓存

我这次安装 Redis 缓存选择了 **Redis Object Cache** 这个插件。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-12.
png)

Redis Object Cache

和你在别的网站上看到的教程相比，这个插件提供了一个可视化的查看和管理的方式，对于
懒得手动操作和编辑代码的人来说，更加友好。

安装插件后，启用插件，你可以在设置中的「Redis」设置页面找到如下的界面：

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-13.
png)

设置页面

点击 Enable Object Cache，就会开启 Redis 的 Object Cache 。

如果你已经在之前配置好了 Redis Server，则会直接看到如下左图的界面。但如果你的 Redis
Server 还没有配置或配置了密码，就会显示如下右图的界面，就需要你检查你的 Redis Server
是否配置成功。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-15.
png)

配置成功的情况

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-14.
png)

配置失败的情况

当你看到如上左图的界面后，就说明你已经开启了 Redis 的 Object Cache 了，后续涉及到
文章内容、菜单等各项基本配置的查询时，会优先使用 Redis 的缓存，而不是查询 MySQL，
从而降低了 MySQL 的查询压力，提升了查询的诉求。

至此，你的 Redis 就配置好了，可以打开你的网站首页，享受飞一样的速度。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-17.
png)

开启前的 TTFB 为 2.29 秒

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-16.
png)

开启后的 TTFB 为 673.49 毫秒

## FAQ

## 1. 如何使用非本地 Redis Server 或如何使用带密码鉴权的 Redis Server？

如果你需要使用非本地的 Redis Server（比如云 Redis），那么你需要在你的 `wp-config.
php` 中加入如下代码来进行配置。

    ```javascript
    define( 'WP_REDIS_HOST', '127.0.0.1' );
    define( 'WP_REDIS_PORT', 6379 );
    // define( 'WP_REDIS_PASSWORD', 'secret' );
    define( 'WP_REDIS_TIMEOUT', 1 );
    Code language: JavaScript (javascript)
    ```

## 2. 如果我一个服务器上有多个 Redis ，如何配置使数据不会混淆呢？

有两种方式，

第一种方式是可以给你的不同站点配置不同的 Redis DB，只需要在你的 `wp-config.php` 
文件中加入如下的配置，即可实现不同的站点使用不同的 Redis 数据库，你可以从 0 开始，
向上递增设定不同的 Redis 数据库。

    ```javascript
    define( 'WP_REDIS_DATABASE', 0 );
    Code language: JavaScript (javascript)
    ```

第二种方式是你无法控制 Redis，必须使用同一个数据库，那么你可以通过给其添加不同的
salt 来实现即使使用同一个数据库，数据也不会产生混淆。

    ```javascript
    define('WP_CACHE_KEY_SALT', 'www_ixiqin_com_');
    Code language: JavaScript (javascript)
    ```

## 3. Metrics 怎么理解？

在 Redis 设置页面，你可以看到另外有一个 Metrics Tab，这个 Tab 你可以看到你的插件
的工作情况，方便你随时进行查询 & Debug。

第一个 Time 是指 Redis Object Cache 和 Redis 沟通，获取数据所需的时间，可以看到，
我这里的查询时间大概是在 12ms，耗时不多。需要注意，你第一次看可能会注意到，这里有
一个 Object Cache Pro ，灰色的 Object Cache Pro 其实是官方在推广其自家的付费插件，
付费插件 $99/月，可以提供更好的 Redis 查询性能。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-18-
1024x290.png)

第二个 Bytes 则是 Redis Object Cache 从 Redis 获取到数据的大小，当有人访问你的文章
的时候，这个数据就会出现一个增长，访问结束后就会消失。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-19-
1024x299.png)

第三个 Ratio 则是缓存的命中率，基本上保持在 99% + ，说明缓存的命中率还不错。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-20-
1024x294.png)

最后一个 Calls 则是调用次数，免费版不会批量获取数据，因此，调用次数会很高，而在付
费版，会一次性拿多个数据，从而获得更少的查询次数。不过我目前对于这个速度已经很满意
了，就不再购买付费的版本了。

![](https://files.ixiqin.com/2022/01/23063843/d2b5ca33bd970f64a6301fa75ae2eb22-21-
1024x304.png)

## 延展阅读

 * [https://github.com/rhubarbgroup/redis-cache/wiki](https://github.com/rhubarbgroup/redis-cache/wiki)

## Comments

### By: 揭雾

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-363
- Published: 2022-02-21T09:53:40+08:00

太专业了

### By: 白宦成

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-365
- Published: 2022-02-21T10:00:00+08:00

能帮到你就好～

### By: 膨鱼宴

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-405
- Published: 2022-03-13T18:48:33+08:00

有没有可能会出一篇保姆级的，教人优化600MB+的wordpress数据库的方案？ 现在网站加载
首页要2s，内页要1.5s，数据库太大了。8H16G的小母鸡鸭梨很大，如果不配上fastcgi\_cache
的话。
 咱就是说，有没有可能会有相关的付费项目？ 大概多少钱？

### By: 白宦成

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-406
- Published: 2022-03-13T19:14:36+08:00

这部分是看情况的，不同的架构不同。不过我估计也就几百块钱。至于优化的教程的话，很多
时候需要 case by case 的分析一下。

### By: 彭于晏

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-407
- Published: 2022-03-14T02:04:24+08:00

因为我和朋友基于兴趣爱好，维护了一个插画图片网站，是搜罗pixiv上的图片来发布的。原本
都是手工编排的，前期都没担心过，也没经历过数据库过大导致的卡顿。后来他在谷歌浏览
器的应用商店找了几个扩展，存图效率爆表。导致我们的效率起来之后，数据库现在已经是
600多MB了。

现在能做的就是简单删除了一些主题上复杂的调用，网站首页初次创建缓存在2s左右，内页
是1.5s+。 最过分的是后台发布文章时，输入完内容点击“发布”后，整个等待过程要好几秒。

更更过分的是，不知道是不是在网上找的“设置文章定时发布的时间间隔”的代码的效率问题。
如果把一些文章设置定时发布的话，一篇文章点击“保存”后，整个保存过程要7s大概（粗略
数过）。

已经放弃redis和memcached了，没什么用了已经。只能靠缓存硬生成缓存文件，然后设置超
长的过期时间，让网页的访问变得流畅。 真是尴尬！

### By: 白宦成

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-408
- Published: 2022-03-14T09:02:52+08:00

如果你感兴趣的话，可以加我的微信 ixiqin\_com

### By: mjj

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-465
- Published: 2022-04-15T13:45:17+08:00

讲解得很详细！我马上试试！

### By: 黑李白

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-1877
- Published: 2023-06-21T20:21:32+08:00

写的不错，2023年还有这么负责任的好内容真的很难得。

### By: 白宦成

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-1879
- Published: 2023-06-21T22:44:49+08:00

感谢你的喜欢！希望能够帮到你！主要还是写一些自己能用到的文章。

### By: 土狼妹妹

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-8292
- Published: 2024-10-30T12:00:19+08:00

我用的是openlitespeed，加上litespeed
 缓存插件和redis，博客速度很快，谢谢分享

### By: 白宦成

- Link: https://www.ixiqin.com/2022/01/30/redis-object-cache/#comment-8308
- Published: 2024-10-31T09:59:08+08:00

👍
