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文件,進行如下圖的安裝,將以系統服務的形式安裝到機上 然後,選取此服務點滑鼠右鍵,啟動此服務。 在DOS介面中輸入:telnet 127.0.0.1 11211來確認服務是否啟動無誤,如果無誤,則會顯示如下上面圖中顯示的ERROR是我隨便輸入字元後按回車顯示的,這是因為你需要安裝memcached規定的協定來進行輸入,否則就顯示如上所示錯誤。 3、 memcached的協議與資料存取所謂協議,可以理解為其操作(資料存取)的語法規則,存取資料的常用命令和參數如下:set:存入一條記錄key:記錄的鍵值flags:十進位的int,標識儲存記錄時的客戶端標誌,在記錄取出時會傳回。 exptim:資料的過期時間,0表示不過期,其他數值則表示有效的毫秒數,在過期後,客戶端將取不到這條記錄,memcached中的過期記錄會被清空或刪除。 get:表示從memcached取出key對應的值,如果沒有對應的值則回傳結束標誌ENDappend:表示對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.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中文網!