sudo apt-get install memcached
自動啟動佔用 11211 端口。手動啟動參數:
memcached -d -m 128 -p 11211 -u memcache
| 參數 | 含義 |
|---|---|
| -p | 監聽端口 |
| -l | 綁定 IP (默認 127.0.0.1) |
| -d start/restart/stop | 服務控制 |
| -m | 最大內存 MB (默認 64) |
| -c | 最大連接數 (默認 1024) |
sudo apt-get install php5-memcache
重啟 Web 服務器 (Apache/Nginx+PHP-FPM)。
$mem = new Memcache;
$mem->connect('127.0.0.1', 11211);
$val = '測試數據'; $key = md5($val);
if ($mem->get($key)) {
echo 'from cache: ' . $mem->get($key);
} else {
echo 'from db';
$mem->set($key, $val, 0, 120); // 120 秒過期
}
session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211"
php_value session.save_handler "memcache" php_value session.save_path "tcp://127.0.0.1:11211"
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', 'tcp://127.0.0.1:11211');
多服務器逗號分隔,支持參數:tcp://host:port?persistent=1&weight=2
# 啟動 memcached memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
// set_session.php session_start(); if (!isset($_SESSION['admin'])) $_SESSION['admin'] = 'wan'; echo $_SESSION['admin'] . "\n" . session_id();
// get_session.php
$mem = new Memcache;
$mem->connect('127.0.0.1', 11211);
var_dump($mem->get('session_id值'));
// 輸出: string(16) "admin|s:3:"wan";"
ini_set('session.cookie_domain', '.example.com'); // 根域前加點
使 a.example.com、b.example.com 共享 PHPSESSID。
所有服務器配置相同的 session.save_path 指向同一組 Memcached 集群。
// a.example.com/session.php
ini_set('session.cookie_domain', 'example.com');
session_start();
$_SESSION['admin'] = 'wan';
// b.example.com/session2.php
ini_set('session.cookie_domain', 'example.com');
session_start();
echo $_SESSION['admin']; // 輸出 wan
| 優點 | 缺點 |
|---|---|
| 內存讀寫極快,無磁盤 IO 瓶頸 | 宕機數據丟失 (Session 可接受) |
| 天然支持分佈式共享 | 內存有限,需淘汰策略 |
| 減少 NFS/DB 共享存儲複雜度 | 需監控內存使用率 |
Ubuntu 安裝 Memcached + PHP 擴展極簡單。Session 遷移到 Memcached 只需修改 save_handler 與 save_path,多服務器共享再加 cookie_domain 即可。生產環境建議:Memcached 集群 + 持久化備份 (如 Redis AOF) + 監控報警。