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");
注:
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 正常工作。