PECL :: Package :: memcache 2.1.1 版本的Changelog 中有一條:
- Added experimental session storage support. You can use memcached as session storage.
也就是可以直接用memcache 來作PHP 的session.save_handler。
1. 安裝memcached
還是那套./configure; make; make install,注意memcached 用libevent 來作事件驅動,所以要先安裝有libevent。
2. 安裝pecl::memcache,用pecl 命令行工具安裝:
pecl install memcache
或直接從源碼安裝:
phpize
./configure
make
make install
將php.ini 中extension=memcache.so 打開,重啟一下apache,查看phpinfo 中的“Registered save handlers” 會有“files user memcache” 這3個可用。
3. 修改配置文件,在php.ini 中全局設置:
session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211″
或者某個目錄下的.htaccess :
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″);
使用多個memcached server 時用逗號”,”隔開,並且和Memcache::addServer() 文檔中說明的一樣,可以帶額外的參數”persistent”、”weight”、”timeout”、”retry_interval” 等等,類似這樣的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″ 。
4. 啟動memcached:
memcached -d -l 127.0.0.1 -p 11212 -m 128
5. 在程序中使用memcache 來作session 存儲,用例子測試一下:
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print “
”;
print $_SESSION['TEST3'];
print “
”;
print session_id();
6. 用sessionid 去memcached 裡查詢一下:
$memcache = memcache_connect('localhost', 11211);
var_dump($memcache->get('19216821213c65cedec65b0883238c278eeb573e077′));
會有看到
string(37) “TEST|i:1177556731;TEST3|i:1177556881;”
這樣的輸出,證明session 正常工作。
用memcache 來存儲session 在讀寫速度上會比files 時快很多,而且在多個服務器需要共用session 時會比較方便,將這些服務器都配置成使用同一組memcached 服務器就可以,減少了額外的工作量。 缺點是session 數據都保存在memory 中,持久化方面有所欠缺,但對session 數據來說也不是很大的問題。
另外,WS Memcached Session Handler for PHP 提供一種用session_set_save_handler 來利用memcached 的方法。
沒有留言:
張貼留言