Xmemcached官方介绍:
XMemcached是一个新java memcached client。也许你还不知道memcached是什么?简单来说,Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个java客户端实现。
Start coding...
1. 添加pom依赖
<dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.4.6</version> </dependency>
2.简单测试用例
package com.wcg.boot; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.MemcachedClientBuilder; import net.rubyeye.xmemcached.XMemcachedClientBuilder; import net.rubyeye.xmemcached.exception.MemcachedException; import net.rubyeye.xmemcached.utils.AddrUtil; import java.io.IOException; import java.util.concurrent.TimeoutException; /** * @Author Miracle.wcg * @Date 2019-07-24 00:18 */ public class SimpleMemcache { public static void main(String[] args) { //连接服务 MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.56.101:11211")); MemcachedClient memcachedClient = null; try { memcachedClient = builder.build(); //存储数据是通过set方法,它有三个参数: //第一个是存储的key名称, //第二个是expire时间(单位秒),超过这个时间,memcached将这个数据替换出去,0表示永久存储(默认是一个月), //第三个参数就是实际存储的数据,可以是任意的java可序列化类型。 memcachedClient.set("hello", 0, "Hello,xmemcached"); //获取存储的数据 String value = memcachedClient.get("hello"); //等待3秒超时,如果3秒超时就抛出TimeutException,用户需要自己处理这个异常 //通过调用CountDownLatch.await(timeout)方法实现等待 //value = memcachedClient.get("hello", 3000); //更新缓存数据的超时时间5s //memcachedClient.touch("hello", 5000); //支持原子操作 > 1.3.6 verison //memcachedClient.getAndTouch("hello",5000); System.out.println("hello=" + value); //删除存储的数据 memcachedClient.delete("hello"); value = memcachedClient.get("hello"); System.out.println("hello=" + value); } catch (MemcachedException e) { System.err.println("MemcachedClient operation fail"); e.printStackTrace(); } catch (TimeoutException e) { System.err.println("MemcachedClient operation timeout"); e.printStackTrace(); } catch (InterruptedException e) { // ignore } catch (IOException e) { e.printStackTrace(); } try { //close memcached client memcachedClient.shutdown(); } catch (IOException e) { System.err.println("Shutdown MemcachedClient fail"); e.printStackTrace(); } } }
3.较全面测试用例
package com.wcg.boot; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.MemcachedClientBuilder; import net.rubyeye.xmemcached.XMemcachedClientBuilder; import net.rubyeye.xmemcached.transcoders.StringTranscoder; import net.rubyeye.xmemcached.utils.AddrUtil; /** * @Author Miracle.wcg * @Date 2019-07-24 00:22 */ public class FullMemcache { public static void main(String[] args) throws Exception { MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.56.101:11211")); MemcachedClient client = builder.build(); client.flushAll(); //存储hello对应的world字符串 if (!client.set("hello", 0, "world")) { System.err.println("set error"); } //添加 if (client.add("hello", 0, "dennis")) { System.err.println("Add error,key is existed"); } //替换 if (!client.replace("hello", 0, "dennis")) { System.err.println("replace error"); } client.append("hello", " good"); client.prepend("hello", "hello "); String name = client.get("hello", new StringTranscoder()); System.out.println(name); //删除数据并且告诉memcached不用返回应答,因此这个方法不会等待应答直接返回,特别适合于批量处理 client.deleteWithNoReply("hello"); } }