使用Spymemcached作为Memcached客户端,因为提供的接口并不算复杂,打算直接写一个Util类供其他模块调用。以Set方法为例:每次调用方法都创建客户端实例。这种方式每次都要调用都要创建、销毁实例,在操作比较频繁的情况下存在一定的开销//Set方式保存数据publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{MemcachedClientmemcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));memcachedClient.set(key,exp,o);memcachedClient.shutdown();}所有方法共用一个客户端实例。这种方法可以减少创建实例和链接,但是在请求不太频繁的时段可能会因为没有销毁实例而一直占用着Memcached的链接。privatestaticMemcachedClientmemcachedClient=null;static{try{memcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));}catch(IOExceptionioe){log.error(ioe.getMessage(),ioe);}}//Set方式保存数据publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{memcachedClient.set(key,exp,o);}所以,请问有什么方法可以缓存Memcached的客户端实例,在需要的时候直接到缓存中获取或者创建实例,如果长期没有调用的话,则销毁该实例,直到下次调用。最好能做到线程安全。
largeQ
阿波罗的战车
相关分类