Memcached 是高效能分散式記憶體快取系統,廣泛用於緩解資料庫壓力、加速網頁回應。本文涵蓋 libevent 依賴處理、Memcached 服務端編譯安裝、多實例啟動參數、PHP memcache/memcached 擴充安裝、驗證測試全流程。
# CentOS/RHEL
yum -y install gcc gcc-c++ make libevent-devel
# Debian/Ubuntu
apt -y install build-essential libevent-dev
# 確認 libevent 版本
pkg-config --modversion libevent # 應 ≥ 2.0
cd /usr/local/src
wget https://memcached.org/latest -O memcached-latest.tar.gz
tar -zxvf memcached-latest.tar.gz
cd memcached-1.6.x
./configure --prefix=/usr/local/memcached --with-libevent=/usr
make -j$(nproc)
make install
# 建立軟連結方便呼叫
ln -sf /usr/local/memcached/bin/memcached /usr/local/bin/memcached
| 參數 | 說明 | 範例 |
|---|---|---|
-d | 守護進程模式 | -d |
-m <MB> | 記憶體上限(MB) | -m 1024 |
-u <user> | 運行使用者(需非 root) | -u memcached |
-l <IP> | 監聽介面(預設 0.0.0.0) | -l 127.0.0.1 |
-p <port> | TCP 連接埠(預設 11211) | -p 11211 |
-U <port> | UDP 連接埠(0 關閉) | -U 0 |
-c <conns> | 最大並發連線(預設 1024) | -c 2048 |
-t <threads> | 工作執行緒數(預設 4) | -t 8 |
-P <pidfile> | PID 檔路徑 | -P /var/run/memcached.pid |
-vv | 詳細日誌(除錯用) | -vv > /var/log/memcached.log 2>&1 |
/etc/init.d/memcached 或 systemd)
# systemd 單元檔 /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached
After=network.target
[Service]
Type=forking
User=memcached
Group=memcached
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/local/bin/memcached -d -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN -P $PIDFILE $OPTIONS
PIDFile=/var/run/memcached/memcached.pid
[Install]
WantedBy=multi-user.target
# /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS="-l 127.0.0.1 -t 8"
PIDFILE="/var/run/memcached/memcached.pid"
systemctl daemon-reload
systemctl enable --now memcached
# 實例 1:Session 快取(11211,512MB)
memcached -d -u memcached -l 127.0.0.1 -p 11211 -m 512 -c 2048 -t 4 -P /var/run/memcached-11211.pid
# 實例 2:頁面片段快取(11212,1GB)
memcached -d -u memcached -l 127.0.0.1 -p 11212 -m 1024 -c 4096 -t 8 -P /var/run/memcached-11212.pid
# 透過 PECL
pecl install memcache
# 或手動
cd /usr/local/src
wget https://pecl.php.net/get/memcache-4.0.tgz
tar -zxvf memcache-4.0.tgz
cd memcache-4.0
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
make && make install
# 需 libmemcached 庫
yum -y install libmemcached-devel # 或 apt install libmemcached-dev
pecl install memcached
# 手動編譯同理,configure 加 --enable-memcached --with-libmemcached-dir=/usr
extension=memcache.so
; 或
extension=memcached.so
; 確認 extension_dir 指向正確路徑
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/"
systemctl restart php-fpm # 或 apache
php -m | grep memcache
addServer('127.0.0.1', 11211);
$key = 'test_key';
$val = 'Hello Memcached at ' . date('Y-m-d H:i:s');
$mem->set($key, $val, 60); // 過期 60 秒
echo "Set: $val\n";
$got = $mem->get($key);
echo "Get: $got\n";
echo $got === $val ? "✅ PASS" : "❌ FAIL";
-l 綁定 IP、防火牆 firewall-cmd --add-port=11211/tcp、SELinux setsebool -P httpd_can_network_memcache 1。stats 指令觀察 evictions、bytes、limit_maxbytes,適度調大 -m。memcache 尚未釋出正式相容版,建議統一遷移 memcached。Memcached 部署核心在於 libevent 依賴解決、-m/-c/-t 參數依負載調優、PHP 選擇 memcached 擴充以獲長期支援。配合 systemd 多實例管理、監控 stats 指標,即可構建高可用快取層。