網站採用 WordPress 搭建,WordPress Object Cache(WordPress 對象緩存) 是 WordPress 的默認緩存機制,它的主要功能是把負責查詢或者運算的結果按照 Key-Value 這樣的方式 (WordPress 還支持按照 Group 來劃分和避免緩存的內容衝突) 存儲到對象裏面,下次進行同樣操作的時候,可以讓直接從這個對象中取出數據,不用重複到數據庫中或者其他外部網站獲取數據。

有人説 WordPress 本來就很卡,的確是這樣,不過 WordPress 也在努力的解決這個問題,對象緩存就是這一小步,根據這個我們還可以實現更多的功能,比如在編寫主題的時候,可以需要自定義查詢參數,我們可以將這個查詢結果緩存起來,然後在下次調用的時候直接使用。

WordPress Object Cache 在 2.5 版本以前是可選的,但是在之後的版本,以內建在 WordPress 的程序中,所以如果你使用的是 WordPress 2.5 以後的版本,無所謂是否開啓對象緩存。

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 對象緩存對相關日誌進行加速。

下面是把把相關日誌的數據寫入緩存的例子,使用當前 post ID 作為 key,』related_post』 作為 group,緩存時間為一個小時,即 3600 秒。

  1. global $post;
  2. $related_posts_data = wp_get_related_posts();
  3. wp_cache_set($post->ID,$related_posts_data,'related_posts',3600);

上面只是把數據存到緩存對象中,我們在顯示相關日誌的時候,就要去調用這個對象緩存來使用,首先檢查下是否已經有了緩存,如果你要的信息沒有在緩存中,或者已經過期了。 wp_cache_get() 會返回 false,如果這樣,你就要去數據庫中重新獲取這些信息。否則就返回在緩存中的信息。

  1. global $post;
  2. $related_posts_data = wp_cache_get($post->ID,'related_posts');
  3. if(false=== $related_posts_data){
  4.         $related_posts_data = wp_get_related_posts();
  5.         wp_cache_set($post->ID,$related_posts_data,'related_posts',3600);
  6. }
  7. echo $related_posts_data;

因為設置了一個小時,相關日誌的數據就失效,這裏一般就無需更新緩存了,如果你在後台更改了設置,需要立即清理緩存,可以使用 wp_cache_delete 進行清理:

  1. wp_cacache_delete($post->ID,'related_posts');