缓存 WordPress 主循环,真正实现 0 SQL

服务器安装 Memcached 组件,PHP 安装了 Memcached 扩展之后,WordPress 的文章页,基本上可以做到 0 SQL 请求,但是首页或者其他列表页总是有两条 SQL 请求,怎么办呢?

WPJAM Basic 3.0 版本我实现了这个列表页主循环的缓存,下面我简单说下我实现的思路:

首先基于查询参数 $query_vars 创建缓存的 $cacke_key,使用 posts_results filter 把 WordPress 主循环的结果缓存到 memcached。

然后下次查询的时候在 posts_pre_query filter 也是是使用 查询参数 $query_vars 创建缓存的 $cacke_key,从内存中查到值查询返回。

这样缓存之后,最大的问题是文章修改怎么更新缓存呢?

WordPress 中有个 wp_cache_get_last_changed 函数,比如下面这段代码就可以获取 posts 相关的 group 最后缓存时间:


$last_changed	= wp_cache_get_last_changed('posts');

我将这个 $last_changed 合作因素合并到缓存的 $cacke_key 中,这种文章修改了,也可以让列表的缓存快速失效。

好了,整个缓存过程是全自动的,你只要安装了 WPJAM Basic 3.0,你的 WordPress 就在 Memcached 的高速缓存之下高速运转了。

热门文章