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服務了
然後,選中此服務點滑鼠右鍵,啟動此服務。
在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
4、 編寫代碼對memcached進行資料存取操作
一般而言,可以使用開源已封裝好的memcached用戶端來對memcached進行操作,當然你也可以根據memcached的協議在代碼中通過編寫socket通訊程式實現。
Memcached-Java-Client的下載頁面:
http://github.com/gwhalin/Memcached-Java-Client/downloads,然後選擇下載:
java_memcached-release_2.5.1.zip
在解壓開的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 11212BasicConfigurator.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:\memcached\memcached.exe -d install 。至此memcached已經安裝成windows服務
3、在命令列下輸入: c:\memcached\memcached.exe -d start 以啟動memcached服務。當然也可以選擇在windows服務中啟動