当你不是在 WordPress 后台更新日志的,而是使用其他方法或者函数更新,并且你的 WordPress 博客使用的又是内存缓存,这时候,就极有可能日志的分类会显示的不正确。 这个时候我们可以使用 clean_post_cache($id) 函数把 $id 对应的日志对象缓存,以及该日志的分类信息的对象缓存,Post Meta 的对象缓存都会清理掉,页面也能够显示正确。 clean_post_cache 也有一个同名的 Action Hook,你可以用它来在清理日志缓存之后执行一些额外的清理工作。 下面贴下 clean_post_cache 函数,看看它具体清理哪些对象缓存。 function clean_post_cache($id) { global $_wp_suspend_cache_invalidation, $wpdb; if ( !empty($_wp_suspend_cache_invalidation) ) return; $id = (int) $id; if ( 0 === $id ) return; wp_cache_delete($id, ‘posts’); wp_cache_delete($id, ‘post_meta’); clean_object_term_cache($id, ‘post’); wp_cache_delete( ‘wp_get_archives’, ‘general’ ); do_action(‘clean_post_cache’, $id); if ( […]
缓存
WordPress 内存缓存终极加速插件:Batcache
Batcache 工作原理 WordPress 启用 Memcached 这样的内存缓存之后,每次访问 WordPress 页面,都要从内存中获取多个缓存对象。 而 Batcache 主要就是解决这个问题,它是基于 Memcached 的 WordPress 缓存插件,它的工作原理是:把当前整个页面作为一个对象缓存到内存中,这样再次访问 WordPress 页面的时候,直接获从内存中获取这个对象即可,速度极快。 并且这个插件也是 WordPress.com 官方使用的加速插件之一。 Batcache 安装和使用 安装这个插件有点麻烦,不过只要按照以下步骤进行就可以: 安装好 Memcached,详细步骤请参考:如何让 WordPress 启用 Memcached 缓存。 所以你的服务器要求要和安装 Memcached 的要求一致。 上传 advanced-cache.php 到 /wp-content/ 目录。 在 wp-config.php 添加以下代码激活 Batcache: define(‘WP_CACHE’, true); 然后尝试多次载入页面查看源代码,应该在 之前可以看到一些 Batcache 状态代码。(未登录状态) 可以修改 advanced-cache.php 开始的一些代码来调整选项。 可选的上传 batcache.php 到你的 /wp-content/plugins/ 目录。 […]
WordPress 缓存插件介绍
大家可能都有这样的经验,使用 WordPress 一段时间,装了一些的插件之后,博客的速度会变慢,甚至很慢,如果服器不够强劲,比如你使用的是一些 Oversell 的主机,而非 MT 这样的 VPS,并且流量很大,那么你可能会噩梦相随,你会经常因为 CPU 超标,而被停掉服务。如果你的预算不够不能更换服务器,那你应该使用 WordPress 缓存插件来降低 WordPress 对服务器的资源占用。 WordPress 缓存插件有很多种,这里不能一一讲解,只能介绍我熟悉的几种给大家做个简单的介绍,你可以根据自己的服务器的特点给自己的 WordPress 博客选择相应的缓存插件: WordPress 对象缓存 WordPress Object Cache(WordPress 对象缓存)是 WordPress 的默认缓存机制,它的主要目的是把负责查询或者运算的结果存储到一个对象里面,下次进行同样操作的时候,可以让直接从这个对象中取出数据,不用重复到数据库中或者其他外部网站获取数据。 文件缓存 在 WordPress 2.5 版本之前 WordPress 可以使用文件缓存,需要在 wp-config.php 文件添加 define(‘ENABLE_CACHE’,’true’); 即可启用。2.5 版本之后,WordPress 取消了文件缓存和 ENABLE_CACHE 这个全局常量。 但是如果你还想继续使用文件缓存,可以安装这个插件:File-Based Extension to the WordPress Object Cache。把下载下来的文件上传到 wp-content 目录下,注意不是 plugins 目录下。 文件缓存其实把 WordPress 默认的对象缓存的对象存储为文件。这样就会有一个问题,就是每次访问页面的时候,要读取多个缓存的文件,如果你服务器的硬盘速度不是很快,这样就会造成你的服务器的 […]

WordPress 如何启用 Memcached 内存缓存
Memcached 是什么? Memcached 是一种高性能的分布式内存对象缓存系统。在动态应用,Memcached 既能提高访问的速度,同时还减低了数据库的负载。 Danga Interactive 为提升 LiveJournal.com 的速度研发了 Memcached。目前,LiveJournal.com 每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由 Web 服务器和数据库服务器组成的集群完成的。Memcached 几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及 Memcache 失效时对数据库的访问速度。 WordPress 和 Memcache 由于 WordPress 默认支持 Object Cache,所以在 WordPress 实现 Memcached 就是使用 Memcached 把 WordPress 的 Object Cache 写到内存中去,下次直接从内存中读取。相比直接从数据库去读取数据,或者从 Object Cache 数据存到文件,然后从硬盘中读取,Memcached 有很大的速度优势。 Memcached 命中率 上图是我爱水煮鱼使用 Memcached 之后的缓存对象的命中率,可以看出命中率是非常高,接近 97%,基本上可以保证所有数据都是从能内存中取,所以使用 Memcached 进行缓存是非常有效的。 WordPress 如何启用 Memcached 缓存 1. 需要你的服务器支持,就是你的 PHP […]
WordPress 对象缓存(Object Cache)详细介绍和使用
WordPress 对象缓存简介和服务器设置 WordPress Object Cache(WordPress 对象缓存)是 WordPress 的默认缓存机制,它的主要功能是把负责查询或者运算的结果按照 Key-Value 这样的方式(WordPress 还支持按照 Group 来划分和避免缓存的内容冲突)存储到对象里面,下次进行同样操作的时候,可以让直接从这个对象中取出数据,不用重复到数据库中或者其他外部网站获取数据。 WordPress Object Cache 和服务器设置关系很大,如果系统支持内存缓存,则这个对象是直接存入内存,以后在未过期之前都是直接从内存中读取的,这样效率和速度都非常快的。如果服务器不支持内存缓存的话,则只能保证在当前页面下同样的查询或者操作不再重复从数据库中读取了。 WordPress 对象缓存的函数 使用 WordPress 对象缓存技术其实是非常简单的: 使用 wp_cache_set() 把数据写到缓存中。 使用 wp_cache_get() 到缓存中读取数据。 使用 wp_cache_delete() 删除缓存。 这些函数会涉及到的四个参数: $key: 对象的 key。 $data: 要存的值。 $group: 分组,可选参数,用来把缓存对象就行分组。 $expire: 过期时间,可选参数,如果是默认缓存,这个函数没用,如果是内存缓存,是设置缓存的时间,单位是秒,默认为0(0的意思就是永远,不会自动过期)。 使用 WordPress 对象缓存 下面以我即将更新 WordPress 相关日志插件为例,讲讲如何使用 WordPress 对象缓存: 我们知道 WordPress 相关日志插件是通过 tag 和分类来获取相关日志,相同的 tag […]
WordPress 技巧:使用内存缓存提高 Postviews 效率
使用 WP-Postview 插件进行日志浏览数统计的时候,会有个问题,就是每个页面会多出三个 SQL 查询。这样每次浏览日志都会多出三次查询,对数据库其实是一次蛮大的负担,有没有办法解决这个问题呢?如果你和我一样网站启用了 Memcached 这类内存缓存组件的话,我们可以把日志的流量缓存到内存中,每次增加10次浏览才写入数据库中去。 <?php /* Plugin Name: WPJAM Memcached PostView Plugin URI: http://blog.wpjam.com/m/memcached-postviews/ Description: 使用内存缓存提高 WP-Postviews 效率 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ add_action('init','wpjam_postviews'); function wpjam_postviews(){ if(function_exists('the_views')){ //已经安装了 postview 插件 global $wp_object_cache; if(isset($wp_object_cache->mc) && $wp_object_cache->mc){ //已经安装了 memcached 插件 add_filter('update_post_metadata','wpjam_postviews_update_post_metadata',10,5); function wpjam_postviews_update_post_metadata($check, $object_id, $meta_key, $meta_value, $prev_value ){ if($meta_key == 'views'){ […]

