問題描述
當我們使用 memcached 的瞬態時,我希望有人能為我清除空氣。
當執行像 w3-total-cache 這樣的外掛時,使用瞬態來儲存大量的後期查詢有什麼實際的效能優勢?如果我們正在執行 memcached,那麼這些查詢是否已經被 memcached 快取了?那麼,如果有的話,這兩個方法是一起使用的呢?
最佳解決思路
什麼時候和如何使用瞬態或物件快取有點棘手和 site-dependent 。以下是細分:
-
當不使用永續性物件快取 (如 memcached) 時:
-
瞬態儲存在資料庫中
-
物件快取中的物件僅在頁面請求期間被快取。
-
-
當使用永續性物件快取 (如 memcached) 時:
-
瞬態儲存在物件快取中
-
物件快取中的物件被快取在永續性物件快取中,因此可以跨頁面請求使用。
-
所以是的,如果您使用 memcached,瞬態可以使事情更快。但是,如果您知道您正在使用 memcached 來開始使用,則可以直接使用物件快取,而不是使用瞬態。
因此,正確的使用時間是:
對於公開發布的程式碼:
-
當您必須儲存需要一段時間才能生成/檢索的任何東西,當瞬態過期時,可以使用 re-generated 或 re-retrieved 。因為這可能儲存在資料庫中,不要將其用於您已經從資料庫獲取的內容。你節省很少的時間,即使這個查詢是一個大的連線等等。依靠資料庫的智慧為此。最佳化查詢。
-
使用物件快取可以儲存可能需要經常需要的大型查詢 (例如,帖子或使用者),甚至在同一頁面執行期間。
如果這是自定義站點的自定義程式碼,您有 (自定義) 控制權,並且您知道它使用 memcached,則瞬態和物件快取基本上是相同的,與介面略有不同。所以你根本不需要使用瞬變。在這種情況下,wp_cache_set 和 wp_cache_get 工作相當不錯,而且沒有少量的開銷瞬變增加。
對於 multi-site,物件快取具有”global groups” 的優點,”global groups” 是網站中被認為是全域性的特定組 (wp_cache_set 的第三個引數) 。您可以使用 wp_cache_add_global_groups() 將組新增到全域性分組。
例如,使用者全域性分組在 multi-site 中,因為使用者表是共享的。因此,這提供了效能加速,因為在一個站點上載入的使用者將被放入永續性物件快取中,由使用者 ID 鍵入,並可立即在記憶體快取中的系統上的所有其他站點上使用。換句話說,它們是全球性的。這可以提供顯著的效能提升,並阻止您不需要 switch_to_blog 很多如果你想要 network-wide 資料。例如,most-recent-post 外掛可以將全域性分組儲存在物件快取中的最新帖子,然後網路上的每個站點都可以立即知道它,而無需搜尋,因為它們正在從共享記憶體快取中提取資訊。
長話短說:你如何做的事情很大程度上取決於你的具體用例,以及你是否計劃向一般公眾提供這些程式碼,誰可能不會分享你的具體設定。
次佳解決思路
W3TC 確實存在差異,其中包括:
-
快取資料庫查詢;
-
實現物件快取 (瞬態使用) 。
這是兩個完全獨立的過程。
使用瞬態快取來快取單個資料庫查詢並不涉及 memcached 和 W3TC 。瞬態最好用於片段快取的最終操作結果 (如 HTML 程式碼塊),而不是中間步驟。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。