使用 memcached 或 redis 加速优化 wordpress 对象缓存(object cache)-kb88凯时官网登录

时间:2022-01-28
阅读:
免费资源网 - https://freexyz.cn/

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/」目录中即可。

memcached 对象缓存插件

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

有些插件会自动添加「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 );
} 

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

本站之前介绍过使用 cachify 缓存 wordpress 页面 来提高页面加载速度的方法,这种直接把 wordpress 生成的页面缓存起来的方法叫 “页面缓存”,缓存的直接是 wordpress 生成的 html 页面,不只缓存数据库查询,还缓存了页面模版中的 php 逻辑运算结果。

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

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

总结

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

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图