使用Spymemcached作為Memcached客戶端,因為提供的接口并不算復雜,打算直接寫一個Util類供其他模塊調用。以Set方法為例:每次調用方法都創(chuàng)建客戶端實例。這種方式每次都要調用都要創(chuàng)建、銷毀實例,在操作比較頻繁的情況下存在一定的開銷//Set方式保存數(shù)據publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{MemcachedClientmemcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));memcachedClient.set(key,exp,o);memcachedClient.shutdown();}所有方法共用一個客戶端實例。這種方法可以減少創(chuàng)建實例和鏈接,但是在請求不太頻繁的時段可能會因為沒有銷毀實例而一直占用著Memcached的鏈接。privatestaticMemcachedClientmemcachedClient=null;static{try{memcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));}catch(IOExceptionioe){log.error(ioe.getMessage(),ioe);}}//Set方式保存數(shù)據publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{memcachedClient.set(key,exp,o);}所以,請問有什么方法可以緩存Memcached的客戶端實例,在需要的時候直接到緩存中獲取或者創(chuàng)建實例,如果長期沒有調用的話,則銷毀該實例,直到下次調用。最好能做到線程安全。
Memcached實例如何緩存?
紫衣仙女
2019-04-19 16:11:29