启用 Redis 为网站加速
随着网站功能和内容不断地增长,浏览量相应地上升,浏览速度也会变慢,解决方案除了提高服务器端的配置外,还可以通过开启一些缓存服务来提升浏览速度。目前主流的缓存软件包括 Varnish、Memcache 和本篇教程要介绍的 Redis 等。
Redis 是一种利用内存做缓冲存储的加速技术,可以支持复杂的数据类型,当系统第一次生成要加速的数据后,Redis 把数据放入内存的缓冲里,下次提取同样的数据时就可以从内存中获取而无需重新生成数据从而加快访问速度。布署 Redis 需要两个部分的组件,一个是服务端组件用来管理缓存的,第二个是客户端组件用来访问服务端缓存的。下面分别介绍两个部分组件的布署方法:
一、Redis 服务端组件布署
首先是到官网下载服务端组件源代码,然后编译并安装:
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
然后运行服务端程序:
$./redis-server redis.conf ##redis.conf 是配置文件,可以使用附带的参考配置文件作为模板修改
另外,还可以使用命令行工具对服务器端程序进行管理:
$./redis-cli
如果不采用编译安装的方法,也可以使用系统捆绑的 Redis 服务器系统,虽然安装比较简单,但一般情况下自带的版本不是最新的。
#apt-get install redis
二、客户端组件布署
Redis 服务器端组件可以正常运行后,就可以配置客户端组件来缓存和访问数据了。目前客户端组件的配置可以根据使用环境的不同选择不同的配置方案,这里主要介绍两种方式,即缓存 WordPress 动态网页和对象,客户端组件配置如下:
1、缓存网页
(1)下载 predis.php 客户端组件并安装到网站的根目录下
(2)下载 index-with-redis.php 并替换网站根目录下的 index.php(名字不变)
上面两个客户端程序组件在新的 PHP 和 WordPress 版本下可能有运行问题,这种情况需要做下面的调整:
首先安装 Predis 客户端组件,进入到 WordPress 安装的根目录,输入下面的命令:
$composer require predis/predis
然后打开上面下载的程序文件 index-with-redis.php,增加下面的代码:
require "vendor/autoloader.php";
Predis\Autoloader::register();
$cached = 0;
//include("predis.php"); 删除这行代码
2、缓存对象
这里有两种客户端组件,即用纯 Php 语言写的 Redis 客户端 Predis 和用 C 语言写的编译后的 Redis 客户端组件 PhpRedis,C 写的经编译后比 Php 写的运行速度要快很多,这里介绍第二种客户端组件的安装方法。
(1)编译安装 igbinary
igbinary 用来替换 Php 自带的序列化组件,可以大幅压缩序列化时的内存占用,一般情况有 50% 的幅度。
$git clone https://github.com/igbinary/igbinary.git
$cd igbinary
$phpize
$./configure CFLAGS=”-O2 -g” –enable-igbinary
$make
$sudo make install
修改配置文件 php.ini,加载 igbinary 组件和相关配置:
extension=igbinary.so
session.serialize_handler=igbinary
igbinary.compact_strings=On
(2)安装 zstd 压缩库
$sudo apt-get install libzstd-dev
(3)编译安装 PhpRedis
$git clone https://github.com/phpredis/phpredis.git
$cd phpredis
$phpize
$./configure –enable-redis-igbinary –enable-redis-zstd
$make
$sudo make install
修改配置文件 php.ini,加载 redis 客户端组件:
extension=redis.so
配置完成后重启 php-fpm:
#pkill php
#php-fpm
(4)安装替换 WordPress 对象缓存组件程序
下载插件 WP Redis,提取其中的文件 object-cache.php 并拷贝到 /wp-content 目录下,然后修改 WordPress 配置文件 wp-config.php,增加下面的配置项:
$redis_server = array(
'host' => '127.0.0.1', //本机
'port' => 6379, //redis 服务器端口号
'database' => 0, //数据库编号可自行修改,缺省是0
);
通过上述配置步骤后,就可以使用 Redis 来缓存网页和对象数据了。需要注意的是由于缓存里存放的是旧的数据(没有被剔除缓存前),因此当网站内容更新后,需要清理缓存里的数据,方法是可以定时调用 redis-cli 命令行工具清理缓存:
$crontab -e ##创建定时任务,每天的0点0分执行
0 0 * * * /home/user/redis/bin/redis-cli flushall > /dev/null 2>&1