Memcached 是分佈式高性能內存鍵值存儲,廣泛用於緩解資料庫壓力、加速頁面渲染。本文系統整理 Memcached 核心方法、PHP 操作實戰代碼、工作原理與最佳實踐,助你構建高可用緩存層。
| 方法 | 功能 | 備註 |
|---|---|---|
add() | 新增鍵值,鍵存在則返回 false | 適合併發鎖、防重複寫入 |
addServer() | 添加伺服器節點 | 支援多節點分佈式 |
connect() / pconnect() | 短/長連接建立 | 長連接減少握手開銷 |
set() | 存儲/覆蓋鍵值 | 支援過期時間、壓縮閾值 |
get() | 獲取鍵值 | 不存在返回 false |
replace() | 覆蓋現有鍵,不存在失敗 | 配合 CAS 實現樂觀鎖 |
increment() / decrement() | 原子增減操作 | 計數器、排行榜首選 |
delete() | 刪除鍵 | |
flush() | 清空所有緩存 | 慎用,生產環境建議禁用 |
getStats() / getExtendedStats() | 獲取運行統計 | 監控命中率、內存佔用 |
setCompressThreshold() | 設置壓縮閾值 | 大值自動壓縮節省內存 |
<?php
$mem = new Memcache;
$mem->connect('127.0.0.1', 11211) or die('連接失敗');
// 存儲字符串
$mem->set('name', '張三', 0, 60); // 0=不壓縮, 60秒過期
$val = $mem->get('name');
echo "Get key1 value: $val<br>";
// 替換數據
$mem->replace('name', '李四', 0, 60);
$val = $mem->get('name');
echo "Get key1 value: $val<br>";
// 存儲陣列(自動序列化)
$arr = ['aaa', 'bbb', 'ccc', 'ddd'];
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
// 刪除與清空
$mem->delete('key1');
$mem->flush();
$mem->close();
?>
session.save_handler = memcached 實現多伺服器會話同步。get_hits / (get_hits + get_misses) > 95% 為健康。bytes / limit_maxbytes < 80% 預留擴容空間。curr_connections 監控連接洩漏。evictions 持續增長說明內存不足。Memcached 以極致性能換取功能簡潔,核心優勢在於 O(1) 讀寫、水平擴展、多語言客戶端。實戰中務必建立完善的監控告警、容量規劃、故障演練體系,將緩存層打造為系統穩定性的基石而非隱患來源。