Use memcached client-spymemcached

Source: Internet
Author: User

Spymemcached is a memcached client.

Http://code.google.com/p/spymemcached/

 

The test code is as follows:

1. spymemcachedconstants

Import Java. util. concurrent. timeunit; </P> <p> Public interface spymemcachedconstants {</P> <p> Public static int default_timeout = 5; </P> <p> Public static timeunit default_timeunit = timeunit. seconds; </P> <p>}

2. spymemcachedserver

Public class spymemcachedserver {</P> <p> private string IP; <br/> private int port; </P> <p> Public void setip (string IP) {<br/> This. IP = IP; <br/>}</P> <p> Public String getip () {<br/> return IP; <br/>}</P> <p> Public void setport (INT port) {<br/> If (Port <0 | Port> 65535) {<br/> throw new illegalargumentexception ("port number must be between 0 to 65535"); <br/>}< br/> This. port = port; <br/>}</P> <p> Public int getport () {<br/> return port; <br/>}</P> <p> Public String tostring () {<br/> return getip () + ":" + getport (); <br/>}< br/>}

3. spymemcachedmanager

Import Java. io. ioexception; <br/> Import Java. io. outputstream; <br/> Import java.net. socketaddress; <br/> Import Java. util. collection; <br/> Import Java. util. iterator; <br/> Import Java. util. list; <br/> Import Java. util. map; <br/> Import Java. util. set; <br/> Import Java. util. concurrent. executionexception; <br/> Import Java. util. concurrent. future; <br/> Import Java. util. concurrent. timeunit; <br/> Import Java. u Til. concurrent. timeoutexception; </P> <p> Import net. spy. memcached. addrutil; <br/> Import net. spy. memcached. binaryconnectionfactory; <br/> Import net. spy. memcached. casmutation; <br/> Import net. spy. memcached. casmutator; <br/> Import net. spy. memcached. casvalue; <br/> Import net. spy. memcached. connectionobserver; <br/> Import net. spy. memcached. memcachedclient; <br/> Import net. spy. memcached. transcoders. longtra Nscoder; <br/> Import net. spy. memcached. transcoders. serializingtranscoder; <br/> Import net. spy. memcached. transcoders. transcoder; </P> <p> public class spymemcachedmanager {</P> <p> private list <spymemcachedserver> servers; </P> <p> private memcachedclient memclient; </P> <p> Public spymemcachedmanager (list <spymemcachedserver> servers) {<br/> This. servers = servers; <br/>}</P> <p> Public void connect () throws Io Exception {<br/> If (memclient! = NULL) {<br/> return; <br/>}< br/> stringbuffer Buf = new stringbuffer (); <br/> for (INT I = 0; I <servers. size (); I ++) {<br/> spymemcachedserver = servers. get (I); <br/> Buf. append (server. tostring ()). append (""); <br/>}< br/> memclient = new memcachedclient (<br/> addrutil. getaddresses (BUF. tostring (); <br/>}</P> <p> Public void disconnect () {<br/> If (memclient = NULL) {<br/> return; <br/>}< br/> memclient. shutdown (); <br/>}</P> <p> Public void addobserver (connectionobserver obs) {<br/> memclient. addobserver (OBS); <br/>}</P> <p> Public void removeobserver (connectionobserver obs) {<br/> memclient. removeobserver (OBS); <br/>}</P> <p> // ---- basic operation start ---- // <br/> Public Boolean set (string key, object value, int expire) {<br/> future <Boolean> F = memclient. set (key, expire, value); <br/> return getbooleanvalue (f); <br/>}</P> <p> Public object get (string key) {<br/> return memclient. get (key); <br/>}</P> <p> Public object asyncget (string key) {<br/> Object OBJ = NULL; <br/> future <Object> F = memclient. asyncget (key); <br/> try {<br/> OBJ = f. get (spymemcachedconstants. default_timeout, <br/> spymemcachedconstants. default_timeunit); <br/>} catch (exception e) {<br/> F. cancel (false); <br/>}< br/> return OBJ; <br/>}</P> <p> Public Boolean add (string key, object value, int expire) {<br/> future <Boolean> F = memclient. add (Key, expire, value); <br/> return getbooleanvalue (f); <br/>}</P> <p> Public Boolean Replace (string key, object value, int expire) {<br/> future <Boolean> F = memclient. replace (key, expire, value); <br/> return getbooleanvalue (f); <br/>}</P> <p> Public Boolean Delete (string key) {<br/> future <Boolean> F = memclient. delete (key); <br/> return getbooleanvalue (f); <br/>}</P> <p> Public Boolean flush () {<br/> future <Boolean> F = memclient. flush (); <br/> return getbooleanvalue (f); <br/>}</P> <p> Public Map <string, object> getmulti (collection <string> keys) {<br/> return memclient. GETBULK (KEYS); <br/>}</P> <p> Public Map <string, Object> getmulti (string [] keys) {<br/> return memclient. GETBULK (KEYS); <br/>}</P> <p> Public Map <string, Object> asyncgetmulti (collection <string> keys) {<br/> map = NULL; <br/> future <Map <string, Object> F = memclient. asyncgetbulk (KEYS); <br/> try {<br/> map = f. get (spymemcachedconstants. default_timeout, <br/> spymemcachedconstants. default_timeunit); <br/>} catch (exception e) {<br/> F. cancel (false); <br/>}< br/> return map; <br/>}</P> <p> Public Map <string, object> asyncgetmulti (string keys []) {<br/> map = NULL; <br/> future <Map <string, Object> F = memclient. asyncgetbulk (KEYS); <br/> try {<br/> map = f. get (spymemcachedconstants. default_timeout, <br/> spymemcachedconstants. default_timeunit); <br/>} catch (exception e) {<br/> F. cancel (false); <br/>}< br/> return map; <br/>}< br/> // ---- basic operation end ---- // </P> <p> // ---- increment & decrement start ---- // <br/> Public long increment (string key, int by, long defaultvalue, int expire) {<br/> return memclient. incr (Key, by, defaultvalue, expire); <br/>}</P> <p> Public long increment (string key, int) {<br/> return memclient. incr (Key, by); <br/>}</P> <p> Public long decrement (string key, int by, long defaultvalue, int expire) {<br/> return memclient. decr (Key, by, defaultvalue, expire); <br/>}</P> <p> Public long decrement (string key, int) {<br/> return memclient. decr (Key, by); <br/>}</P> <p> Public long asyncincrement (string key, int) {<br/> future <long> F = memclient. asyncincr (Key, by); <br/> return getlongvalue (f); <br/>}</P> <p> Public long asyncdecrement (string key, int) {<br/> future <long> F = memclient. asyncdecr (Key, by); <br/> return getlongvalue (f ); <br/>}< br/> // ---- increment & decrement end ---- // </P> <p> Public void printstats () throws ioexception {<br/> printstats (null); <br/>}</P> <p> Public void printstats (outputstream Stream) throws ioexception {<br/> Map <socketaddress, Map <string, string> statmap = <br/> memclient. getstats (); <br/> If (Stream = NULL) {<br/> stream = system. out; <br/>}< br/> stringbuffer Buf = new stringbuffer (); <br/> set <socketaddress> addrset = statmap. keyset (); <br/> iterator <socketaddress> iter = addrset. iterator (); <br/> while (ITER. hasnext () {<br/> socketaddress ADDR = ITER. next (); <br/> Buf. append (ADDR. tostring () + "/N"); <br/> Map <string, string> stat = statmap. get (ADDR); <br/> set <string> keys = stat. keyset (); <br/> iterator <string> keyiter = keys. iterator (); <br/> while (keyiter. hasnext () {<br/> string key = keyiter. next (); <br/> string value = stat. get (key); <br/> Buf. append ("Key =" + key + "; value =" + value + "/N"); <br/>}< br/> Buf. append ("/N"); <br/>}< br/> stream. write (BUF. tostring (). getbytes (); <br/> stream. flush (); <br/>}</P> <p> Public Transcoder gettranscoder () {<br/> return memclient. gettranscoder (); <br/>}</P> <p> private long getlongvalue (Future <long> F) {<br/> try {<br/> long l = f. get (spymemcachedconstants. default_timeout, <br/> spymemcachedconstants. default_timeunit); <br/> return L. longvalue (); <br/>}catch (exception e) {<br/> F. cancel (false); <br/>}< br/> return-1; <br/>}</P> <p> private Boolean getbooleanvalue (Future <Boolean> F) {<br/> try {<br/> Boolean bool = f. get (spymemcachedconstants. default_timeout, <br/> spymemcachedconstants. default_timeunit); <br/> return bool. booleanvalue (); <br/>}catch (exception e) {<br/> F. cancel (false); <br/> return false; <br/>}</P> <p>}

4. spymemcachedtest

Import Java. io. ioexception; <br/> Import java.net. socketaddress; <br/> Import Java. util. arraylist; <br/> Import Java. util. iterator; <br/> Import Java. util. list; <br/> Import Java. util. map; <br/> Import Java. util. set; </P> <p> Import net. spy. memcached. casvalue; <br/> Import net. spy. memcached. connectionobserver; <br/> Import net. spy. memcached. transcoders. transcoder; </P> <p> Import Edu. tju. mslab. baseframe. util. deb Ugprinter; </P> <p> Import JUnit. framework. testcase; </P> <p> public class spymemcachedtest extends testcase {</P> <p> private spymemcachedmanager manager; </P> <p> protected void setup () throws exception {<br/> super. setup (); <br/> string [] [] servs = new string [] [] {<br/> {"localhost", "11211 "}, <br/> // {"localhost", "11212"} <br/>}; <br/> List <spymemcachedserver> servers = new arraylist <spymemcachedserver> (); <Br/> for (INT I = 0; I <Servs. length; I ++) {<br/> spymemcachedserver = new spymemcachedserver (); <br/> server. setip (servs [I] [0]); <br/> server. setport (integer. parseint (servs [I] [1]); <br/> servers. add (server); <br/>}< br/> Manager = new spymemcachedmanager (servers); <br/> manager. connect (); <br/> addobserver (); <br/>}</P> <p> protected void teardown () throws exception {<br/> super. teardown (); <br /> Manager. disconnect (); <br/>}</P> <p> Public void testset () {<br/> system. out. println ("= testset ="); <br/> for (INT I = 0; I <10; I ++) {<br/> string key = "key" + I; <br/> string value = "value" + I; <br/> manager. set (key, value, 20); <br/>}</P> <p> Public void testget () {<br/> system. out. println ("= testget ="); <br/> for (INT I = 0; I <10; I ++) {<br/> string key = "key" + I; <br/> ob Ject value = manager. Get (key); <br/> If (value! = NULL) {<br/> system. out. println ("from memcached"); <br/> system. out. println ("Key =" + key + "; value =" + value); <br/>}else {<br/> system. out. println ("not found"); <br/> system. out. println ("Key =" + key + "; value =" + value ); <br/>}</P> <p> Public void testadd () {<br/> system. out. println ("=== testadd ==="); <br/> Boolean flag = manager. add ("key1", "value1-added", 20); // exist <br/> Sertequals (false, flag); <br/> flag = manager. add ("key100", "value100", 20); // don't exist <br/> assertequals (true, flag); <br/> testget (); <br/>}</P> <p> Public void testreplace () {<br/> system. out. println ("==== testreplace ==="); <br/> Boolean flag = manager. replace ("key2", "value2-replaced", 20); <br/> assertequals (true, flag); <br/> flag = manager. replace ("key1000", "value1000", 20); <br/> assertequals (False, flag); <br/> testget (); <br/>}</P> <p> Public void testdelete () {<br/> system. out. println ("=== testdelete ==="); <br/> Boolean flag = manager. delete ("key3"); <br/> assertequals (true, flag); <br/> flag = manager. delete ("key1000"); <br/> assertequals (false, flag); <br/> testget (); <br/>}</P> <p> Public void testasyncget () {<br/> system. out. println ("=== testasyncget ==="); <br/> object value = manager. A Syncget ("key4"); <br/> If (value! = NULL) {<br/> assertequals ("value4", (string) value); <br/>}< br/> system. out. println ("value =" + value); <br/>}</P> <p> Public void testgetmulti () {<br/> system. out. println ("==== testgetmulti ="); <br/> List <string> keys = new arraylist <string> (); <br/> string [] strkeys = new string [5]; <br/> for (INT I = 0; I <5; I ++) {<br/> keys. add ("key" + I); <br/> strkeys [I] = "key" + I; <br/>}< br/> Map <string, object> cache = manager. getmulti (KEYS); <br/> printmap (cache); </P> <p> cache = manager. getmulti (KEYS); <br/> printmap (cache); <br/>}</P> <p> Public void testasyncgetmulti () {<br/> system. out. println ("=== testasyncgetmulti ="); <br/> List <string> keys = new arraylist <string> (); <br/> string [] strkeys = new string [5]; <br/> for (INT I = 0; I <5; I ++) {<br/> keys. add ("key" + I); <br/> strkeys [I] = "key" + I; <br/>}< br/> Map <string, object> cache = manager. asyncgetmulti (KEYS); <br/> printmap (cache); </P> <p> cache = manager. asyncgetmulti (KEYS); <br/> printmap (cache); <br/>}</P> <p> Public void testincranddecr () {<br/> system. out. println ("==== testincranddecr ==="); <br/> long l =-1; <br/> L = manager. increment ("incr", 2,100, 60); <br/> assertequals (100, L); <br/> L = manager. increment ("incr", 4); <br/> assertequals (104, L); <br/> L = manager. decrement ("decr", 4,100, 60); <br/> assertequals (100, L); <br/> L = manager. decrement ("decr", 3); <br/> assertequals (97, L); <br/> system. out. println ("incr =" + manager. get ("incr "). tostring (); <br/> system. out. println ("decr =" + manager. get ("decr "). tostring (); <br/>}</P> <p> Public void testasyncincranddecr () {<br/> system. out. println ("=== testasyncincranddecr ==="); <br/> long l =-1; <br/> L = manager. asyncincrement ("incr", 2); <br/> assertequals (106, L); <br/> L = manager. asyncdecrement ("decr", 4); <br/> assertequals (93, L); <br/> system. out. println ("aincr =" + manager. get ("incr "). tostring (); <br/> system. out. println ("adecr =" + manager. get ("decr "). tostring (); <br/>}</P> <p> Public void testprintstat () throws ioexception {<br/> system. out. println ("==== testprintstat ==="); <br/> manager. printstats (); <br/>}</P> <p> private void addobserver () {<br/> // system. out. println ("=== addobserver ==="); <br/> connectionobserver obs = new connectionobserver () {<br/> Public void connectionestablished (socketaddress SA, int reconnectcount) {<br/> system. out. println ("established" + SA. tostring (); <br/>}</P> <p> Public void connectionlost (socketaddress SA) {<br/> system. out. println ("lost" + SA. tostring (); <br/>}< br/>}; <br/> manager. addobserver (OBS); <br/>}</P> <p> Public void testgettranscoder () {<br/> system. out. println ("=== testgettranscoder ==="); <br/> Transcoder TRAN = manager. gettranscoder (); <br/> system. out. println (Tran. getclass (). tostring (); <br/>}</P> <p> private void printmap (MAP map) {<br/> stringbuffer temp = new stringbuffer (); <br/> set = map. keyset (); <br/> iterator iter = set. iterator (); <br/> while (ITER. hasnext () {<br/> string key = (string) ITER. next (); <br/> object value = map. get (key); <br/> temp. append ("Key =" + key + "; value =" + value + "/N"); <br/>}< br/> system. out. println (temp. tostring (); <br/>}< br/>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.