Memcache的部署和使用

Memcache的部署和使用

一、memcache簡介

Memcachedanga.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 <num>      TCP port number to listen on (default: 11211)

-U <num>      UDP port number to listen on (default: 11211, 0 is off)

-s <file>     UNIX socket path to listen on (disables network support)

-a <mask>     access mask for UNIX socket, in octal (default: 0700)

-l <ip_addr>  interface to listen on (default: INADDR_ANY, all addresses)

-d            run as a daemon

-r            maximize core file limit

-u <username> assume identity of <username> (only when run as root)

-m <num>      max memory to use for items in megabytes (default: 64 MB)

-M            return error on memory exhausted (rather than removing items)

-c <num>      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    是設置memcachepid文件

 

三、Phpmemcache擴展的安裝

1、  windows平臺memcache擴展的安裝

下載相應版本的php_memcache.dll文件,然後將該文件放到D:\AppServ\php5\ext目錄下(路徑根據php安裝的位置不同請自行設置),然後更改相應的php.ini的設置,創建<?php phpinfo();?>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,內容如下:

<?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服務器運行的狀態

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

<?php
//連接
$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
"
";

 

 

 

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