使用 WordPress 对象缓存
January 23rd, 2008 at 02:06pm 雪山飞猪 浏览: 2,099
其实我用的插件都算是蛮多了,达到了15个(当然也有些疯子,装了30多个插件,然后怪 WordPress 太慢。)。但是最近经过我的优化之外,其实博客的速度也不算太慢了,这里其中我就用到就是 WordPress 缓存机制,以前我经常用的是 WP-Cron 的定时更新的功能进行缓存。今天给大家介绍另外一种缓存机制:WordPress Object Cache。以下信息节选翻译自:Using the WordPress Object Cache
WordPress Object Cache 的目的是提供一个耗时查询或者运算结果存储到一个缓存文件的方法。这样就可以让我们不用老是重复到数据库中或者其他外部网站获取不变的数据。但是需要提出的是,一些服务器环境在使用缓存的时候会有些问题,所以这需要你去监控你的服务器来决定使用缓存能否对你的站点有益。
使用 WordPress 对象缓存技术其实是非常简单的,使用 wp_cache_set() 把数据写到缓存中,然后通过 wp_cache_get() 到缓存中读取数据。
在开始之前,有些东西你需要去检测一下,因为在默认情况下对象缓存是没有启用的。启动它,你需要编辑 wp-config.php 文件,在 WP_LANG 后面添加如下几行:
// Enable the WordPress Object Cache: define(ENABLE_CACHE, true);
还有你需要检查下没有定义 DISABLE_CACHE 这个变量,另外你还需要检查下你的主机中有 wp-content/cache 这个子目录,并且是可写的。
首先,我先解释下如何把数据放到缓存中。把缓存都想象成一系列的容器,每个装着一些数据包。你可以给这些容器和在容器里面的包命名,这样你等下就知道如何去获取它们了。在我的例子中,我将把握的容器命名为 mycache,把数据包命名为 mysettings。
这里是如何把数据写入缓存的例子:
// Whenever we need to rewrite the cache data: // This could be calling a database, webservice, etc. $mydata = my_complicated_data_query(); $myexpire = 60 * 60 * 24; // Cache data for one day (86400 seconds) wp_cache_set('mysettings', $mydata, 'mycache', $myexpire);
现在当你要避免复杂的数据库查询,首先检查下是否已经有了缓存,如果你要的信息没有再缓存中,或者已经过期了。wp_cache_get() 会返回否,如果这样,你就要去数据库中重新获取这些信息。否则就返回再缓存中的信息。
// First of all, before you try to access the user data, check // the cache. $mydata = wp_cache_get('mysettings', 'mycache'); if (false === $mydata) { // The cache data doesn't exist or it's expired. Do whatever we need to populate $mydata from the database normally... $mydata = my_complicated_data_query(); // Since we know that the cache isn't up to date, we should write this fresh information to it now, so that we can avoid the query next time. $myexpire = 60 * 60 * 24; // Cache data for one day (86400 seconds) wp_cache_set('mysettings', $mydata, 'mycache', $myexpire); }
当然了,数据缓存多长时间和使用哪个 API action hooks 去触发更新缓存,这都取决于你。
我根据 WordPress 这个缓存机制作了一个鲜果 Digg Top 10 得东东。可以到这里看看。当然这个东东是很脆弱的,只要鲜果修改了一些东东,就不能用了。个人作觉得这个东西应该是鲜果自己来做成 Widget 最好了。anyway,我还是放出来吧!如果你有兴趣就去下载吧,就当作学习这个 WordPress 对象缓存机制!使用方法,使用一下页面模板函数 xianguo_digg_top_10(),后台有个设置,选取最近多少天的文章来显示到这个列表来,不要把文章选取太多了,不然会出现错误。
Update 2008-01-25 鲜果再次修改接口,这个功能已经不行了!下载也失效了!
作者:雪山飞猪
原文链接:使用 WordPress 对象缓存
我爱水煮鱼版权所有,转载时必须以链接形式注明作者和原始出处及本声明。







1. 胖逗逗 | January 23rd, 2008 at 10:18 pm
沙发先
[回复该留言]
2. 胖逗逗 | January 23rd, 2008 at 10:21 pm
弱弱地问一句,wp2.0能用嘛?而且我确实没看懂这篇文章!
[回复该留言]
可以
[回复该留言]
3. GooMoo | January 23rd, 2008 at 11:15 pm
我也看不懂
[回复该留言]
4. xaoma | January 23rd, 2008 at 11:24 pm
仔细看了一下,觉得还的仔细再看看!
[回复该留言]
5. istef | January 23rd, 2008 at 11:44 pm
如果服务器支持 eAcc 或 XCache 的话,用好这个可以大大提高 WP 的效率。我怀疑 WP.com 就用了这个方法,eAcc 配上 MemCache,缓存命中率能到 90%
[回复该留言]
说得我完全不懂!汗!
[回复该留言]
6. chada | January 24th, 2008 at 12:18 am
速度很关键~
[回复该留言]
7. 乌溜溜的黑眼猪 | January 24th, 2008 at 2:37 am
很不错的东西,只是我用不了。
[回复该留言]
8. JackyCheung | January 24th, 2008 at 6:41 am
wordpress的cache感觉向来都很脆弱, 容易引发一些莫名的错误…郁闷~!
[回复该留言]
9. tomdbtel | January 24th, 2008 at 9:05 am
我想我的问题解决了,3Q飞猪
[回复该留言]
10. MO | January 24th, 2008 at 9:13 am
暂时用不上^-^不过先收藏了
[回复该留言]
11. zriver | January 24th, 2008 at 10:18 am
15个就算多啊?我也刚好装了15个。
不过我主要是想试试我的头像能你能显示。。。
[回复该留言]
12. 自由天空 | January 24th, 2008 at 10:59 am
原理倒是这样的,不过对于用虚似空间的博客来说,可能会被主机限制。因为这样的缓存是占内存的,管理的不好会导致服务器资源紧张,所以一般主机会限制。原理与OSCache和Memchche一样。
[回复该留言]
13. 梦印江南 | January 24th, 2008 at 11:34 am
说实话,代码我还是玩不转。。
[回复该留言]
14. seo | January 25th, 2008 at 10:40 am
不懂程序,我看我还是少用点插件吧
[回复该留言]
15. xaoma | January 26th, 2008 at 12:06 am
几天没有来,看了半天才看完!
学习一下
[回复该留言]
16. fvzone | January 28th, 2008 at 4:51 pm
也,今天我得留下我的脚印…
学习啊学习…
[回复该留言]
17. 吉吉 | January 30th, 2008 at 9:36 pm
水煮大名久仰,最近开始订阅,慢慢学习。这篇太深奥,不懂。
想问一下,有没有插件可以让文章一半显示,一半需要密码才继续阅读的呢?
[回复该留言]
没有!
[回复该留言]
18. adam | March 1st, 2008 at 5:21 pm
暂时用不到 人气不足···
先收藏了
[回复该留言]
19. adam | March 6th, 2008 at 3:31 pm
无奈服务器的mySQL总有问题 不知道这样的cache会不会有用(连不上SQL 但静态页可以访问)
[回复该留言]
20. adam | March 6th, 2008 at 4:40 pm
一小时后 现在 貌似效果还是有的 网站速度明显快乐些 虽然不是生产静态页(我想要的结果)
[回复该留言]