时间:2024-03-29
我是一本本,今天我来介绍一下WordPress对象缓存(ObjectCache)。这是WordPress中缓存耗时数据库查询结果的方法。默认情况下,对象缓存是非持久性的,只在请求期间保留在内存中。请求过期后,缓存也就失效了。下次请求时就需要重新生成。
熟悉缓存原理的朋友会发现,这种机制的效率并不高。为了提高对象缓存的效率,我们需要持久化对象缓存。也就是说,把对象缓存的结果保留下来,不让他们在页面请求结束时失效。这样在下次页面请求时就可以直接使用保存下来的缓存结果,而不用再次查询数据库了。
Redis和Memcached都是知名的内存型数据库。因为它们可以把数据直接保存在内存中,可以大大提高数据的存取速度。它们常常被用来当作MySQL的缓存数据库使用。
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服务后,我们还需要安装PHPRedis扩展,才能让WordPress缓存数据到Redis中。
pecl install redis
Memcached的安装方法和Redis类似,在这里就不再多说了。安装并确认我们需要的Redis或Memcached服务生效后,我们还需要在WordPress中启用Redis或Memcached对象缓存,才能利用这两个服务为我们持久化对象缓存。
在WordPress中启用持久化对象缓存的方法是使用自定义缓存函数替换WordPress中默认的缓存函数。方法是添加一个「object-cache.php」到「wp-content/」目录中。 「object-cache.php」本质上是一个“Drop-in”类型的WordPress插件,用来取代WordPress内置的功能。
为了把对象缓存缓存到Redis中,我们需要在WordPress中启用Redis对象缓存。从下面的地址中下载「object-cache.php」,然后上传到WordPress站点的「wp-content/」目录中即可。
https://github.com/pressjitsu/pj-object-cache-red
如果你使用的是Memcached来持久化WordPress对象缓存,下面两个缓存插件都可以使用,任意选择一个即可。
有些插件会自动添加「object-cache.php」到wp-content/目录中,比如流行的WPSuperCache插件,在遇到这种情况是,直接替换这个文件即可。
如果添加了「object-cache.php」后,遇到网站出现500错误而打不开的情况,说明我们的Redis服务或扩展没有安装好。检查以下,确保他们可用,再添加「object-cache.php」即可。
WordPress为我们提供了使用对象缓存的函数,方便我们使用对象缓存。
wp_cache_add():添加数据到缓存中,如果数据已存在,返回flase
wp_cache_set():添加数据到缓存中,如果数据已存在,会覆盖数据
wp_cache_get():获取缓存中的数据,如果数据不存在,返回false
wp_cache_delete():从缓存中删除数据
wp_cache_replace():替换缓存中的数据,类似wp_cache_set,但是如果数据不存在,不自动添加
wp_cache_flush():清除所有缓存
$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页面加载速度,页面缓存适合在没用用户登录的网站上使用;而对象缓存适合在需要用户登录操作的网站上面使用,以避免页面缓存缓存了需要用户登录才可以查看的内容。
无论是页面缓存、还是对象缓存,都是用来提高数据获取效率,加快网站页面打开速度的。对象缓存和页面缓存并不冲突,可以同时使用,相互配合。虽然缓存可以提高页面打开速度,但是并不意味着,我们在开发时就不用考虑性能和效
Copyright © 2019-2024 thinkphp.xyz