memcached client -- spymemcached使用

spymemcached是一个memcached的客户端

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

 

测试代码如下:

1.SpyMemcachedConstants

[java]  view plain  copy
  1. import java.util.concurrent.TimeUnit;  
  2.   
  3. public interface SpyMemcachedConstants {  
  4.   
  5.     public static int DEFAULT_TIMEOUT = 5;  
  6.   
  7.     public static TimeUnit DEFAULT_TIMEUNIT = TimeUnit.SECONDS;  
  8.       
  9. }  

2.SpyMemcachedServer

[java]  view plain  copy
  1. public class SpyMemcachedServer {  
  2.       
  3.     private String ip;  
  4.     private int port;  
  5.       
  6.     public void setIp(String ip) {  
  7.         this.ip = ip;  
  8.     }  
  9.       
  10.     public String getIp() {  
  11.         return ip;  
  12.     }  
  13.       
  14.     public void setPort(int port) {  
  15.         if (port < 0 || port > 65535) {  
  16.             throw new IllegalArgumentException("Port number must be between 0 to 65535");  
  17.         }  
  18.         this.port = port;  
  19.     }  
  20.       
  21.     public int getPort() {  
  22.         return port;  
  23.     }  
  24.       
  25.     public String toString() {  
  26.         return getIp() + ":" + getPort();  
  27.     }  
  28. }  

3.SpyMemcachedManager

[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.io.OutputStream;  
  3. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>.SocketAddress;  
  4. import java.util.Collection;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import java.util.Set;  
  9. import java.util.concurrent.ExecutionException;  
  10. import java.util.concurrent.Future;  
  11. import java.util.concurrent.TimeUnit;  
  12. import java.util.concurrent.TimeoutException;  
  13.   
  14. import net.spy.memcached.AddrUtil;  
  15. import net.spy.memcached.BinaryConnectionFactory;  
  16. import net.spy.memcached.CASMutation;  
  17. import net.spy.memcached.CASMutator;  
  18. import net.spy.memcached.CASValue;  
  19. import net.spy.memcached.ConnectionObserver;  
  20. import net.spy.memcached.MemcachedClient;  
  21. import net.spy.memcached.transcoders.LongTranscoder;  
  22. import net.spy.memcached.transcoders.SerializingTranscoder;  
  23. import net.spy.memcached.transcoders.Transcoder;  
  24.   
  25. public class SpyMemcachedManager {  
  26.   
  27.     private List<SpyMemcachedServer> servers;  
  28.   
  29.     private MemcachedClient memClient;  
  30.   
  31.     public SpyMemcachedManager(List<SpyMemcachedServer> servers) {  
  32.         this.servers = servers;  
  33.     }  
  34.   
  35.     public void connect() throws IOException {  
  36.         if (memClient != null) {  
  37.             return;  
  38.         }  
  39.         StringBuffer buf = new StringBuffer();  
  40.         for (int i = 0; i < servers.size(); i++) {  
  41.             SpyMemcachedServer server = servers.get(i);  
  42.             buf.append(server.toString()).append(" ");  
  43.         }  
  44.         memClient = new MemcachedClient(  
  45.                 AddrUtil.getAddresses(buf.toString()));  
  46.     }  
  47.   
  48.     public void disConnect() {  
  49.         if (memClient == null) {  
  50.             return;  
  51.         }  
  52.         memClient.shutdown();  
  53.     }  
  54.       
  55.     public void addObserver(ConnectionObserver obs) {  
  56.         memClient.addObserver(obs);  
  57.     }  
  58.       
  59.     public void removeObserver(ConnectionObserver obs) {  
  60.         memClient.removeObserver(obs);  
  61.     }  
  62.       
  63.     //---- Basic Operation Start ----//  
  64.     public boolean set(String key, Object value, int expire) {  
  65.         Future<Boolean> f = memClient.set(key, expire, value);  
  66.         return getBooleanValue(f);  
  67.     }  
  68.   
  69.     public Object get(String key) {  
  70.         return memClient.get(key);  
  71.     }  
  72.   
  73.     public Object asyncGet(String key) {  
  74.         Object obj = null;  
  75.         Future<Object> f = memClient.asyncGet(key);  
  76.         try {  
  77.             obj = f.get(SpyMemcachedConstants.DEFAULT_TIMEOUT,  
  78.                     SpyMemcachedConstants.DEFAULT_TIMEUNIT);  
  79.         } catch (Exception e) {  
  80.             f.cancel(false);  
  81.         }  
  82.         return obj;  
  83.     }  
  84.   
  85.     public boolean add(String key, Object value, int expire) {  
  86.         Future<Boolean> f = memClient.add(key, expire, value);  
  87.         return getBooleanValue(f);  
  88.     }  
  89.   
  90.     public boolean replace(String key, Object value, int expire) {  
  91.         Future<Boolean> f = memClient.replace(key, expire, value);  
  92.         return getBooleanValue(f);  
  93.     }  
  94.   
  95.     public boolean delete(String key) {  
  96.         Future<Boolean> f = memClient.delete(key);  
  97.         return getBooleanValue(f);  
  98.     }  
  99.   
  100.     public boolean flush() {  
  101.         Future<Boolean> f = memClient.flush();  
  102.         return getBooleanValue(f);  
  103.     }  
  104.   
  105.     public Map<String, Object> getMulti(Collection<String> keys) {  
  106.         return memClient.getBulk(keys);  
  107.     }  
  108.   
  109.     public Map<String, Object> getMulti(String[] keys) {  
  110.         return memClient.getBulk(keys);  
  111.     }  
  112.   
  113.     public Map<String, Object> asyncGetMulti(Collection<String> keys) {  
  114.         Map map = null;  
  115.         Future<Map<String, Object>> f = memClient.asyncGetBulk(keys);  
  116.         try {  
  117.             map = f.get(SpyMemcachedConstants.DEFAULT_TIMEOUT,  
  118.                     SpyMemcachedConstants.DEFAULT_TIMEUNIT);  
  119.         } catch (Exception e) {  
  120.             f.cancel(false);  
  121.         }  
  122.         return map;  
  123.     }  
  124.   
  125.     public Map<String, Object> asyncGetMulti(String keys[]) {  
  126.         Map map = null;  
  127.         Future<Map<String, Object>> f = memClient.asyncGetBulk(keys);  
  128.         try {  
  129.             map = f.get(SpyMemcachedConstants.DEFAULT_TIMEOUT,  
  130.                     SpyMemcachedConstants.DEFAULT_TIMEUNIT);  
  131.         } catch (Exception e) {  
  132.             f.cancel(false);  
  133.         }  
  134.         return map;  
  135.     }  
  136.     //---- Basic Operation End ----//  
  137.   
  138.           
  139.     //---- increment & decrement Start ----//  
  140.     public long increment(String key, int by, long defaultValue, int expire) {  
  141.         return memClient.incr(key, by, defaultValue, expire);  
  142.     }  
  143.       
  144.     public long increment(String key, int by) {  
  145.         return memClient.incr(key, by);  
  146.     }  
  147.       
  148.     public long decrement(String key, int by, long defaultValue, int expire) {  
  149.         return memClient.decr(key, by, defaultValue, expire);  
  150.     }  
  151.       
  152.     public long decrement(String key, int by) {  
  153.         return memClient.decr(key, by);  
  154.     }  
  155.       
  156.     public long asyncIncrement(String key, int by) {  
  157.         Future<Long> f = memClient.asyncIncr(key, by);  
  158.         return getLongValue(f);  
  159.     }  
  160.       
  161.     public long asyncDecrement(String key, int by) {  
  162.         Future<Long> f = memClient.asyncDecr(key, by);  
  163.         return getLongValue(f);  
  164.     }  
  165.     //  ---- increment & decrement End ----//  
  166.       
  167.     public void printStats() throws IOException {  
  168.         printStats(null);  
  169.     }  
  170.       
  171.     public void printStats(OutputStream stream) throws IOException {  
  172.         Map<SocketAddress, Map<String, String>> statMap =   
  173.             memClient.getStats();  
  174.         if (stream == null) {  
  175.             stream = System.out;  
  176.         }  
  177.         StringBuffer buf = new StringBuffer();  
  178.         Set<SocketAddress> addrSet = statMap.keySet();  
  179.         Iterator<SocketAddress> iter = addrSet.iterator();  
  180.         while (iter.hasNext()) {  
  181.             SocketAddress addr = iter.next();  
  182.             buf.append(addr.toString() + "/n");  
  183.             Map<String, String> stat = statMap.get(addr);  
  184.             Set<String> keys = stat.keySet();  
  185.             Iterator<String> keyIter = keys.iterator();  
  186.             while (keyIter.hasNext()) {  
  187.                 String key = keyIter.next();  
  188.                 String value = stat.get(key);  
  189.                 buf.append("  key=" + key + ";value=" + value + "/n");  
  190.             }  
  191.             buf.append("/n");  
  192.         }  
  193.         stream.write(buf.toString().getBytes());  
  194.         stream.flush();  
  195.     }  
  196.       
  197.     public Transcoder getTranscoder() {  
  198.         return memClient.getTranscoder();  
  199.     }  
  200.       
  201.     private long getLongValue(Future<Long> f) {  
  202.         try {  
  203.             Long l = f.get(SpyMemcachedConstants.DEFAULT_TIMEOUT,  
  204.                     SpyMemcachedConstants.DEFAULT_TIMEUNIT);  
  205.             return l.longValue();  
  206.         } catch (Exception e) {  
  207.             f.cancel(false);  
  208.         }  
  209.         return -1;  
  210.     }  
  211.   
  212.     private boolean getBooleanValue(Future<Boolean> f) {  
  213.         try {  
  214.             Boolean bool = f.get(SpyMemcachedConstants.DEFAULT_TIMEOUT,  
  215.                     SpyMemcachedConstants.DEFAULT_TIMEUNIT);  
  216.             return bool.booleanValue();  
  217.         } catch (Exception e) {  
  218.             f.cancel(false);  
  219.             return false;  
  220.         }  
  221.     }  
  222.   
  223. }  

4.SpyMemcachedTest

[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.net.SocketAddress;  
  3. import java.util.ArrayList;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import java.util.Set;  
  8.   
  9. import net.spy.memcached.CASValue;  
  10. import net.spy.memcached.ConnectionObserver;  
  11. import net.spy.memcached.transcoders.Transcoder;  
  12.   
  13. import edu.tju.mslab.baseframe.util.DebugPrinter;  
  14.   
  15. import junit.framework.TestCase;  
  16.   
  17. public class SpyMemcachedTest extends TestCase {  
  18.   
  19.     private SpyMemcachedManager manager;  
  20.   
  21.     protected void setUp() throws Exception {  
  22.         super.setUp();  
  23.         String[][] servs = new String[][] {  
  24.                 {"localhost""11211"},  
  25.                 //{"localhost", "11212"}  
  26.         };  
  27.         List<SpyMemcachedServer> servers = new ArrayList<SpyMemcachedServer>();  
  28.         for (int i = 0; i < servs.length; i++) {  
  29.             SpyMemcachedServer server = new SpyMemcachedServer();  
  30.             server.setIp(servs[i][0]);  
  31.             server.setPort(Integer.parseInt(servs[i][1]));  
  32.             servers.add(server);  
  33.         }  
  34.         manager = new SpyMemcachedManager(servers);  
  35.         manager.connect();  
  36.         addObserver();  
  37.     }  
  38.   
  39.     protected void tearDown() throws Exception {  
  40.         super.tearDown();  
  41.         manager.disConnect();  
  42.     }  
  43.   
  44.     public void testSet() {  
  45.         System.out.println("====TestSet====");  
  46.         for (int i = 0; i < 10; i++) {  
  47.             String key = "key" + i;  
  48.             String value = "value" + i;  
  49.             manager.set(key, value, 20);  
  50.         }  
  51.     }  
  52.       
  53.     public void testGet() {  
  54.         System.out.println("====TestGet====");  
  55.         for (int i = 0; i < 10; i++) {  
  56.             String key = "key" + i;  
  57.             Object value = manager.get(key);  
  58.             if (value != null) {  
  59.                 System.out.println("From memcached");  
  60.                 System.out.println("key=" + key + ";value=" + value);  
  61.             } else {  
  62.                 System.out.println("Not found");  
  63.                 System.out.println("key=" + key + ";value=" + value);  
  64.             }  
  65.         }  
  66.     }  
  67.   
  68.     public void testAdd() {  
  69.         System.out.println("====TestAdd====");  
  70.         boolean flag = manager.add("key1""value1-added"20); //exist  
  71.         assertEquals(false, flag);  
  72.         flag = manager.add("key100""value100"20); // don't exist  
  73.         assertEquals(true, flag);  
  74.         testGet();  
  75.     }  
  76.   
  77.     public void testReplace() {  
  78.         System.out.println("====TestReplace====");  
  79.         boolean flag = manager.replace("key2""value2-replaced"20);  
  80.         assertEquals(true, flag);  
  81.         flag = manager.replace("key1000""value1000"20);  
  82.         assertEquals(false, flag);  
  83.         testGet();  
  84.     }  
  85.   
  86.     public void testDelete() {  
  87.         System.out.println("====TestDelete====");  
  88.         boolean flag = manager.delete("key3");  
  89.         assertEquals(true, flag);  
  90.         flag = manager.delete("key1000");  
  91.         assertEquals(false, flag);  
  92.         testGet();  
  93.     }  
  94.       
  95.     public void testAsyncGet() {  
  96.         System.out.println("====TestAsyncGet====");  
  97.         Object value = manager.asyncGet("key4");  
  98.         if (value != null) {  
  99.             assertEquals("value4", (String)value);  
  100.         }  
  101.         System.out.println("value=" + value);  
  102.     }  
  103.       
  104.     public void testGetMulti() {  
  105.         System.out.println("====TestGetMulti====");  
  106.         List<String> keys = new ArrayList<String>();  
  107.         String[] strKeys = new String[5];  
  108.         for (int i = 0; i < 5; i++) {  
  109.             keys.add("key" + i);  
  110.             strKeys[i] = "key" + i;  
  111.         }  
  112.         Map<String, Object> cache = manager.getMulti(keys);  
  113.         printMap(cache);  
  114.           
  115.         cache = manager.getMulti(keys);  
  116.         printMap(cache);  
  117.     }  
  118.       
  119.     public void testAsyncGetMulti() {  
  120.         System.out.println("====TestAsyncGetMulti====");  
  121.         List<String> keys = new ArrayList<String>();  
  122.         String[] strKeys = new String[5];  
  123.         for (int i = 0; i < 5; i++) {  
  124.             keys.add("key" + i);  
  125.             strKeys[i] = "key" + i;  
  126.         }  
  127.         Map<String, Object> cache = manager.asyncGetMulti(keys);  
  128.         printMap(cache);  
  129.           
  130.         cache = manager.asyncGetMulti(keys);  
  131.         printMap(cache);  
  132.     }  
  133.       
  134.           
  135.     public void testIncrAndDecr() {  
  136.         System.out.println("====TestIncrAndDecr====");  
  137.         long l = -1;  
  138.         l = manager.increment("incr"210060);  
  139.         assertEquals(100, l);  
  140.         l = manager.increment("incr"4);  
  141.         assertEquals(104, l);  
  142.         l = manager.decrement("decr"410060);  
  143.         assertEquals(100, l);  
  144.         l = manager.decrement("decr"3);  
  145.         assertEquals(97, l);  
  146.         System.out.println("incr=" + manager.get("incr").toString());  
  147.         System.out.println("decr=" + manager.get("decr").toString());  
  148.     }  
  149.       
  150.     public void testAsyncIncrAndDecr() {  
  151.         System.out.println("====TestAsyncIncrAndDecr====");  
  152.         long l = -1;  
  153.         l = manager.asyncIncrement("incr"2);  
  154.         assertEquals(106, l);  
  155.         l = manager.asyncDecrement("decr"4);  
  156.         assertEquals(93, l);  
  157.         System.out.println("aincr=" + manager.get("incr").toString());  
  158.         System.out.println("adecr=" + manager.get("decr").toString());  
  159.     }  
  160.       
  161.     public void testPrintStat() throws IOException {  
  162.         System.out.println("====TestPrintStat====");  
  163.         manager.printStats();  
  164.     }  
  165.       
  166.     private void addObserver() {  
  167.         //System.out.println("====AddObserver====");  
  168.         ConnectionObserver obs = new ConnectionObserver() {  
  169.             public void connectionEstablished(SocketAddress sa, int reconnectCount) {  
  170.                 System.out.println("Established " + sa.toString());  
  171.             }  
  172.   
  173.             public void connectionLost(SocketAddress sa) {  
  174.                 System.out.println("Lost " + sa.toString());  
  175.             }  
  176.         };  
  177.         manager.addObserver(obs);  
  178.     }  
  179.       
  180.     public void testGetTranscoder() {  
  181.         System.out.println("====TestGetTranscoder====");  
  182.         Transcoder tran = manager.getTranscoder();  
  183.         System.out.println(tran.getClass().toString());  
  184.     }  
  185.       
  186.     private void printMap(Map map) {  
  187.         StringBuffer temp = new StringBuffer();  
  188.         Set set = map.keySet();  
  189.         Iterator iter = set.iterator();  
  190.         while(iter.hasNext()) {  
  191.             String key = (String)iter.next();  
  192.             Object value = map.get(key);  
  193.             temp.append("key=" + key + ";value=" + value + "/n");  
  194.         }  
  195.         System.out.println(temp.toString());  
  196.     }  
  197. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值