三種memcached的JAVA用戶端比較__JAVA

來源:互聯網
上載者:User

Memcached用戶端程式

Memcached的java用戶端已經存在三種了:

* 官方提供的基於傳統阻塞io由Greg Whalin維護的用戶端

* DustinSallings實現的基於java nio的Spymemcached

* XMemcached


1. 三種API比較 
1)      memcached client forjava

較早推出的memcached JAVA用戶端API,應用廣泛,運行比較穩定。


2)      spymemcached

A simple,asynchronous, single-threaded memcached client written in java. 支援非同步,單線程的memcached用戶端,用到了java1.5版本的concurrent和nio,存取速度會高於前者,但是穩定性不好,測試中常報timeOut等相關異常。


3)      xmemcached

XMemcached同樣是基於java nio的用戶端,java nio相比於傳統阻塞io模型來說,有效率高(特別在高並發下)和資源耗費相對較少的優點。傳統阻塞IO為了提高效率,需要建立一定數量的串連形成串連池,而nio僅需要一個串連即可(當然,nio也是可以做池化處理),相對來說減少了線程建立和切換的開銷,這一點在高並發下特別明顯。因此XMemcached與Spymemcached在效能都非常優秀,在某些方面(儲存的資料比較小的情況下)Xmemcached比Spymemcached的表現更為優秀,具體可以看這個Java Memcached Clients Benchmark。


2.  建議

由於memcached client for java發布了新版本,效能上有所提高,並且運行穩定,所以建議使用memcached clientfor java。

XMemcached也使用得比較廣泛,而且有較詳細的中文API文檔,具有如下特點:高效能、支援完整的協議、支援用戶端分布、允許設定節點權重、動態增刪節點、支援JMX、與Spring架構和Hibernate-memcached的整合、用戶端串連池、可擴充性好等。

下面給出這三種用戶端的樣本程式。


3.  樣本程式
1)      memcached client forjava

從前面介紹的Java環境的Memcached用戶端程式項目網址裡,下載最新版的用戶端程式包:java_memcached-release_2.5.1.zip,解壓後,檔案夾裡找到java_memcached-release_2.5.1.jar,這個就是用戶端的JAR包。將此JAR包添加到項目的構建路徑裡,則項目中,就可以使用Memcached了。

範例程式碼如下:

package temp;

 

importcom.danga.MemCached.*;

importorg.apache.log4j.*;

 

public classCacheTest {

   public static void main(String[] args) {

      /**

       * 初始化SockIOPool,管理memcached的串連池

       * */

      String[] servers = { "10.11.15.222:10000" };

      SockIOPool pool = SockIOPool.getInstance();

      pool.setServers(servers);

      pool.setFailover(true);

      pool.setInitConn(10);

      pool.setMinConn(5);

      pool.setMaxConn(250);

      pool.setMaintSleep(30);

      pool.setNagle(false);

      pool.setSocketTO(3000);

      pool.setAliveCheck(true);

      pool.initialize();

      

      /**

       * 建立MemcachedClient執行個體

       * */

      MemCachedClient memCachedClient = new MemCachedClient();

      for (int i = 0; i < 1000; i++) {

          /**

           * 將對象加入到memcached緩衝

           * */

          boolean success = memCachedClient.set("" + i, "Hello!");

          /**

           * 從memcached緩衝中按key值取對象

           * */

          String result = (String) memCachedClient.get("" + i);

          System.out.println(String.format("set( %d ): %s", i, success));

          System.out.println(String.format("get( %d ): %s", i, result));

      }

   }

}


2)      spymemcached

spymemcached目前的版本是2.5版本,官方網址是:http://code.google.com/p/spymemcached/。可以從地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar下載最新版本來使用。

範例程式碼如下:

package temp;

 

importjava.net.InetSocketAddress;

importjava.util.concurrent.Future;

 

importnet.spy.memcached.MemcachedClient;

 

public classTestSpyMemcache {

   public static void main(String[] args) {

      // 儲存對象

      try {

          /* 建立MemcachedClient 執行個體,並指定memcached服務的IP地址和連接埠號碼 */

          MemcachedClient mc = new MemcachedClient(newInetSocketAddress("10.11.15.222", 10000));

          Future<Boolean> b = null;

          /* 將key值,到期時間(秒)和要緩衝的對象set到memcached中 */

          b = mc.set("neea:testDaF:ksIdno", 900, "someObject");

          if (b.get().booleanValue() == true) {

             mc.shutdown();

          }

      } catch (Exception ex) {

          ex.printStackTrace();

      }

      // 取得對象

       try {

          /* 建立MemcachedClient 執行個體,並指定memcached服務的IP地址和連接埠號碼 */

          MemcachedClient mc = new MemcachedClient(newInetSocketAddress("10.11.15.222", 10000));

          /* 按照key值從memcached中尋找緩衝,不存在則返回null */

          Object b = mc.get("neea:testDaF:ksIdno");

          System.out.println(b.toString());

          mc.shutdown();

      } catch (Exception ex) {

          ex.printStackTrace();

      }

   }

}


3)      xmemcached

Xmemcached的官方網址是:http://code.google.com/p/xmemcached/,可以從其官網上下載最新版本的1.2.4來使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz。

範例程式碼如下:

package temp;

 

importjava.io.IOException;

importjava.util.concurrent.TimeoutException;

 

importnet.rubyeye.xmemcached.utils.AddrUtil;

importnet.rubyeye.xmemcached.MemcachedClient;

importnet.rubyeye.xmemcached.MemcachedClientBuilder;

importnet.rubyeye.xmemcached.XMemcachedClientBuilder;

importnet.rubyeye.xmemcached.exception.MemcachedException;

 

public classTestXMemcache {

   public static void main(String[] args) {

      MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil

             .getAddresses("10.11.15.222:10000"));

      MemcachedClient memcachedClient;

      try {

          memcachedClient = builder.build();

      

          memcachedClient.set("hello", 0, "Hello,xmemcached");

          String value = memcachedClient.get("hello");

          System.out.println("hello=" + value);

          memcachedClient.delete("hello");

          value = memcachedClient.get("hello");

          System.out.println("hello=" + value);

          // close memcached client

          memcachedClient.shutdown();

      } catch (MemcachedException e) {

          System.err.println("MemcachedClient operation fail");

          e.printStackTrace();

      } catch (TimeoutException e) {

          System.err.println("MemcachedClient operation timeout");

          e.printStackTrace();

      } catch (InterruptedException e) {

          // ignore

      }catch (IOException e) {

          System.err.println("Shutdown MemcachedClient fail");

          e.printStackTrace();

      }

   }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.