使用Spymemcached作為Memcached客戶端,因?yàn)樘峁┑慕涌诓⒉凰銖?fù)雜,打算直接寫(xiě)一個(gè)Util類(lèi)供其他模塊調(diào)用。以Set方法為例:每次調(diào)用方法都創(chuàng)建客戶端實(shí)例。這種方式每次都要調(diào)用都要?jiǎng)?chuàng)建、銷(xiāo)毀實(shí)例,在操作比較頻繁的情況下存在一定的開(kāi)銷(xiāo)//Set方式保存數(shù)據(jù)publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{MemcachedClientmemcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));memcachedClient.set(key,exp,o);memcachedClient.shutdown();}所有方法共用一個(gè)客戶端實(shí)例。這種方法可以減少創(chuàng)建實(shí)例和鏈接,但是在請(qǐng)求不太頻繁的時(shí)段可能會(huì)因?yàn)闆](méi)有銷(xiāo)毀實(shí)例而一直占用著Memcached的鏈接。privatestaticMemcachedClientmemcachedClient=null;static{try{memcachedClient=newMemcachedClient(newBinaryConnectionFactory(),AddrUtil.getAddresses(host+":"+port));}catch(IOExceptionioe){log.error(ioe.getMessage(),ioe);}}//Set方式保存數(shù)據(jù)publicvoidset(Stringkey,intexp,Objecto)throwsIOException,InterruptedException,ExecutionException{memcachedClient.set(key,exp,o);}所以,請(qǐng)問(wèn)有什么方法可以緩存Memcached的客戶端實(shí)例,在需要的時(shí)候直接到緩存中獲取或者創(chuàng)建實(shí)例,如果長(zhǎng)期沒(méi)有調(diào)用的話,則銷(xiāo)毀該實(shí)例,直到下次調(diào)用。最好能做到線程安全。
Memcached實(shí)例如何緩存?
動(dòng)漫人物
2019-04-07 11:19:27