WordPress Object Cache(WordPress 對象緩存)是 WordPress 的默認(rèn)緩存機(jī)制,它的主要功能是把負(fù)責(zé)查詢或者運(yùn)算的結(jié)果按照 Key-Value 這樣的方式(WordPress 還支持按照 Group 來劃分和避免緩存的內(nèi)容沖突)存儲到對象里面,下次進(jìn)行同樣操作的時候,可以讓直接從這個對象中取出數(shù)據(jù),不用重復(fù)到數(shù)據(jù)庫中或者其他外部網(wǎng)站獲取數(shù)據(jù)。
WordPress Object Cache 和服務(wù)器設(shè)置關(guān)系很大,如果系統(tǒng)支持內(nèi)存緩存,則這個對象是直接存入內(nèi)存,以后在未過期之前都是直接從內(nèi)存中讀取的,這樣效率和速度都非常快的。如果服務(wù)器不支持內(nèi)存緩存的話,則只能保證在當(dāng)前頁面下同樣的查詢或者操作不再重復(fù)從數(shù)據(jù)庫中讀取了。
使用 WordPress 對象緩存技術(shù)其實(shí)是非常簡單的:
wp_cache_set()
把數(shù)據(jù)寫到緩存中。 wp_cache_get()
到緩存中讀取數(shù)據(jù)。 wp_cache_delete()
刪除緩存。 這些函數(shù)涉及到的四個參數(shù):
下面以我即將更新 WordPress 相關(guān)日志插件為例,講講如何使用 WordPress 對象緩存:
我們知道 WordPress 相關(guān)日志插件是通過 tag 和分類來獲取相關(guān)日志,相同的 tag 和分類越多,相關(guān)性越強(qiáng),這樣就需要進(jìn)行多個表聯(lián)合查詢來獲取相關(guān)日志,這樣效率其實(shí)是比較慢的。但是一個日志它的相關(guān)日志一段時間內(nèi)是不會變動的,所以我們就可以使用 WordPress 對象緩存對相關(guān)日志進(jìn)行加速。
下面是把數(shù)據(jù)寫入緩存的例子,使用當(dāng)前 post ID 作為 key,‘related_post’作為 group,緩存時間為一個小時,即 3600 秒。
global $post;$related_posts_data = wp_get_related_posts();wp_cache_set($post->ID,$related_posts_data,'related_posts',3600);
上面只是把數(shù)據(jù)存到緩存對象中,就要去調(diào)用這個對象緩存來使用,首先檢查下是否已經(jīng)有了緩存,如果你要的信息沒有再緩存中,或者已經(jīng)過期了。wp_cache_get()
會返回否,如果這樣,你就要去數(shù)據(jù)庫中重新獲取這些信息。否則就返回再緩存中的信息。
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è)置了一個小時,相關(guān)日志的數(shù)據(jù)就失效,這里一般就無需更新緩存了,如果你在后臺更改了設(shè)置,需要立即清理緩存,可以使用 wp_cache_delete
進(jìn)行清理,具體就不再講解了。