在 ServBay 中使用 PHP memcache 擴充套件進行高效快取
ServBay 是一款功能強大的本機 Web 開發環境,為開發者提供多元的軟體包,其中內建對 PHP memcache
擴充套件的支援。memcache
是高效能、分散式的記憶體物件快取系統,被廣泛用於現代 Web 開發中,能有效提升應用效能。透過 ServBay,開發者可輕鬆在 PHP 專案中啟用並使用 memcache
快取資料。
什麼是 Memcache?
Memcache 是通用型的分散式記憶體快取系統,主要目的是將資料存放於記憶體中,藉此減輕資料庫及其他後端服務的負載,從而提升動態網頁的效能。它特別適合用於快取經常被存取的資料,例如資料庫查詢結果、API 響應或網頁片段。在本機開發階段,運用 memcache
能更真實模擬生產環境的快取行為,協助開發者優化應用程式效能。
主要特點
- 高效能:將資料存在記憶體中,讀寫速度極快,顯著縮短應用回應時間。
- 分散式架構:支援多台伺服器分散快取資料,提高系統擴充性與可用性。
- 簡單易用:API 介面直觀,方便開發者快速整合至應用中。
- 減輕後端負載:快取熱門資料,有效減少對資料庫、檔案系統或其他慢速資料來源的存取,降低後端壓力。
Memcache 與 Memcached 的區別
在 PHP 生態圈中,常見兩個與 Memcache 相關的擴充套件:memcache
與 memcached
。兩者皆可與 Memcache 伺服器進行通訊與資料操作,但在功能特性與 API 設計上存在差異:
memcache
擴充套件:- 屬於較早期的 PHP 擴充。
- 提供程序導向的 API。
- 功能較為基礎,可能不支援一些進階特色(如一致性哈希、SASL 驗證等)。
memcached
擴充套件:- 較新,通常基於
libmemcached
用戶端函式庫。 - 提供物件導向 API。
- 支援更多進階功能,如一致性哈希(確保分布式快取鍵更平均)、二進位協定、SASL 驗證與更豐富的選項設定。
- 較新,通常基於
ServBay 整合的 PHP 版本通常同時提供 memcache
與 memcached
兩種擴充套件。本文將聚焦於預設已啟用的 memcache
擴充套件之使用。
ServBay 中的 PHP memcache
擴充套件
ServBay 在其內建的每個 PHP 版本中皆預載並預設啟用 memcache
擴充套件。這代表您安裝或切換至任一 PHP 版本後,通常即能直接於 PHP 程式中使用 memcache
功能,無須額外設定。特定的 memcache
版本會依您選定的 PHP 版本由 ServBay 自動對應與安裝。
檢查與管理 memcache
擴充套件
即使 memcache
擴充套件預設已啟用,您仍可利用 ServBay 的圖形介面 (GUI) 檢視其狀態或進行管理:
- 開啟 ServBay 應用程式。
- 於側邊欄選擇 軟體包 (Packages)。
- 在清單中尋找您正使用的 PHP 版本(例如:PHP 8.2)。
- 點擊此 PHP 版本,檢視其詳細資訊與設定。
- 在 PHP 擴充套件清單中尋找
memcache
,確認開關呈現啟用(綠色)狀態。 - 若需啟用或停用,點擊該開關即可。設定變更後,ServBay 會提示需重啟 PHP 服務以生效。
另外,請確認 Memcache 服務本身也已啟動:
- 於 ServBay 側邊欄選擇 總覽 (Overview) 或 軟體包 (Packages)。
- 在服務或軟體包清單中找到 Memcache。
- 確認 Memcache 服務狀態顯示為「運行中」(Running)。若否,請嘗試啟動該服務。
在 PHP 程式中使用 memcache
當 memcache
擴充套件與 Memcache 服務皆已啟用且正常運作時,即可於 PHP 程式中透過 memcache
用戶端執行資料快取操作。Memcache 服務預設執行於 localhost
的 11211
埠口。
以下範例展示如何連線到 Memcache 伺服器、設定快取資料與存取快取:
php
<?php
// 確認 memcache 擴充套件已載入
if (!class_exists('Memcache')) {
die("Memcache extension is not loaded.");
}
// 建立 Memcache 實例
$memcache = new Memcache();
// 連線至 Memcache 伺服器
// 預設位址為 localhost,預設埠為 11211
$host = 'localhost';
$port = 11211;
if (!$memcache->connect($host, $port)) {
die("Could not connect to Memcache server at $host:$port");
} else {
echo "Successfully connected to Memcache server.<br>";
}
// --- 設定快取資料 ---
$key = 'user_profile_servbay_demo'; // 定義快取鍵
$data = [ // 欲快取之資料,可為字串、數字、陣列、物件等
'name' => 'ServBay Demo User',
'email' => '[email protected]',
'age' => 30,
'registered_at' => time()
];
// 使用 set() 方法寫入快取
// 參數:鍵名, 值, 是否壓縮 (可選), 有效期限(秒)
// MEMCACHE_COMPRESSED 指定啟用壓縮,可節省記憶體但增加 CPU 負擔
$expiration_time = 3600; // 快取 1 小時(3600 秒)
if ($memcache->set($key, $data, MEMCACHE_COMPRESSED, $expiration_time)) {
echo "Data successfully set in cache for key: $key<br>";
} else {
echo "Failed to set data in cache for key: $key<br>";
}
// --- 讀取快取資料 ---
// 使用 get() 取得快取內容
$cachedData = $memcache->get($key);
if ($cachedData !== false) { // get() 回傳 false 表示沒取到或已過期
echo "Data retrieved from cache for key: $key:<br>";
print_r($cachedData);
echo "<br>";
} else {
echo "No cache found or cache expired for key: $key<br>";
}
// --- 刪除快取(可選) ---
// 如有需要可使用 delete() 清除快取
// $memcache->delete($key);
// echo "Cache for key: $key deleted.<br>";
// --- 關閉連線(可選,PHP 執行結束會自動關閉) ---
// $memcache->close();
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
請將上述程式存為 .php
檔(如 memcache_test.php
),放至您的 ServBay 網站根目錄(如 /Applications/ServBay/www/your-project-name/
),然後在瀏覽器輸入對應網址(如 http://your-project-name.servbay.demo/memcache_test.php
),即可看到 Memcache 連線與快取存取結果。
前置條件
於 ServBay 使用 memcache
相關功能前,請確保:
- 您已在 macOS 上順利安裝並運行 ServBay。
- 您於 ServBay 中已配置一個或多個 PHP 網站,且所用 PHP 版本包含
memcache
擴充套件。 - Memcache 服務已於 ServBay 啟動並正常執行。
注意事項與故障排除
- 無法連線至 Memcache 服務:
- 確認 ServBay 的 Memcache 服務正在運作。可於 ServBay GUI 的「軟體包」或「總覽」頁檢查並試著啟動。
- 確認 PHP 程式連線的主機與埠口正確(預設為
localhost:11211
)。 - 檢查防火牆設定,確保本機至 11211 埠未被阻擋(本機開發常態下無此問題,惟少數特殊配置需注意)。
- PHP 出現
Class 'Memcache' not found
錯誤:- 代表
memcache
PHP 擴充未被載入。 - 請於 ServBay GUI 查找所用 PHP 版本的
memcache
擴充套件是否已啟用。 - 啟用擴充套件後需重啟該 PHP 服務,可用 ServBay GUI 之重啟按鈕。有時或需整個 ServBay 重啟。
- 代表
- 快取資料未按預期運作:
- 檢查快取鍵設定是否正確。
- 檢查快取過期時間是否合理。
- 確認寫入與讀取是否作用於同一個 Memcache 伺服器(ServBay 預設情況下一般僅有一組本機執行個體)。
結論
ServBay 為 PHP 開發者提供了一套便捷且高效的方法,在本機開發階段運用 memcache
進行資料快取。透過集成的 memcache
擴充與易於管理的 Memcache 服務,開發者可輕鬆在專案中導入高效能快取策略,更貼近生產環境條件,打造回應更快的 Web 應用。善用 ServBay 強大功能,讓您聚焦於程式開發本身,而不必煩惱繁複的環境設定。