linugb118--java space

          Java

          php的memcached客戶端memcached

          【轉(zhuǎn)】php的memcached客戶端memcached

          Tags:  ,  , 
          文章作者:Enjoy 轉(zhuǎn)載請注明原文鏈接。
          之前在安裝memcache時有提到memcached客戶端是叫memcache,其實(shí)還有一個基于libmemcached的客戶端叫memcached,據(jù)說性能更好,功能也更多。

          memcache的官方主頁:http://pecl.php.net/package/memcache
          memcached的官方主頁:http://pecl.php.net/package/memcached

          以下是我安裝Memcached版本的PHP模塊的過程記錄:

          wgethttp://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時,如果只用./configure,可能會提示:
          checking for memcached… no
          configure: error: “could not find memcached binary”

          兩者使用起來幾乎一模一樣。

              $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沒有memcache的connect方法,目前也還不支持長連接。
          memcached 支持 Binary Protocol,而 memcache 不支持,意味著 memcached 會有更高的性能。
          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)方法是由客戶端決定的。
          memcached的分布算法一般有兩種選擇:
          1、根據(jù)hash(key)的結(jié)果,模連接數(shù)的余數(shù)決定存儲到哪個節(jié)點(diǎn),也就是hash(key)% sessions.size(),這個算法簡單快速,表現(xiàn)良好。然而這個算法有個缺點(diǎn),就是在memcached節(jié)點(diǎn)增加或者刪除的時候,原有的緩存數(shù)據(jù)將大規(guī)模失效,命中率大受影響,如果節(jié)點(diǎn)數(shù)多,緩存數(shù)據(jù)多,重建緩存的代價太高,因此有了第二個算法。
          2、Consistent Hashing,一致性哈希算法,他的查找節(jié)點(diǎn)過程如下:
              首先求出memcached服務(wù)器(節(jié)點(diǎn))的哈希值,并將其配置到0~232的圓(continuum)上。然后用同樣的方法求出存儲數(shù)據(jù)的鍵的哈希值,并映射到圓上。然后從數(shù)據(jù)映射到的位置開始順時針查找,將數(shù)據(jù)保存到找到的第一個服務(wù)器上。如果超過2的32次方后仍然找不到服務(wù)器,就會保存到第一臺memcached服務(wù)器上。

          memcache在沒有任何配置的情況下,是使用第一種方法。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分布測試報(bào)告(一致性哈希情況下的散列函數(shù)選擇):http://www.iteye.com/topic/346682
          php模塊memcache和memcached區(qū)別:http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html
          PHP模塊:Memcached > Memcache:http://hi.baidu.com/thinkinginlamp/blog/item/717cd42a11f6e491023bf67a.html


          20110509@@UPDATE:
          如果安裝libmemcached有如下出錯提示:
          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時增加--disable-64bit CFLAGS="-O3 -march=i686"
          即:./configure --prefix=/usr/local/libmemcached --with-memcached --disable-64bit CFLAGS="-O3 -march=i686"

          posted on 2013-03-22 14:19 linugb118 閱讀(382) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临泽县| 洪江市| 柳江县| 马鞍山市| 和顺县| 甘孜县| 名山县| 定边县| 静宁县| 革吉县| 溆浦县| 东阳市| 房产| 壶关县| 新余市| 报价| 汕头市| 溧阳市| 新营市| 自治县| 绥棱县| 康马县| 凤城市| 桂阳县| 定结县| 晋中市| 象山县| 洛阳市| 麟游县| 安庆市| 中牟县| 绵竹市| 谷城县| 杂多县| 陕西省| 屯昌县| 临沂市| 虹口区| 定州市| 乌什县| 平原县|