linugb118--java space

          Java

          php的memcached客戶端memcached

          【轉】php的memcached客戶端memcached

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

          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是原生實現的,支持OO和非OO兩套接口并存,memcached是使用libmemcached,只支持OO接口。
          更詳細的區別:http://code.google.com/p/memcached/wiki/PHPClientComparison


          memcached服務端是集中式的緩存系統,分布式實現方法是由客戶端決定的。
          memcached的分布算法一般有兩種選擇:
          1、根據hash(key)的結果,模連接數的余數決定存儲到哪個節點,也就是hash(key)% sessions.size(),這個算法簡單快速,表現良好。然而這個算法有個缺點,就是在memcached節點增加或者刪除的時候,原有的緩存數據將大規模失效,命中率大受影響,如果節點數多,緩存數據多,重建緩存的代價太高,因此有了第二個算法。
          2、Consistent Hashing,一致性哈希算法,他的查找節點過程如下:
              首先求出memcached服務器(節點)的哈希值,并將其配置到0~232的圓(continuum)上。然后用同樣的方法求出存儲數據的鍵的哈希值,并映射到圓上。然后從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。如果超過2的32次方后仍然找不到服務器,就會保存到第一臺memcached服務器上。

          memcache在沒有任何配置的情況下,是使用第一種方法。memcached要實現第一種方法,似乎是使用(未確認):
          $md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);   

          第二種一致性哈希算法:

          memcache在php.ini中加
          Memcache.hash_strategy =consistent
          Memcache.hash_function =crc32


          memcached在程序中加(未確認)
          $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分布測試報告(一致性哈希情況下的散列函數選擇):http://www.iteye.com/topic/346682
          php模塊memcache和memcached區別: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 閱讀(381) 評論(0)  編輯  收藏


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


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安多县| 光泽县| 公安县| 安达市| 西吉县| 浏阳市| 宁明县| 莆田市| 长宁区| 连山| 琼结县| 济宁市| 丽水市| 兴海县| 郑州市| 朝阳县| 汕尾市| 靖安县| 清原| 泰州市| 古蔺县| 绥化市| 会同县| 阜新市| 十堰市| 麻栗坡县| 乳山市| 吉水县| 滨州市| 湄潭县| 仁寿县| 习水县| 西昌市| 汶川县| 桂阳县| 商河县| 锡林浩特市| 平果县| 临猗县| 宝兴县| 孙吴县|