1. 程式人生 > >PHP中使用memcache(或者redis)儲存session

PHP中使用memcache(或者redis)儲存session

問題:將session儲存在memcache中的好處?

優點: memcache 來儲存 session 在讀寫速度上會比 files 時快很多,而且在多個伺服器需要共用 session 時會比較方便,將這些伺服器都配置成使用同一組 memcached 伺服器就可以,減少了額外的工作量.

對於單一的k-v快取來說,memcache是最佳選擇,它的好處就在於簡單,速度也相當不錯。

但是,如果你需要儲存對映或欄位,或者如果你要儲存定序列表或可排序的集合,那麼Redis是最合適的。

問題:如何操作?

1. 安裝 memcached 
phpinfo 輸出中的 “Registered save handlers” 會有 “files user sqlite”。

2. 修改配置檔案,
a. 在 php.ini 中全域性設定(* 需要重啟伺服器
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
b. 或者某個目錄下的 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
c. 也可以在某個一個應用中:
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://host:port?persistent=1&weight=2,tcp://host2 :port2″ 。

3. 啟動 memcached
memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

4.測試 建立一個 session

程式碼如下:


<?php
//set_session.php
session_start();
if (!isset($_SESSION['admin'])) {
$_SESSION['TEST'] = 'wan';
}
print $_SESSION['admin'];
print "\n";
print session_id();
?>


5. 用 sessionid 去 memcached 裡查詢一下

程式碼如下:


<?php
//get_session.php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
var_dump($mem->get('0935216dbc0d721d629f89efb89affa 6'));
?>

程式碼如下:


[root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php


輸出結果:
string(16)
"admin|s:3:"wan";"
證明 session 正常工作。