Ubuntu server 11.04安裝memcache及php使用memcache來儲存session的方法,11.04memcache
本文執行個體講述了Ubuntu server 11.04安裝memcache及php使用memcache來儲存session的方法。分享給大家供大家參考,具體如下:
1、首先安裝memcache服務端:
sudo apt-get install memcached
安裝完成後系統 自動啟動了 memcached服務佔用11211連接埠
如需重新設定11211連接埠的服務 需要關閉已開啟的memcached服務
手動啟動:
memcached -d -m 128 -p 11211 -u memcache
這裡需要說明一下memcached服務的啟動參數:
-p 監聽的連接埠
-l 串連的IP地址, 預設是本機
-d start 啟動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在啟動並執行memcached服務
-d install 安裝memcached服務
-d uninstall 卸載memcached服務
-u 以的身份運行 (僅在以root啟動並執行時候有效)
-m 最大記憶體使用量,單位MB。預設64MB
-M 記憶體耗盡時返回錯誤,而不是刪除項
-c 最大同時串連數,預設是1024
-f 塊大小增長因子,預設是1.25-n 最小分配空間,key+value+flags預設是48
-h 顯示協助
2、安裝PHP Memecache 用戶端
$ sudo apt-get install php5-memcache
重啟web伺服器
測試memcache代碼:
<?php$mem = new Memcache; //建立Memcache對象$mem->connect("127.0.0.1", 11211); //串連Memcache伺服器$val = "這是一個Memcache的測試.";$key = md5($val);if(($k = $mem->get($key))){ //判斷是否擷取到指定的key echo 'from cache:'.$k;} else { echo 'normal'; //這裡我們在實際使用中就需要替換成查詢資料庫並建立緩衝. $mem->set($key, $val, 0, 120); //增加插入一條緩衝,緩衝時間為120s}
用memcache儲存session
一般地, Session 是以文字檔形式儲存在伺服器端的。如果使用 Seesion,或者該 PHP 檔案要調用 Session 變數,那麼就必須在調用 Session 之前啟動它,使用 session_start() 函數。其它都不需要你設定了,PHP 自動完成 Session 檔案的建立。其預設 Session 的存放路徑是伺服器的系統臨時檔案夾。
但是如果碰到大資料量的Sesstion的時候, 使用基於檔案的Session存取瓶頸可能都是在磁碟IO操作上,現在利用Memcached來儲存Session資料,直接通過記憶體的方式,效率自然能夠提高不少。 在讀寫速度上會比 files 時快很多,而且在多個伺服器需要共用 session 時會比較方便,將這些伺服器都配置成使用同一組 memcached 伺服器就可以,減少了額外的工作量。
其缺點是 session 資料都儲存在 memory 中,一旦宕機,資料將會丟失。但對 session 資料來說並不是嚴重的問題。
如何用 memcached 來儲存 session呢?以下是基本的配置步驟:
1. 安裝 memcached (略過,不清楚的筒子可以查看前面一篇文章:http://www.bkjia.com/article/85510.htm)
在 phpinfo 輸出中的 "Registered save handlers" 會有 "files user sqlite"。
2. 修改設定檔,
①. 在 php.ini 中全域設定(* 需要重啟伺服器)
session.save_handler = memcachesession.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://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.phpsession_start();if (!isset($_SESSION['admin'])) { $_SESSION['admin'] = '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('0935216dbc0d721d629f89efb89affa6'));?>
複製代碼 代碼如下:[root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php
輸出結果:
string(16) "admin|s:3:"wan";"
證明 session 正常工作。
再次深入 多網域名稱網站利用MEMCACHE方式共用SESSION資料
通過瞭解 SESSION 的工作原理,我們可以發現,在預設情況下,各個伺服器會各自分別對同一個用戶端產生 SESSION ID,如對於同一個使用者瀏覽器,A 伺服器產生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而 B 伺服器產生的則是 c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 資料都是分別儲存在本伺服器的檔案系統中。
確定了問題所在之後,就可以著手進行解決了。想要共用 SESSION 資料,那就必須實現兩個目標:一個是各個伺服器對同一個用戶端產生的 SESSION ID 必須相同,並且可通過同一個 COOKIE 進行傳遞,也就是說各個伺服器必須可以讀取同一個名為 PHPSESSID 的 COOKIE;另一個是 SESSION 資料的儲存方式/位置必須保證各個伺服器都能夠訪問到。簡單地說就是多伺服器共用用戶端的 SESSION ID,同時還必須共用伺服器端的 SESSION 資料。
第一個目標的實現其實很簡單,只需要對 COOKIE 的域(domain)進行特殊地設定即可,預設情況下,COOKIE 的域是當前伺服器的網域名稱/IP 位址,而域不同的話,各個伺服器所設定的 COOKIE 是不能相互訪問的,如 www.aaa.com 的伺服器是不能讀寫 www.bbb.com 伺服器設定的 COOKIE 的。這裡我們所說的同一網站的伺服器有其特殊性,那就是他們同屬於同一個一級域,如:tieba.xiaoyuan.com 和 www.xiaoyuan.com 都屬於域 .xiaoyuan.com,那麼我們就可以設定 COOKIE 的域為 .xiaoyuan.com,這樣 tieba.xiaoyuan.com、www.xiaoyuan.com 等等都可以訪問此 COOKIE。PHP 代碼中的設定方法如下:
<?phpini_set('session.cookie_domain', 'xiaoyuan.com');?>
這樣各個伺服器共用同一用戶端 SESSION ID 的目的就達到了。
於是 可以在 a.domain.com 下
session.php
<?phpini_set('session.cookie_domain', 'domain.com');session_start();if (!isset($_SESSION['admin'])) { $_SESSION['admin'] = 'wan';}print $_SESSION['admin'];print "\n";print session_id();
在b.domain.com下
session2.php
<?phpini_set('session.cookie_domain', 'domain.com');session_start();echo $_SESSION['admin'];
希望本文所述對大家Ubuntu平台上的php程式設計有所協助。
http://www.bkjia.com/PHPjc/1133039.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1133039.htmlTechArticleUbuntu server 11.04安裝memcache及php使用memcache來儲存session的方法,11.04memcache 本文執行個體講述了Ubuntu server 11.04安裝memcache及php使用memcache來儲存se...