使用 Redis 或 Memcached 优化 WordPress 对象缓存(Object Cache)

使用 wordpress建站的朋友可能都会遇到wp网站越来越慢越来越卡的问题,有时候并不是什么大问题只需要优化一下对象缓存可能就会看见立竿见影的效果了。

WordPress 对象缓存(Object Cache)是 WordPress 中缓存耗时数据库查询结果的方法,默认情况下,对象缓存是非持久性的,只在请求期间保留在内存中,请求过期后,缓存也就失效了,下次请求时则需要重新生成。

WordPress Object Cache优化

WordPress 默认对象缓存的效率问题

熟悉缓存原理的朋友会发现,这种机制的效率并不高,为了提高对象缓存的效率,我们需要持久化对象缓存,也就是说,把对象缓存的结果保留下来,不让他们在页面请求结束时失效,这样在下次页面请求时就可以直接使用保存下来的缓存结果,而不用再次查询数据库了以达到 wordpress优化的目的。

使用 Redis 或 Memcached 持久化对象缓存数据

Redis 和 Memcached 都是知名的内存型数据库,因为他们可以把数据直接保存在内存中,可以大大提高数据的存取速度,他们常常被用来当作 MySQL 的缓存数据库使用。

安装 Redis 服务和 PHP Redis 扩展

Ubuntu、Debian、CentOS 发行版中都有 Redis 服务,我们直接执行对应的命令安装即可。当然如果想获得更多的控制,我们也可以自己下载源码编译 Redis 服务端。

apt-get install redis

安装 Redis 服务器后,如果启动不成功,报「MISCONF Redis is configured to save RDB snapshots」 的错误,我们可以使用 redis-cli 关闭掉数据库硬盘快照功能,因为我们只用 Redis 做缓存服务,不需要保存数据到硬盘中。

127.0.0.1:6379> config set stop-writes-on-bgsave-error no

安装了 Redis 服务后,我们还需要安装 PHP Redis 扩展,才能让 WordPress 缓存数据到 Redis 中。

pecl install redis

Memcached 的安装方法和 Redis 类似,在这里就不再多说了。安装并确认我们需要的 Redis 或 Memcached 服务生效后,我们还需要在 WordPress 中启用 Redis 或 Memcached 对象缓存,才能利用这两个服务为我们持久化对象缓存。

在 WordPress 中启用 Redis 对象缓存

在 WordPress 中启用持久化对象缓存的方法是使用自定义缓存函数替换 WordPress 中默认的缓存函数,方法是添加一个 「object-cache.php」到「wp-content/」目录中。「object-cache.php」本质上是一个 “Drop-in” 类型的 WordPress 插件,用来取代 WordPress 内置的功能。

为了把对象缓存缓存到 Redis 中,我们需要在 WordPress 中启用 Redis 对象缓存,从下面的地址中下载「object-cache.php」,然后上传到 WordPress 站点的 「wp-content/」目录中即可。或者查看:给 WordPress 提速的动态缓存插件 Redis Object Cache

https://github.com/pressjitsu/pj-object-cache-red

Memcached 对象缓存插件

如果你使用的是 Memcached 来持久化 WordPress 对象缓存,下面两个缓存插件都可以使用,任意选择一个即可。

  • https://github.com/Automattic/wp-memcached
  • https://github.com/joomlaworks/wp-memcached-object-cache

有些插件会自动添加「object-cache.php」到 wp-content/ 目录中,比如流行的 WP Super Cache 插件,在遇到这种情况是,直接替换这个文件即可。

如果添加了「object-cache.php」后,遇到网站出现 500 错误而打不开的情况,说明我们的 Redis 服务或扩展没有安装好,检查以下,确保他们可用,再添加「object-cache.php」即可。

在开发 WordPress 主题或插件时使用对象缓存

WordPress 为我们提供了使用对象缓存的函数,方便我们使用对象缓存。

  • wp_cache_add() :添加数据到缓存中,如果数据已存在,返回 flase
  • wp_cache_set() :添加数据到缓存中,如果数据已存在,会覆盖数据
  • wp_cache_get() :获取缓存中的数据,如果数据不存在,返回 false
  • wp_cache_delete() : 从缓存中删除数据
  • wp_cache_replace() :替换缓存中的数据,类似 wp_cache_set,但是如果数据不存在,不自动添加
  • wp_cache_flush():清除所有缓存

WordPress 对象缓存使用使用示例

$result = wp_cache_get( 'my_result' );
if ( false === $result ) {
$result = $wpdb->get_results( $query );
wp_cache_set( 'my_result', $result );
}

对象缓存和页面缓存的区别

直接把 WordPress 生成的页面缓存起来的方法叫 “页面缓存”,缓存的直接是 WordPress 生成的 HTML 页面,不只缓存数据库查询,还缓存了页面模版中的 PHP 逻辑运算结果。

而对象缓存缓存的只是 MySQL 数据库查询结果,并必会缓存其他类型的 PHP 运算,相对页面缓存,更加底层,缓存粒度细,也更容易操作。另一方面,WordPress 对象缓存不只可以缓存前台数据库查询,也可以缓存仪表盘的数据查询结果,可以在一定程度上提高 WordPress 后台的打开速度。

两种缓存方法都可以大幅提高WordPress页面加载速度,页面缓存适合在没用用户登录的网站上使用;而对象缓存适合在需要用户登录操作的网站上面使用,以避免页面缓存缓存了需要用户登录才可以查看的内容。

总结

无论是页面缓存、还是对象缓存,都是用来提高数据获取效率,加快网站页面打开速度的,对象缓存和页面缓存并不冲突,可以同时使用,相互配合。虽然缓存可以提高页面打开速度,但是并不意味着,我们在开发时就不用考虑性能和效率问题了。始终把数据存取效率放在心中,才能开发出高性能的 WordPress 应用,提高用户体验。

 

转载请注明链接地址:荐爱小站 » 使用 Redis 或 Memcached 优化 WordPress 对象缓存(Object Cache)

赞 (0) 赏 !

觉得文章有用就打赏一下吧,赠人玫瑰手有余香!

支付宝扫一扫打赏

微信扫一扫打赏