ubuntu及windows上测试memcached服务
参考:
http://blog.csdn.net/lizhongkan/article/details/6033370
http://brainfry.in/programming/memcached-java-examples/
关于memcached服务的安装可以参见:
废话少说直接上代码:
先创建一个memcached的连接类,注意填写正确的memcached服务器的IP及端口
import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.Future; import net.spy.memcached.MemcachedClient; public class MemClient { private static MemcachedClient client = null; static { try { client = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); System.out.println("CONNECTED TO SERVER"); } catch (IOException e) { e.printStackTrace(); System.exit(-1); } } public Future<Boolean> addToMemCache(String key, int timeOut, Object val) { Future<Boolean> future = client.set(key, timeOut, val); return future; } public Object getMemcachedValue(String key) { return client.get(key); } }
再创建一个使用类,基本原理就是随机生成100对键值对存入,并检查是否全部存入,在设定的expire期限以后,读取看是否存入的数据都失效了
import java.util.ArrayList; import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; public class MemClientUser { private static ArrayList<String> keyStore = new ArrayList<String>(); private static ArrayList<Future<Boolean>> futures = new ArrayList<Future<Boolean>>(); private static int counter = 0; public static void main(String[] args) throws InterruptedException, ExecutionException { Logger.getLogger("net.spy.memcached").setLevel(Level.SEVERE); final MemClient memClient = new MemClient(); for (int i = 0; i < 100; i++) { final String key = getRandomKey(); final String value = getValueFromASource(); keyStore.add(key); Future<Boolean> future = memClient.addToMemCache(key, 10, value); try { future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } if (future != null) { futures.add(future); counter++; } else System.out.println("future is null??"); } System.out.println("VALUES TRIED: " + counter); counter = 0; for (final String key : keyStore) { String val = (String) memClient.getMemcachedValue(key); if (val != null) counter++; } System.out.println("VALUES FOUND: " + counter); // This ensures the the values are expired Thread.sleep(10000); counter = 0; for (final String key : keyStore) { String val = (String) memClient.getMemcachedValue(key); if (val != null) counter++; } System.out.println("VALUES REMAINING: " + counter); } private static String getRandomKey() { return "RANDOM_KEY" + new Random().nextInt(99999); } private static String getValueFromASource() { // This function ideally would return a value from a database, or an API // call return "RANDOM_VALUE" + new Random().nextInt(99999); } }
测试结果如下: