WordPress使用Redis缓存加速-WP Redis插件,缓存忽略,多站点配置

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。Redis也常用于Mysql数据库缓存。

如果你像挖站否这样安装了不少的WP插件(参考:我正在用的WordPress插件),同时给WP增加了论坛、评论等各种各样的扩展,那么Wordpress数据库查询次数可能会非常多,这时非常有必要给自己的Wordpress安装数据库缓存了,Redis缓存数据库是一个非常好的选择。

这篇文章就来分享一下如何在Wordpress上安装和使用Redis缓存加速,有一些插件或者主题会出现不兼容WP Redis的问题,我们可以设置忽略WP Redis缓存的参数,另外多站点配置WP Redis也是行得通的,只需要给Redis缓存设置好连接密码就可以应用到多个实例。

Wordpress使用Redis缓存加速-WP Redis插件,缓存忽略参数以及多站点配置方法

更多的关于WordPress优化和服务器优化的方法,这里有:

  1. 博客主要应用技术及支持特性-挖站否网站与服务器优化方法总结
  2. 让图片飞一会儿!网站图片WebP格式批量转换设置及加速效果体验
  3. 用Algolia给WordPress添加实时站内搜索功能-搜索质量更高内容更准

PS:更新记录:

1.使用Redis缓存可能会导致OOM command not allowed的错误,解决方法:WordPress排查解决您的站点遇到了致命错误的过程-Redis内存缓存不足。2020.9.19

一、安装PHP Redis扩展

WordPress利用Redis缓存加速可以大大减少数据库,基本原理如下:(点击放大)

Wordpress使用Redis缓存原理

要让Wordpress使用Redis缓存加速,首先你需要在服务器上安装PHP Redis扩展,如果你在用OneinstackLNMP或者是宝塔BT面板,已经支持一键安装Redis了。

Wordpress使用Redis缓存一键安装

二、WP Redis缓存插件

插件:

  1. https://cn.wordpress.org/plugins/redis-cache/
  2. https://cn.wordpress.org/plugins/wp-redis/
  3. https://cn.wordpress.org/plugins/w3-total-cache/
  4. https://cn.wordpress.org/plugins/wp-super-cache/

WordPress Redis缓存插件主要有:WP Redis、Redis Object Cache,W3 Total Cache和WP Super Cache是一个缓存插件,功能多,但同时也支持Redis缓存。以Redis Object Cache为例,启用该插件后记得在后台点击启动。

Wordpress使用Redis缓存后台启用

三、WP Redis缓存效果

以挖站否为例,这是Wordpress未利用Redis缓存时的数据库查询次数。

Wordpress使用Redis缓存未使用前的情况

无论是登录或者是没有登录,Wordpress的数据库查询都是非常高的。

Wordpress使用Redis缓存数据库查询

WordPress启用了Redis缓存加速后,数据库查询次数减少了一半以上,加速效果明显。

Wordpress使用Redis缓存加速效果明显

四、禁用某个Redis缓存

使用了Redis缓存后,有些主题或者是插件可能出现不兼容的问题,例如挖站否论坛使用的插件Anspress就不兼容Redis,所以我们需要在wp-config.php中排除插件或者主题用到的Groups,代码如下:

define('WP_REDIS_IGNORED_GROUPS',array('comment','counts','plugins','themes','anspress','ap','ap_prefetch_activities','ap_q_id_activity','ap_users_reputation','ap_qameta','ap_prefetch_activities','ap_subscriber','ap_votes_queries','ap_vote'));

我们在Redis Object Cache插件中可以看到忽略的参数,表示已经生效了。

Wordpress使用Redis缓存忽略参数

五、多站点启用Redis缓存

  1. https://www.random.org/strings/

如果你的服务器上运行了多个Wordpress,这个时候就需要WP_CACHE_KEY_SALT来给每个网站设置一个值,这样多个网站就可以共同启用Redis缓存了(字符串值可以使用上面的随机生成网址生成)。

define( 'WP_CACHE_KEY_SALT', 'hpWQo8vfb3' );
# define('WP_CACHE', true);

六、远程使用Redis缓存

如果你想要让你的Wordpress调用远程的Redis缓存(像阿里云腾讯云就提供此类的服务),编辑wp-config.php指定Redis缓存的地址、端口、密码以及数据库等,如果配合上面的WP_CACHE_KEY_SALT设置,你又可以实现远程+多站点Redis缓存了。代码如下:

define('WP_REDIS_HOST', 'xxx.wzfou.com');   #默认是127.0.0.1
define('WP_REDIS_PORT', '6379');  #默认是6379
define('WP_REDIS_DATABASE', '0');  # redis 数据库(第一个0 ,然后是1,依次类推)
define('WP_REDIS_PASSWORD', qimm);  # redis 数据库密码,默认是无

Redis完整配置命令如下,请根据自己的需要使用:

#Redis完整配置如下:
define('WP_REDIS_CLIENT', 'pecl'); // 指定用于与Redis通信的客户端, pecl 即 The PHP Extension Community Library
define('WP_REDIS_SCHEME', 'tcp'); // 指定用于与Redis实例进行通信的协议
define('WP_REDIS_HOST', '127.0.0.1'); // Redis服务器的IP或主机名
define('WP_REDIS_PORT', '6379'); // Redis端口
define('WP_REDIS_DATABASE', '0'); // 接受用于使用该SELECT命令自动选择逻辑数据库的数值
define('P_REDIS_PASSWORD', ''); // Redis密码
define('WP_CACHE_KEY_SALT', 'wp_'); // 设置所有缓存键的前缀(Wordpress多站点模式下使用)
define('WP_REDIS_MAXTTL', '86400');

七、检测Redis缓存生效

使用以下命令就可以查看到本机的Redis缓存是否生成了:

redis-cli monitor

进入到你的网站,刷新页面,你就可以看到有数据输出了:

Wordpress使用Redis缓存检测生效

八、总结

Redis缓存对于减少Wordpress的数据库查询次数非常有用,尤其是比较适合一些动态的网站,例如Wordpress设置页面缓存,但是对于登录用户就无法使用页面缓存,这时我们就可以使用Redis动态缓存了。

挖站否使用Redis缓存也有一段时间了,遇到的问题主要有无法登录后台,清除Redis缓存正常了。另外,Redis缓存还可以导致插件和主题修改不生效,手动强制删除Redis缓存的命令如下:

#进入redis
redis-cli
#清空
flushall
#退出
exit

文章出自:挖站否 https://wzfou.com/wordpress-redis/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 12 条评论
  1. 老了。该手动设置的东西都忘记了。又来看了一下才记得。干脆转发了!

    2020年12月15日 14:511 回复
    • Avatar for Qi Qi

      年轻人……

      2020年12月17日 15:07 回复
  2. Avatar for 熊猫 熊猫

    这篇文章帮助很大,但后面发现其实我只需要那个刷新redis的代码…..
    (因为以前建的wordpress使用了redis,导致那个缓存一直都在,新站点依然延续了前缀,所以会出现致命错误,一度让我怀疑人生!)

    2020年10月20日 15:32来自QQ 回复
    • Avatar for Qi Qi

      我现在依然还是遇到Redis缓存刷新的问题,经常出现的莫名的情况是账号和密码无法登录,然后手动清空Redis缓存又可以登录。

      2020年10月20日 16:06 回复
  3. Avatar for Edi Edi

    请问下WP_REDIS_DATABASE这个后面的数字序号对应的是Mysql中的数据库的顺序吗?还是说只是多站点中redis的database的一个标识序号呢?比如A站点WP_REDIS_DATABASE默认为0,B站点就设为1,C站点设为2…以此类推?

    2020年7月2日 00:51 回复
    • Avatar for Qi Qi

      默认的是0,如果你用了:define( 'WP_CACHE_KEY_SALT', 'hpWQo8vfb3' );,那么这里就会显示你自己命名的名称了。

      2020年7月4日 09:04 回复
  4. Redis可以用SSDB代替了,缓存持久化[偷笑]

    2019年11月18日 00:56 回复
    • Avatar for Qi Qi

      貌似用的人少,有机会尝试一下。

      2019年11月23日 10:31 回复
  5. 手动强制删除Redis缓存的命令如下:
    后面没了?[吃惊]

    2019年11月16日 08:41 回复
    • Avatar for Qi Qi

      已经更新,谢谢。

      2019年11月23日 10:501 回复
  6. Avatar for sooele sooele

    如果是宝塔。还可以设置一下内存盘。很方便,把Redis的缓存文件指定去内存盘。像我就是这种用。真香

    2019年11月15日 19:08来自移动端 回复
    • Avatar for Qi Qi

      宝塔面板确实不错。

      2019年11月23日 10:51 回复

Login

Welcome! Login in to your account

Remember me Lost your password?

Don't have account. Register

Lost Password

Register