Memcache的部署和使用

一、memcache簡介
Memcache是danga.com的一個項目,最早是爲 LiveJournal 服務的,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。
Memcache官方網站:http://memcached.org/

二、memcache的安裝
1、 下載源文件(目前最新穩定版本是memcached-1.4.5.tar.gz)
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
由於Memcache用到了libevent這個庫用於Socket的處理,所以還需要安裝libevent,
Libevent的官網爲http://www.monkey.org/~provos/libevent/,最新穩定版本爲:1.4.14b
wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
2、 安裝memcache
1)、安裝libevent

tar xzvf libevent-1.4.14b-stable.tar.gz

cd libevent-1.4.14b-stable

./configure --prefix=/usr

make && make install

cd ..

ls -al /usr/lib | grep libevent (查看是否安裝成功)

2)、安裝memcache

tar xzvf memcached-1.4.5.tar.gz

cd memcached-1.4.5

./configure --with-libevent=/usr

make && make install

ls -al /usr/local/bin/mem* (查看是否生成memcached可執行程序文件)

#備註:如果是64位的系統可能會報錯,因爲默認的庫文件只會安裝到/usr/lib下面
3、 啓動memcache

通過/usr/local/bin/memcached –h查看命令選項幫助

[root@Centos2 memcached-1.4.5]# /usr/local/bin/memcached -h
memcached 1.4.5
-p TCP port number to listen on (default: 11211)
-U UDP port number to listen on (default: 11211, 0 is off)
-s UNIX socket path to listen on (disables network support)
-a access mask for UNIX socket, in octal (default: 0700)
-l interface to listen on (default: INADDR_ANY, all addresses)
-d run as a daemon
-r maximize core file limit
-u assume identity of (only when run as root)
-m max memory to use for items in megabytes (default: 64 MB)
-M return error on memory exhausted (rather than removing items)
-c max simultaneous connections (default: 1024)
#啓動命令如下

/usr/local/bin/memcached -d -m 10 -u root -l 172.28.5.2 -p 12000 -c 1024 –P /tmp/memcached.pid

####相關選項說明
-d 表示啓動一個守護進程
-m 是分配給memcached使用的內存
-u 運行memcached的用戶
-l 是memcached監聽的ip
-p 是memcached監聽的端口
-c memcache運行的最大併發連接數
-P 是設置memcache的pid文件

三、Php的memcache擴展的安裝
1、 windows平臺memcache擴展的安裝
下載相應版本的php_memcache.dll文件,然後將該文件放到D:\AppServ\php5\ext目錄下(路徑根據php安裝的位置不同請自行設置),然後更改相應的php.ini的設置,創建的php文件,訪問這個文件看memcache模塊是否起作用。
2、 linux平臺memcache擴展的安裝
wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
cd ../
修改php.ini文件
查找/usr/local/php/etc/php.ini中的 extension_dir = "./"修改爲extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
並在此行後增加一行,然後保存:
extension = "memcache.so"
創建php文件aaa.php,內容如下:

Phpinfo();
?>
保存,然後訪問看是否能顯示memcache模塊的信息!

四、Memcache的使用
//使用部分是轉載的,原文地址:http://blog.csdn.net/heiyeshuwu
[ 接口介紹 ]
服務器端和客戶端都安裝配置好了,現在我們就來測試以下我們的成果。Memcache客戶端包含兩組接口,一組是面向過程的接口,一組是面向對象的接口,具體可以參考PHP手冊“LXXV. Memcache Functions” 這章。我們爲了簡單方便,就使用面向對象的方式,也便於維護和編寫代碼。Memcache面向對象的常用接口包括:
Memcache::connect -- 打開一個到Memcache的連接
Memcache::pconnect -- 打開一個到Memcache的長連接
Memcache::close -- 關閉一個Memcache的連接
Memcache::set -- 保存數據到Memcache服務器上
Memcache::get -- 提取一個保存在Memcache服務器上的數據
Memcache::replace -- 替換一個已經存在Memcache服務器上的項目(功能類似Memcache::set)
Memcache::delete -- 從Memcache服務器上刪除一個保存的項目
Memcache::flush -- 刷新所有Memcache服務器上保存的項目(類似於刪除所有的保存的項目)
Memcache::getStats -- 獲取當前Memcache服務器運行的狀態

[ 測試代碼 ]
現在我們開始一段測試代碼:

//連接
$mem = new Memcache;
$mem->connect("192.168.0.200", 12000);

//保存數據
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."
";

//替換數據
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "
";

//保存數組
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "
";

//刪除數據
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "
";

//清除所有數據
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "
";

//關閉連接
$mem->close();

//添加多臺memcached服務器

$b = new Memcache();
$b->addServer("10.55.38.18",11271);
$b->addServer("10.55.38.18",11272);
$b->addServer("10.55.38.18",11273);

$arrHosts = array('10.10.10.11'=>'11211','10.10.10.12'=>'11211');

$mc = new Memcache();
echo serialize($mc)."\n";
foreach($arrHosts as $host=>$port) {
echo 'start '.$host."\n";
$mc->connect($host,$port);

echo serialize($mc)."\n";
$stats = $mc->getStats();
echo $stats['pid']."\n";

}

?>

如果正常的話,瀏覽器將輸出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:

基本說明我們的Memcache安裝成功,我們再來分析以下上面的這段程序。

[ 程序分析 ]

初始化一個Memcache的對象:
$mem = new Memcache;

連接到我們的Memcache服務器端,第一個參數是服務器的IP地址,也可以是主機名,第二個參數是Memcache的開放的端口:
$mem->connect("192.168.0.200", 12000);

保存一個數據到Memcache服務器上,第一個參數是數據的key,用來定位一個數據,第二個參數是需要保存的數據內容,這裏是一個字符串,第三個參數是一個標記,一般設置爲0或者MEMCACHE_COMPRESSED就行了,第四個參數是數據的有效期,就是說數據在這個時間內是有效的,如果過去這個時間,那麼會被Memcache服務器端清除掉這個數據,單位是秒,如果設置爲0,則是永遠有效,我們這裏設置了60,就是一分鐘有效時間:
$mem->set('key1', 'This is first value', 0, 60);

從Memcache服務器端獲取一條數據,它只有一個參數,就是需要獲取數據的key,我們這裏是上一步設置的key1,現在獲取這個數據後輸出輸出:
$val = $mem->get('key1');
echo "Get key1 value: " . $val;

現在是使用replace方法來替換掉上面key1的值,replace方法的參數跟set是一樣的,不過第一個參數key1是必須是要替換數據內容的key,最後輸出了:
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val;

同樣的,Memcache也是可以保存數組的,下面是在Memcache上面保存了一個數組,然後獲取回來並輸出
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
print_r($val2);

現在刪除一個數據,使用delte接口,參數就是一個key,然後就能夠把Memcache服務器這個key的數據刪除,最後輸出的時候沒有結果
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "
";

最後我們把所有的保存在Memcache服務器上的數據都清除,會發現數據都沒有了,最後輸出key2的數據爲空,最後關閉連接
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "
";

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章