問題描述
當我們使用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。