WP_Query 和缓存相关的参数及函数
前面罗列过 WP_Query 的所有参数,今天研究 WP_Query 的缓存,把所有相关的缓存参数都翻了一遍,做一下简单笔记。
WP_Query 主要用4个用于缓存相关的参数和使用到函数有:
cache_results
是否缓存查询的文章信息。
默认情况分两种,使用外部对象缓存(比如使用 Memcached)就是 false,没有使用则是 true。
做了几次测试,true 和 false 没什么区别,感觉有点重复,所以这个建议设置为 false。
update_post_term_cache 参数
是否缓存 post term 的内容,默认也是 true。
update_post_term_cache
开启之后,在列表页使用 get_the_terms
函数的时候,不需要导数据里面去请求每个 post 的各种 taxonomy 的 term 的信息,它会把整个列表所有文章的所有 taxonomy 的 term 一起全部请求出来。
update_post_meta_cache 参数
是否缓存 post meta 的内容,默认是 true。
update_post_meta_cache
开启之后,在列表页使用 get_post_meta
函数的时候,不需要导数据里面去请求每个 post_id 的 post meta 的信息,它会把整个列表所有文章的 post meta 一起全部请求出来。
update_post_caches 函数
WordPress 会使用 _prime_post_caches
这个函数进行批量的 ids 的pote_term 和 post_meta 的请求:
_prime_post_caches( $ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] );
它的源代码很好的解释了它的工作原理是:
function _prime_post_caches( $ids, $update_term_cache = true, $update_meta_cache = true ) {
global $wpdb;
$non_cached_ids = _get_non_cached_ids( $ids, 'posts' );
if ( !empty( $non_cached_ids ) ) {
$fresh_posts = $wpdb->get_results( sprintf( "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE ID IN (%s)", join( ",", $non_cached_ids ) ) );
update_post_caches( $fresh_posts, 'any', $update_term_cache, $update_meta_cache );
}
}
首先使用 _get_non_cached_ids
函数获取未缓存的 post_ids(如果开启了 Memcached,这里就可以自动实现返回为空,就会大大减少 SQL 请求),然后使用一条 IN 查询获取这些 post_ids 的内容,最后再使用 update_post_caches
将新获取的 posts 缓存起来,然后并且一次性求获取所有相关的 post_term 和 post_meta。
lazy_load_term_meta 参数
是否延迟加载 term meta 的内容,如果没有设置,默认根据 update_post_term_cache
的值而定。
如果为 true 的话,WP_Query
会把列表页所有的 term_ids 临时存储下来,在当前页第一次使用 get_term_meta
函数的时候,把 term_ids 的所有 term_meta 一次全部请求出来。
如果设置为 false 的话,每个 get_term_meta
的函数,都会产生一条 SQL 请求。
当然你也可以自己收集所有相关的 term_ids,然后使用 update_termmeta_cache($term_ids)
来一次获取所有 term_meta 的值。
相关文章
- MySQL:8.0全新的字典缓存(代替5.7 frm文件)
- 技术分享 | 缓存穿透 - Redis Module 之布隆过滤器
- WordPress 技巧:使用文件缓存侧边栏
- WordPress 技巧:给 wp_nav_menu 函数添加缓存,提高页面效率
- RDD概念、特性、缓存策略与容错详解大数据
- Linux清除DNS缓存的简单步骤(linux清除dns缓存)
- 缓存Java使用Redis实现过期缓存管理(redisjava过期)
- “简洁快速:Redis缓存安装指南”(redis缓存安装)
- 构建MySQL高性能架构:优化数据库引擎、索引、缓存等策略(mysql高性能架构)
- 如何优化Redis缓存的性能(怎么更新redis缓存)
- 缓存也能让Redis有所作为(缓存redis存什么)
- 深入探索使用Redis缓存的好处(用redis做缓存的原因)
- 利用本地缓存和Redis 优化Web应用性能(本地缓存 和redis)
- 如何避免Redis缓存雪崩(如何避免redis雪崩)
- 专业加速多线程操作Redis缓存提升性能(多线程操作redis缓存)
- php缓存函数代码
- mysql设置查询缓存
- PHP下利用header()函数设置浏览器缓存的代码
- php文件缓存函数