WordPress使用Redis优化及容器添加php扩展踩坑

0x01 前言

最近给网站环境全部换了一遍。
主要就是把之前停止支持的centos8换成ubuntu了,然后把网站引擎、wordpress和数据库之类的全部用docker构建,过程中踩了许多坑。
性能优化的大头就是增加了用WP Super Cache插件实现的静态缓存和用Redis Object Cache插件实现的对象缓存,在用缓存插件前这个数值高达三四百甚至六七百毫秒,效果很不错。

在用WP Super Cache之前因为它里面强行打的广告试过一下Jetpack Boost,结果就是开启Boost的页面缓存后网站左下角2233的live2d小人和右下角的sakana挂件没了,最终还是用回WP Super Cache。

0x02 Predis

安装

在使用Redis Object Cache时碰到一个问题,就是wordpress这个docker容器里的php没有phpredis扩展,这个插件没法用。
在网上搜索一番后,找到的phpredis安装方法都是步骤挺多的方法,因为容器里面啥命令都没有(比如vi和vim,apt也需要换源)很麻烦,所以决定先搁置phpredis。后来发现了替代方法,就是用Predis,这个简单好安装。

首先进入wordpress容器的终端,在宿主机运行

docker exec -it <容器名称> /bin/bash

这样就进入wordpress容器的环境了。

php的可执行文件在/usr/local/bin/

运行下面的命令准备好文件

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

然后cd到wordpress的目录,官方docker镜像中的目录就在/var/www/html/,再运行

composer require predis/predis

操作之后会出现一个vendor文件夹,说明已经将Predis安装完毕了。

配置

打开wordpress根目录的wp-config.php,增加下面的内容

// 默认使用phpredis,加这行改为predis
define('WP_REDIS_CLIENT', 'predis');
// Redis的主机名或IP
define('WP_REDIS_HOST', 'your-redis-host');
// Redis端口,默认6379
define('WP_REDIS_PORT', 6379);
// Redis的密码,没有设置就不加这行
define('WP_REDIS_PASSWORD', 'your-redis-password');

搞定这些后重启wordpress容器,Redis Object Cache就显示可访问Redis了,我启用缓存后网站突然就挂了,说连接不到127.0.0.1:6379,我寻思我redis用的是docker网络里的主机名啊,也不是127.0.0.1。报错提示让我把wp-content目录里的object-cache.php删了就能恢复正常,我打开这个文件一看,又是个配置文件,搜索6379后定位到配置那几行

$parameters = [
    'scheme' => 'tcp',
    'host' => '127.0.0.1',
    'port' => 6379,
    'password' => 'password-of-redis',
    'database' => 0,
    'timeout' => 1,
    'read_timeout' => 1,
    'retry_interval' => null,
    'persistent' => false,
];

原来是这里出问题了,把host改为redis主机名后网站恢复正常。
顺便一提,原本没有password这个键值对,redis有密码的话就需要自己把这个加上。
终于!插件正常运行了


但是predis毕竟是用php写的,性能没有用c写的phpredis性能好,所以我还是忍不住想要把它换成phpredis。

0x03 PhpRedis

第一次尝试

翻了一下phpredis的官方文档,按照他的教程走了一遍

git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure [--enable-redis-igbinary] [--enable-redis-msgpack] [--enable-redis-lzf [--with-liblzf[=DIR]]] [--enable-redis-zstd] [--enable-redis-lz4]
make && make install

因为容器里面没有git,所以文件是从从宿主机复制进去的,使用下面的命令

sudo docker cp phpredis-6.1.0.tar.gz <容器名称>:/home

编译安装完后告诉我

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20220829/

然后就没有然后了,输入php -m也没有看到redis模块。思路断了不深究了,结束!

第二次尝试

在找教程的过程中突然就打开/usr/local/bin/看了看,发现里面有一堆特别的二进制文件,比如docker-php-ext-install之类的,看着就很可疑,搜索之后发现原来就是专门用来在容器里面装扩展的,这下看懂了。
但是docker-php-ext-install是用来安装/usr/src/php/ext目录下已有扩展的,现在没用。
但是我们可以用pecl包管理器来下载phpredis,直接运行

pecl install redis
docker-php-ext-enable redis

查看执行结果

php -m | grep redis

回显

redis

安装成功!重启容器再看看插件状态


自动切换到phpredis了,太享受。
以防万一还是把wp-config.php里的define('WP_REDIS_CLIENT', 'predis');删了。

-EOF-
这篇文章的作者Shennoter祝你心情愉快ღゝ◡╹)ノ♡♪(^∇^)

评论

  1. Lynchrocket
    Windows Chrome
    2 月前
    2024-10-08 22:09:34

    我去!Redis大神

    • 博主
      Lynchrocket
      Windows Edge
      2 月前
      2024-10-08 22:22:07

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇