實(shí)例講解分布式緩存軟件Memcached的Java客戶端使用
Memcached介紹
下面就來介紹一下Memcached。
1、什么是Memcached
Memcached是一個(gè)開源的高性能,分布式的內(nèi)存對象緩存系統(tǒng),通過鍵值隊(duì)的形式來對數(shù)據(jù)進(jìn)行存取,Memcached是簡單而強(qiáng)大,它的簡單設(shè)計(jì)促進(jìn)快速部署,易于開發(fā),解決了大數(shù)據(jù)緩存面臨的許多問題。
官方網(wǎng)址是:http://memcached.org/,目前已經(jīng)有很多知名的互聯(lián)網(wǎng)應(yīng)用使用到了Memcached,比如Wikipedia、Flickr、Youtube、Wordpress等等。
2、下載Windows平臺下的MemCached,地址為:
http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
對應(yīng)的源碼地址為:
http://code.jellycan.com/files/memcached-1.2.6-win32-src.zip
然后,解壓開來,會看到一個(gè)memcached.exe文件,進(jìn)行如下圖的安裝,將以系統(tǒng)服務(wù)的形式安裝到機(jī)上
然后查看系統(tǒng)服務(wù),會發(fā)現(xiàn)已經(jīng)可以看到memcached服務(wù)了
然后,選中此服務(wù)點(diǎn)鼠標(biāo)右鍵,啟動此服務(wù)。
在DOS界面中輸入:telnet 127.0.0.1 11211來確認(rèn)服務(wù)是否啟動無誤,如果無誤,則會顯示如下窗口:
上面圖中顯示的ERROR是我隨便輸入字符后按回車顯示的,這是因?yàn)槟阈枰惭bmemcached規(guī)定的協(xié)議來進(jìn)行輸入,否則就顯示如上所示錯(cuò)誤。
3、 memcached的協(xié)議與數(shù)據(jù)存取
所謂協(xié)議,可以理解為對其操作(數(shù)據(jù)存取)的語法規(guī)則,存取數(shù)據(jù)的常用命令和參數(shù)如下:
set:存入一條記錄
key:記錄的鍵值
flags:十進(jìn)制的int,標(biāo)識存儲記錄時(shí)的客戶端標(biāo)志,在記錄取出時(shí)會返回。
exptim:數(shù)據(jù)的過期時(shí)間,0表示不過期,其他數(shù)值則表示有效的毫秒數(shù),在過期后,客戶端將取不到這條記錄,memcached中的過期記錄會被清空或刪除。
get:表示從memcached取出key對應(yīng)的值,如果沒有對應(yīng)的值則返回結(jié)束標(biāo)志END
append:表示對key所對應(yīng)的值在最后再加入輸入的內(nèi)容
delete:刪除key對應(yīng)的值
更多協(xié)議可參考:memcached包中所帶的protocol.txt
具體例子如:
需要注意的是:在set時(shí)如果指定的字符長度為5,而輸入的內(nèi)容超過了這個(gè)長度,那么就會報(bào)錯(cuò):CLIENT_ERROR bad data chunk
4、 編寫代碼對memcached進(jìn)行數(shù)據(jù)存取操作
一般而言,可以使用開源已封裝好的memcached客戶端來對memcached進(jìn)行操作,當(dāng)然你也可以根據(jù)memcached的協(xié)議在代碼中通過編寫socket通信程序?qū)崿F(xiàn)。
Memcached-Java-Client的下載頁面:
http://github.com/gwhalin/Memcached-Java-Client/downloads,然后選擇下載:
java_memcached-release_2.5.1.zip
在解壓開的Test目錄中可以看到有些寫好的例子,可以通過運(yùn)行com.danga.MemCached.test. TestMemcached來查看數(shù)據(jù)存入和取出情況,這里也貼出其代碼:
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(); //緩存服務(wù)器地址,多臺服務(wù)器則以逗號隔開,11211為memcached使用的端口號 String[] servers = { “l(fā)ocalhost:11211″ }; //得到一個(gè)鏈接池對象并進(jìn)行一些初始化工作 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. ); //以下是數(shù)據(jù)寫入和取出操作例子 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客戶端實(shí)例
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實(shí)例*/ 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、在命令行狀態(tài)下輸入: c:\memcached\memcached.exe -d install 。至此memcached已經(jīng)安裝成windows服務(wù)
3、在命令行下輸入: c:\memcached\memcached.exe -d start 以啟動memcached服務(wù)。當(dāng)然也可以選擇在windows服務(wù)中啟動
相關(guān)文章
SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)攔截器、過濾器、監(jiān)聽器過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Java虛擬機(jī)JVM優(yōu)化實(shí)戰(zhàn)的過程全記錄
有人說Java之所以能夠崛起,JVM功不可沒。Java虛擬機(jī)最初服務(wù)于讓Java語言凌駕于平臺之上,實(shí)現(xiàn)“編寫一次,到處運(yùn)行”,那么下面這篇文章主要給大家分享了個(gè)關(guān)于Java虛擬機(jī)JVM優(yōu)化實(shí)戰(zhàn)的過程全記錄,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08spring boot2結(jié)合mybatis增刪改查的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于spring boot2結(jié)合mybatis增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09解決Feign調(diào)用的GET參數(shù)傳遞的問題
這篇文章主要介紹了解決Feign調(diào)用的GET參數(shù)傳遞的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過程
Nacos 是阿里巴巴推出來的一個(gè)新開源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。本章節(jié)重點(diǎn)給大家介紹SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過程,感興趣的朋友一起看看吧2021-06-06解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題
這篇文章主要介紹了解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06