[譯] 使用 PhpFastCache 提升網站效能

lsvih發表於2018-07-22

本文將與你一同探索 PhpFastCache 庫,來為你的 PHP 應用實現快取功能。通過快取功能,能夠提升網站的整體效能與頁面載入速度。

什麼是 PhpFastCache?

PhpFastCache 是一個能讓你輕鬆在 PHP 應用中實現快取功能的庫。它的功能強大,且簡單易用,提供了一些 API 以無痛實現快取策略。

PhpFastCache 不是一個純粹的傳統檔案系統式快取。它支援各種各樣的檔案介面卡(Files Adapter),可以讓你選擇 Memcache、Redis、MongoDB、CouchDB 等高效能的後端服務。

讓我們先總覽一遍最流行的介面卡:

  • 檔案系統
  • Memcache、Redis 和 APC
  • CouchDB 和 MongoDB
  • Zend Disk Cache 和 Zend Memory Cache

如果你用的檔案介面卡不在上面的列表中,也可以簡單地開發一個自定義驅動,插入到系統中,同樣也能高效地執行。

除了基本功能外,PhpFastCache 還提供了事件機制,可以讓你對預定義好的事件進行響應。例如,當某個事物從快取中被刪除時,你可以接收到這個事件,並去重新整理或刪除相關的資料。

在下面的章節中,我們將通過一些示例來了解如何安裝及配置 PhpFastCache。

安裝與配置

在本節中,我們將瞭解如何安裝及配置 PhpFastCache。下面是幾種將它整合進專案的方法。

如果你嫌麻煩,僅準備下載這個庫的 .zip 或者 .tar.gz 檔案,可以去官方網站直接下載。

或者你也可以用 Composer 包的方式來安裝它。這種方式更好,因為在之後的維護和升級時會更方便。如果你還沒有安裝 Composer,需要先去安裝它。

當你安裝好 Composer 之後,可以用以下命令下載 PhpFastCache:

$composer require phpfastcache/phpfastcache
複製程式碼

命令完成後,你會得到一個 vendor 目錄,在此目錄中包括了全部 PhpFastCache 所需的檔案。另外,如果你缺失了 PhpFastCache 依賴的庫或外掛,Composer 會提醒你先去安裝依賴。

你需要找到 composer.json 檔案,它類似於下面這樣:

{
    "require": {
        "phpfastcache/phpfastcache": "^6.1"
    }
}
複製程式碼

無論你通過什麼方式來安裝的 PhpFastCache,都要在應用中 include autoload.php 檔案。

如果你用的是基於 Composer 的工作流,autoload.php 檔案會在 vendor 目錄中。

// Include composer autoloader
require '{YOUR_APP_PATH}/vendor/autoload.php';
複製程式碼

另外,如果你是直接下載的 .zip.tar.gzautoload.php 的路徑會在 src/autoload.php

// Include autoloader
require '{YOUR_APP_PATH}/src/autoload.php';
複製程式碼

只要完成上面的操作,就能開始進行快取,享受 PhpFastCache 帶來的好處了。在下一章節中,我們將以一個簡單的示例來介紹如何在你的應用中使用 PhpFastCache。

示例

前面我提到過,PhpFastCache 支援多種檔案介面卡進行快取。在本節中,我會以檔案系統和 Redis 這兩種檔案介面卡為例進行介紹。

使用檔案介面卡進行快取

建立 file_cache_example.php 檔案並寫入下面的程式碼。在此我假設你使用的是 Composer workflow,因此 vendor 目錄會與 file_cache_example.php 檔案同級。如果你是手動安裝的 PhpFastCache,需要根據實際情況修改檔案結構。

<?php
/**
 * file_cache_example.php
 *
 * Demonstrates usage of phpFastCache with "file system" adapter
 */
 
// Include composer autoloader
require __DIR__ . '/vendor/autoload.php';
 
use phpFastCache\CacheManager;
 
// Init default configuration for "files" adapter
CacheManager::setDefaultConfig([
  "path" => __DIR__ . "/cache"
]);
 
// Get instance of files cache
$objFilesCache = CacheManager::getInstance('files');
 
$key = "welcome_message";
 
// Try to fetch cached item with "welcome_message" key
$CachedString = $objFilesCache->getItem($key);
 
if (is_null($CachedString->get()))
{
    // The cached entry doesn't exist
    $numberOfSeconds = 60;
    $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
    $objFilesCache->save($CachedString);
 
    echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
else
{
    // The cached entry exists
    echo "Already in cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
複製程式碼

現在,我們一塊一塊地來理解程式碼。首先看到的是將 autoload.php 檔案引入,然後匯入要用到的 namespace:

// Include composer autoloader
require __DIR__ . '/vendor/autoload.php';
 
use phpFastCache\CacheManager;
複製程式碼

當你使用檔案快取的時候,最好提供一個目錄路徑來存放快取系統生成的檔案。下面的程式碼就是做的這件事:

// Init default configuration for "files" adapter
CacheManager::setDefaultConfig([
  "path" => __DIR__ . "/cache"
]);
複製程式碼

當然,你需要確保 cache 目錄存在且 web server 有寫入許可權。

接下來,我們將快取物件例項化,用 welcome_message 載入對應的快取物件。

// Get instance of files cache
$objFilesCache = CacheManager::getInstance('files');
 
$key = "welcome_message";
 
// Try to fetch cached item with "welcome_message" key
$CachedString = $objFilesCache->getItem($key);
複製程式碼

如果快取中不存在此物件,就將它以 60s 過期時間加入快取,並從快取中讀取與展示它。如果它存在於快取中,則直接獲取:

if (is_null($CachedString->get()))
{
    // The cached entry doesn't exist
    $numberOfSeconds = 60;
    $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
    $objFilesCache->save($CachedString);
 
    echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
else
{
    // The cached entry exists
    echo "Already in cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
複製程式碼

非常容易上手對吧!你可以試著自己去執行一下這個程式來檢視結果。

當你第一次執行這個程式時,應該會看到以下輸出:

Not in cache yet, we set it in cache and try to get it from cache!
The value of welcome_message: This website uses PhpFastCache!
複製程式碼

之後再執行的時候,輸出會是這樣:

Already in cache!
The value of welcome_message: This website uses PhpFastCache!
複製程式碼

現在就能隨手實現檔案系統快取了。在下一章節中,我們將模仿這個例子來使用 Redis Adapter 實現快取。

使用 Redis Adapter 進行快取

假定你在閱讀本節前已經安裝好了 Redis 服務,並讓它執行在 6379 預設埠上。

下面進行配置。建立 redis_cache_example.php 檔案並寫入以下程式碼:

<?php
/**
 * redis_cache_example.php
 *
 * Demonstrates usage of phpFastCache with "redis" adapter
 *
 * Make sure php-redis extension is installed along with Redis server.
 */
 
// Include composer autoloader
require __DIR__ . '/vendor/autoload.php';
 
use phpFastCache\CacheManager;
 
// Init default configuration for "redis" adapter
CacheManager::setDefaultConfig([
  "host" => '127.0.0.1',
  "port" => 6379
]);
 
// Get instance of files cache
$objRedisCache = CacheManager::getInstance('redis');
 
$key = "welcome_message";
 
// Try to fetch cached item with "welcome_message" key
$CachedString = $objRedisCache->getItem($key);
 
if (is_null($CachedString->get()))
{
    // The cached entry doesn't exist
    $numberOfSeconds = 60;
    $CachedString->set("This website uses PhpFastCache!")->expiresAfter($numberOfSeconds);
    $objRedisCache->save($CachedString);
 
    echo "Not in cache yet, we set it in cache and try to get it from cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
else
{
    // The cached entry exists
    echo "Already in cache!</br>";
    echo "The value of welcome_message:" . $CachedString->get();
}
複製程式碼

如你所見,除了初始化 Redis 介面卡的配置一段之外,這個檔案與之前基本一樣。

// Init default configuration for "redis" adapter
CacheManager::setDefaultConfig([
  "host" => '127.0.0.1',
  "port" => 6379
]);
複製程式碼

當然如果你要在非本機執行 Redis 服務,需要根據需求修改 host 與 port 的設定。

執行 redis_cache_example.php 檔案來檢視它的工作原理。你也可以在 Redis CLI 中檢視輸出。

127.0.0.1:6379> KEYS *
1) "welcome_message"
複製程式碼

以上就是使用 Redis 介面卡的全部內容。你可以去多試試其它不同的介面卡和配置!

總結

本文簡單介紹了 PhpFastCache 這個 PHP 中非常熱門的庫。在文章前半部分,我們討論了它的基本知識以及安裝和配置。在文章後半部分,我們通過幾個例子來詳細演示了前面提到的概念。

希望你喜歡這篇文章,並將 PhpFastCache 整合到你即將開發的專案中。隨時歡迎提問和討論!

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章