每個人都想要一個速度很快的網站,網站速度越快,用戶停留和點擊頁面或購買產品的時間就越長,加快網站速度的方法之一是開啟緩存,而緩存背后的邏輯就是存儲信息,更具體一點說,就是找到一個比連接數據庫更快的存儲信息的地方。
在 WordPress 中,如果一些復雜的 SQL 查詢或者耗時的 HTTP 請求,其實它們的結果在一定時間內是不變的,那么為了網站速度,如果把這些操作的結果緩存起來,這樣下次進行同樣的 SQL 查詢和 HTTP 請求的時候,就可以直接從緩存中獲取數據,從而可以顯著加快網站的速度,當然一些復雜計算的結果也可以通過該方法進行緩存。+
那么在 WordPress 中如何快速緩存 SQL 查詢和 HTTP 響應呢?這個時候就要用到 WordPress 的短時緩存(Transients)功能。
什么是短時緩存(Transients)
我們知道 WordPress 緩存有多種類型,比如對象緩存、瀏覽器緩存、頁面緩存甚至數據庫緩存,每種類型都有其用途和設置步驟,比如需要安裝插件和更改服務器配置以啟用對象緩存等。
那么今天介紹的 Transients API,是 WordPress 用于在頁面加載期間臨時存儲 WordPress 中的信息,Transients 本身是“短暫的”或“臨時的”意思,那么 Transients API 可以理解為臨時緩存或者短暫緩存的意思,我這里將它翻譯成短時緩存,它是 WordPress 用來緩存一些復雜的 SQL 查詢和運算結果的最簡單的方法。
它給這些需要緩存的數據一個過期時間,并且時間一到就會自動刪除,所以在制作 WordPress 插件的時候,需要存儲一些有一定生命周期的數據的時候,Transients API 就是最好的選擇。
簡單說,Transients 是一種非常強大的工具,它不僅可以用來避免對頁面內容進行不必要的數據庫請求,還可以加快生成復雜標記的速度并加快耗時的第三方 API 請求。
WordPress Transients API 可以與 Redis 緩存完美結合,顯著提升網站性能。下面是具體的步驟,將 Transients API 與 Redis 緩存結合使用:
配置 Redis 緩存
- 確保 Redis 服務正在運行 確保你的服務器已經安裝并啟動了 Redis 服務。如果沒有安裝,請先進行安裝并啟動。
- 安裝 Redis 插件 安裝并激活 Redis 插件,例如 。
- 配置
wp-config.php
在wp-config.php
文件中添加 Redis 連接配置:phpdefine('WP_REDIS_CONFIG', [ 'token' => '', 'host' => '127.0.0.1', 'port' => 6379, 'database' => 1, // change for each site 'maxttl' => 3600 * 24 * 7, // 7 days 'timeout' => 1.0, 'read_timeout' => 1.0, 'prefetch' => true, 'split_alloptions' => true, 'strict' => true, 'debug' => false, 'prefix' => 'your-site-' // 緩存鍵前綴 ]); define('WP_REDIS_DISABLED', false);
使用 Transients 緩存
1. 緩存復雜查詢或 HTTP 請求
例如,要緩存作者的文章瀏覽量總和:
function get_author_views($post_author) { // 設置緩存鍵 $cache_key = 'author_views_' . $post_author; // 嘗試從緩存中獲取結果 $cached_views = get_transient($cache_key); // 如果緩存中沒有結果,執(zhí)行數據庫查詢 if ($cached_views === false) { global $wpdb; $cached_views = $wpdb->get_var($wpdb->prepare(" SELECT SUM(meta_value + 0) FROM {$wpdb->prefix}postmeta LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID WHERE meta_key = 'views' AND post_author = %d ", $post_author)); // 將結果存儲在緩存中,緩存時間為 1 小時 set_transient($cache_key, $cached_views, HOUR_IN_SECONDS); } return $cached_views; }
2. 清理緩存
當相關數據更新時,清理緩存:
function clear_author_views_cache($post_id) { $post_author = get_post_field('post_author', $post_id); $cache_key = 'author_views_' . $post_author; delete_transient($cache_key); } add_action('save_post', 'clear_author_views_cache');
你可以直接將我的代碼添加到你的主題的 functions.php
文件中。以下是詳細步驟:
1. 打開 functions.php
文件
找到你當前使用的主題目錄下的 functions.php
文件。通常這個文件位于 wp-content/themes/your-theme/functions.php
。
2. 添加緩存函數和清理函數
將以下代碼復制并粘貼到 functions.php
文件中:
// 獲取作者文章瀏覽量總和,并使用短時緩存 function get_author_views($post_author) { // 設置緩存鍵 $cache_key = 'author_views_' . $post_author; // 嘗試從緩存中獲取結果 $cached_views = get_transient($cache_key); // 如果緩存中沒有結果,執(zhí)行數據庫查詢 if ($cached_views === false) { global $wpdb; $cached_views = $wpdb->get_var($wpdb->prepare(" SELECT SUM(meta_value + 0) FROM {$wpdb->prefix}postmeta LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID WHERE meta_key = 'views' AND post_author = %d ", $post_author)); // 將結果存儲在緩存中,緩存時間為 1 小時 set_transient($cache_key, $cached_views, HOUR_IN_SECONDS); } return $cached_views; } // 清理作者文章瀏覽量緩存 function clear_author_views_cache($post_id) { $post_author = get_post_field('post_author', $post_id); $cache_key = 'author_views_' . $post_author; delete_transient($cache_key); } add_action('save_post', 'clear_author_views_cache');
3. 調用緩存函數
在需要獲取作者文章瀏覽量總和的地方,調用 get_author_views
函數。例如:
// 假設你在單個文章頁面上顯示作者的文章瀏覽量總和 $post_author = get_the_author_meta('ID'); $views = get_author_views($post_author); echo 'Total views: ' . $views;
將這段代碼添加到你的主題模板文件(例如 single.php
或 author.php
)中,適合的地方顯示作者的文章瀏覽量總和。
總結
通過將這些代碼添加到 functions.php
文件中,你可以使用 WordPress Transients 來緩存復雜的 SQL 查詢結果,并且在相關數據更新時清理緩存。
評論