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/>