memcached 內(nèi)存緩存可以優(yōu)化 wordpress 很多功能,讓你的 WordPress 變得更快,下面由wordpress教程欄目給大家介紹如何使用 memcached 來(lái)深度優(yōu)化 wordpress。
要深度理解 WordPress 優(yōu)化,必須要首先了解 WordPress 對(duì)象緩存 機(jī)制。
WordPress 對(duì)象緩存機(jī)制和服務(wù)器設(shè)置
WordPress Object Cache(WordPress 對(duì)象緩存)是 WordPress 的緩存機(jī)制,它的主要功能是把負(fù)責(zé)查詢或者運(yùn)算的結(jié)果按照 Key-Value 這樣的方式(WordPress 還支持按照 Group 來(lái)劃分和避免緩存的內(nèi)容沖突)存儲(chǔ)到對(duì)象里面,下次進(jìn)行同樣操作的時(shí)候,可以讓直接從這個(gè)對(duì)象中取出數(shù)據(jù),不用重復(fù)到數(shù)據(jù)庫(kù)中或者其他外部網(wǎng)站獲取數(shù)據(jù)。
WordPress Object Cache 和服務(wù)器設(shè)置關(guān)系很大,如果系統(tǒng)開啟了 Memcached 內(nèi)存緩存,則這個(gè)對(duì)象是直接存入到內(nèi)存,在數(shù)據(jù)未過期之前,以后再次讀取這個(gè)數(shù)據(jù)都是直接從內(nèi)存中讀取的,這樣效率和速度都非常快的。
如果服務(wù)器不支持內(nèi)存緩存的話,則只能保證在當(dāng)前頁(yè)面下同樣的查詢或者操作不再重復(fù)從數(shù)據(jù)庫(kù)中讀取了。
WordPress 對(duì)象緩存的函數(shù)
使用 WordPress 對(duì)象緩存技術(shù)其實(shí)是非常簡(jiǎn)單的:
使用 wp_cache_add() 把數(shù)據(jù)添加到緩存中。
使用 wp_cache_set() 把數(shù)據(jù)設(shè)置到緩存中。
使用 wp_cache_get() 到緩存中讀取數(shù)據(jù)。
使用 wp_cache_delete() 刪除緩存中的數(shù)據(jù)。
這些函數(shù)會(huì)涉及到的四個(gè)參數(shù):
參數(shù)?
$key 對(duì)象的 key。
$data 要存的值。
$group 分組,可選參數(shù),用來(lái)把緩存對(duì)象就行分組。
$expire 過期時(shí)間,可選參數(shù),如果是默認(rèn)緩存,這個(gè)參數(shù)沒用,如果是內(nèi)存緩存,是設(shè)置緩存的時(shí)間,單位是秒,默認(rèn)為0(0的意思就是永遠(yuǎn),不會(huì)自動(dòng)過期)。
使用 WordPress 對(duì)象緩存
下面以我即將更新 WordPress 相關(guān)文章插件為例,講講如何使用 WordPress 對(duì)象緩存:
我們知道 WordPress 相關(guān)文章插件是通過 tag 和分類來(lái)獲取相關(guān)文章,相同的 tag 和分類越多,相關(guān)性越強(qiáng),這樣就需要進(jìn)行多個(gè)表聯(lián)合查詢來(lái)獲取相關(guān)文章,這樣效率其實(shí)是比較差的。但是一個(gè)文章它的相關(guān)文章一段時(shí)間內(nèi)是不會(huì)變動(dòng)的,所以我們就可以使用 WordPress 對(duì)象緩存對(duì)相關(guān)文章進(jìn)行加速。
下面是把把相關(guān)文章的數(shù)據(jù)寫入緩存的例子,使用當(dāng)前 post_id 作為 key,related_posts 作為 group,緩存時(shí)間為一個(gè)小時(shí),即 3600 秒。
global?$post; $related_posts_data?=?wp_get_related_posts(); wp_cache_set($post->ID,$related_posts_data,'related_posts',3600);
上面只是把數(shù)據(jù)存到緩存對(duì)象中,我們?cè)陲@示相關(guān)文章的時(shí)候,就要去調(diào)用這個(gè)對(duì)象緩存來(lái)使用,首先檢查下是否已經(jīng)有了緩存,如果你要的信息沒有在緩存中,或者已經(jīng)過期了。wp_cache_get() 會(huì)返回 false,如果這樣,你就要去數(shù)據(jù)庫(kù)中重新獲取這些信息。否則就返回在緩存中的信息。
global?$post; $related_posts_data?=?wp_cache_get($post->ID,'related_posts'); if(false?===?$related_posts_data){ $related_posts_data?=?wp_get_related_posts(); wp_cache_set($post->ID,$related_posts_data,'related_posts',3600); } echo?$related_posts_data;
因?yàn)樵O(shè)置了一個(gè)小時(shí),相關(guān)文章的數(shù)據(jù)就失效,這里一般就無(wú)需更新緩存了,如果你在后臺(tái)更改了設(shè)置,需要立即清理緩存,可以使用 wp_cache_delete 進(jìn)行清理:
wp_cacache_delete($post->ID,'related_posts');
WPJAM Basic 插件已經(jīng)集成了 Memcached,下載 WPJAM Basic 之后,將 wpjam-basic/template/ 目錄下的 object-cache.php 文件復(fù)制到 wp-content 目錄下即可。