php的memcached客戶(hù)端memcached
memcached的官方主頁(yè):http://pecl.php.net/package/memcached
以下是我安裝Memcached版本的PHP模塊的過(guò)程記錄:
wget http://download.tangent.org/libmemcached-0.48.tar.gz
tar zxf libmemcached-0.48.tar.gz
cd libmemcached-0.48
./configure --prefix=/usr/local/libmemcached --with-memcached
make
make install
wget http://pecl.php.net/get/memcached-1.0.2.tgz
tar zxf memcached-1.0.2.tgz
cd memcached-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --enable-memcached --with-php-config=/usr/local/webserver/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make
make install
在php.ini中加入
extension=memcached.so
完成
另:
在安裝libmemcached時(shí),如果只用./configure,可能會(huì)提示:
checking for memcached… no
configure: error: “could not find memcached binary”
兩者使用起來(lái)幾乎一模一樣。
$mem = new Memcache;
$mem->addServer($memcachehost, '11211');
$mem->addServer($memcachehost, '11212');
$mem->set('hx','9enjoy');
echo $mem->get('hx');
$md = new Memcached;
$servers = array(
array($memcachehost, '11211'),
array($memcachehost, '11212')
);
$md->addServers($servers);
$md->set('hx','9enjoy');
echo $md->get('hx');
memcached的方法比memcache多不少,比如getMulti,getByKey,addServers等。
memcached沒(méi)有memcache的connect方法,目前也還不支持長(zhǎng)連接。
memcached 支持 Binary Protocol,而 memcache 不支持,意味著 memcached 會(huì)有更高的性能。
Memcache是原生實(shí)現(xiàn)的,支持OO和非OO兩套接口并存,memcached是使用libmemcached,只支持OO接口。
更詳細(xì)的區(qū)別:http://code.google.com/p/memcached/wiki/PHPClientComparison
memcached服務(wù)端是集中式的緩存系統(tǒng),分布式實(shí)現(xiàn)方法是由客戶(hù)端決定的。
memcached的分布算法一般有兩種選擇:
1、根據(jù)hash(key)的結(jié)果,模連接數(shù)的余數(shù)決定存儲(chǔ)到哪個(gè)節(jié)點(diǎn),也就是hash(key)% sessions.size(),這個(gè)算法簡(jiǎn)單快速,表現(xiàn)良好。然而這個(gè)算法有個(gè)缺點(diǎn),就是在memcached節(jié)點(diǎn)增加或者刪除的時(shí)候,原有的緩存數(shù)據(jù)將大規(guī)模失效,命中率大受影響,如果節(jié)點(diǎn)數(shù)多,緩存數(shù)據(jù)多,重建緩存的代價(jià)太高,因此有了第二個(gè)算法。
2、Consistent Hashing,一致性哈希算法,他的查找節(jié)點(diǎn)過(guò)程如下:
首先求出memcached服務(wù)器(節(jié)點(diǎn))的哈希值,并將其配置到0~232的圓(continuum)上。然后用同樣的方法求出存儲(chǔ)數(shù)據(jù)的鍵的哈希值,并映射到圓上。然后從數(shù)據(jù)映射到的位置開(kāi)始順時(shí)針查找,將數(shù)據(jù)保存到找到的第一個(gè)服務(wù)器上。如果超過(guò)2的32次方后仍然找不到服務(wù)器,就會(huì)保存到第一臺(tái)memcached服務(wù)器上。
memcache在沒(méi)有任何配置的情況下,是使用第一種方法。memcached要實(shí)現(xiàn)第一種方法,似乎是使用(未確認(rèn)):
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
第二種一致性哈希算法:
memcache在php.ini中加
Memcache.hash_strategy =consistent
Memcache.hash_function =crc32
memcached在程序中加(未確認(rèn))
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
或
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
一些參考文檔:
memcached分布測(cè)試報(bào)告(一致性哈希情況下的散列函數(shù)選擇):
http://www.iteye.com/topic/346682
php模塊memcache和memcached區(qū)別: http://m.fzitv.net/article/27366.htm
PHP模塊:Memcached > Memcache:http://m.fzitv.net/article/27367.htm
20110509@@UPDATE:
如果安裝libmemcached有如下出錯(cuò)提示:
make[2]: *** [clients/ms_conn.o] Error 1
make[2]: Leaving directory `/www/soft/libmemcached-0.48'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/www/soft/libmemcached-0.48'
make: *** [all] Error 2
可在configure時(shí)增加--disable-64bit CFLAGS="-O3 -march=i686"
即:./configure --prefix=/usr/local/libmemcached --with-memcached --disable-64bit CFLAGS="-O3 -march=i686"
- php模塊memcache和memcached區(qū)別分析
- PHP Memcached應(yīng)用實(shí)現(xiàn)代碼
- php擴(kuò)展memcached和memcache的安裝配置方法
- PHP 使用memcached簡(jiǎn)單示例分享
- PHP MemCached高級(jí)緩存配置圖文教程
- PHP MemCached 高級(jí)緩存應(yīng)用代碼
- php下Memcached入門(mén)實(shí)例解析
- php制作文本式留言板
- php實(shí)現(xiàn)網(wǎng)站留言板功能
- PHP結(jié)合Mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)留言板功能
- 基于thinkPHP框架實(shí)現(xiàn)留言板的方法
- php+Memcached實(shí)現(xiàn)簡(jiǎn)單留言板功能示例
相關(guān)文章
深入掌握include_once與require_once的區(qū)別
要深入掌握include(_once)與require(_once),需要掌握以下幾點(diǎn)內(nèi)容,不過(guò)有人建議不建議使用2013-06-06
PHP實(shí)現(xiàn)帶進(jìn)度條的Ajax文件上傳功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)帶進(jìn)度條的Ajax文件上傳功能,結(jié)合實(shí)例形式分析了php+ajax文件上傳基礎(chǔ)上添加進(jìn)度條功能相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07
PHP實(shí)現(xiàn)遞歸復(fù)制整個(gè)文件夾的類(lèi)實(shí)例
這篇文章主要介紹了PHP實(shí)現(xiàn)遞歸復(fù)制整個(gè)文件夾的類(lèi),涉及php針對(duì)文件的遞歸操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
PHP如何使用cURL實(shí)現(xiàn)Get和Post請(qǐng)求
這篇文章主要介紹了PHP如何使用cURL實(shí)現(xiàn)Get和Post請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
PHP 多進(jìn)程與信號(hào)中斷實(shí)現(xiàn)多任務(wù)常駐內(nèi)存管理實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于PHP 多進(jìn)程與信號(hào)中斷實(shí)現(xiàn)多任務(wù)常駐內(nèi)存管理的相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。2019-10-10
PHP實(shí)現(xiàn)二維數(shù)組(或多維數(shù)組)轉(zhuǎn)換成一維數(shù)組的常見(jiàn)方法總結(jié)
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組(或多維數(shù)組)轉(zhuǎn)換成一維數(shù)組的常見(jiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了PHP數(shù)組遍歷、轉(zhuǎn)換所涉及的array_reduce、array_walk_recursive及array_map函數(shù)常見(jiàn)使用技巧,需要的朋友可以參考下2019-12-12
php動(dòng)態(tài)添加url查詢(xún)參數(shù)的方法
這篇文章主要介紹了php動(dòng)態(tài)添加url查詢(xún)參數(shù)的方法,涉及php通過(guò)正則替換操作URL的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
WordPress開(kāi)發(fā)中用于獲取近期文章的PHP函數(shù)使用解析
這篇文章主要介紹了WordPress開(kāi)發(fā)中用于獲取近期文章的PHP函數(shù)使用解析,即對(duì)wp_get_recent_posts函數(shù)的使用方法介紹,需要的朋友可以參考下2016-01-01
PHP提示Deprecated: mysql_connect(): The mysql extension is dep
這篇文章主要介紹了PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解決方法,是在進(jìn)行PHP數(shù)據(jù)庫(kù)程序開(kāi)發(fā)中常會(huì)遇到的錯(cuò)誤,需要的朋友可以參考下2014-08-08

