首頁  >  文章  >  Java  >  實例講解分散式快取軟體Memcached的Java客戶端使用

實例講解分散式快取軟體Memcached的Java客戶端使用

高洛峰
高洛峰原創
2017-01-23 09:49:231466瀏覽

Memcached介紹
下面就來介紹一下Memcached。

1、什麼是Memcached

Memcached是一個開源的高性能,分佈式的內存對象緩存系統,通過鍵值隊的形式來對數據進行訪問,Memcached是簡單而強大,它的簡單設計促進快速部署,易於開發,解決了大數據快取面臨的許多問題。


官方網址是:http://memcached.org/,目前已經有許多知名的網路應用程式使用到了Memcached,例如Wikipedia、Flickr、Youtube、Wordpress等等。

2、下載Windows平台下的MemCached,網址為:

http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip

對應的來源碼位址為:

http ://code.jellycan.com/files/memcached-1.2.6-win32-src.zip

然後,解壓縮開來,會看到一個memcached.exe文件,進行如下圖的安裝,將以系統服務的形式安裝到機上

實例講解分散式快取軟體Memcached的Java客戶端使用

然後,選取此服務點滑鼠右鍵,啟動此服務。

在DOS介面中輸入:telnet 127.0.0.1 11211來確認服務是否啟動無誤,如果無誤,則會顯示如下

上面圖中顯示的ERROR是我隨便輸入字元後按回車顯示的,這是因為你需要安裝memcached規定的協定來進行輸入,否則就顯示如上所示錯誤。

3、 memcached的協議與資料存取

所謂協議,可以理解為其操作(資料存取)的語法規則,存取資料的常用命令和參數如下:

set:存入一條記錄

key:記錄的鍵值

flags:十進位的int,標識儲存記錄時的客戶端標誌,在記錄取出時會傳回。

exptim:資料的過期時間,0表示不過期,其他數值則表示有效的毫秒數,在過期後,客戶端將取不到這條記錄,memcached中的過期記錄會被清空或刪除。

get:表示從memcached取出key對應的值,如果沒有對應的值則回傳結束標誌END

append:表示對key所對應的值在最後再加入輸入的內容

delete:刪除key對應的值

更多協定可參考:memcached套件中所帶的protocol.txt

具體例子如:

需要注意的是:在set時如果指定的字元長度為5,而輸入的內容超過了這個長度,那麼就會報錯:CLIENT_ERROR bad data chunk

實例講解分散式快取軟體Memcached的Java客戶端使用

4、 編寫程式碼對memcached進行資料存取操作

一般而言,可以使用開源已封裝的memcached客戶端來對memcached進行操作,當然你也可以根據memcached的協定在程式碼中透過編寫socket通訊程序實現。

Memcached-Java-Client的下載頁面:

http://github.com/gwhalin/Memcached-Java-Client/downloads,然後選擇下載:

java_memcached-release_2.5.1.ipip Test目錄中可以看到有些寫好的例子,可以透過執行com.danga.MemCached.test. TestMemcached來查看資料存入和取出情況,這裡也貼出其程式碼:

package com.danga.MemCached.test;
 
import com.danga.MemCached.MemCachedClient;
 
import com.danga.MemCached.SockIOPool;
 
import org.apache.log4j.*;
 
public class TestMemcached {
 
public static void main(String[] args) {
 
// memcached should be running on port 11211 but NOT on 11212
 
BasicConfigurator.configure();
 
//缓存服务器地址,多台服务器则以逗号隔开,11211为memcached使用的端口号
 
String[] servers = { “localhost:11211″ };
 
//得到一个链接池对象并进行一些初始化工作
 
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 mcc = new MemCachedClient();
 
// turn off most memcached client logging:
 
//Logger.getLogger( MemCachedClient.class.getName() ).setLevel( com.schooner.MemCached.Logger. );
 
//以下是数据写入和取出操作例子
 
for ( int i = 0; i < 10; i++ ) {
 
boolean success = mcc.set( “” + i, “Hello!” );
 
String result = (String)mcc.get( “” + i );
 
System.out.println( String.format( “set( %d ): %s”, i, success ) );
 
System.out.println( String.format( “get( %d ): %s”, i, result ) );
 
}
 
System.out.println( “\n\t — sleeping –\n” );
 
try { Thread.sleep( 10000 ); } catch ( Exception ex ) { }
 
for ( int i = 0; i < 10; i++ ) {
 
boolean success = mcc.set( “” + i, “Hello!” );
 
String result = (String)mcc.get( “” + i );
 
System.out.println( String.format( “set( %d ): %s”, i, success ) );
 
System.out.println( String.format( “get( %d ): %s”, i, result ) );
 
}
 
}
 
}

MemCached的java客戶端實例

package com.danga.MemCached.test; 
  
import com.danga.MemCached.*; 
public class TestMemcached { 
 public static void main(String[] args) { 
  /*初始化SockIOPool,管理memcached的连接池*/ 
  String[] servers = { "192.168.105.217:11211" }; 
  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 < 10; 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)); 
  } 
 } 
}

1.解壓縮(本例中解壓縮到c:memcached)。

2、在命令列狀態下輸入: c:memcachedmemcached.exe -d install 。至此memcached已經安裝成windows服務

3、在命令列下輸入: c:memcachedmemcached.exe -d start 以啟動memcached服務。當然也可以選擇在windows服務中啟動


更多實例講解分散式快取軟體Memcached的Java客戶端使用相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn