java中一个memcached案例

下面先来一个网络上的案例,这个案例比较简单,直接在类中进行一些参数的配置,具体代码如下:

    packagecom.wzpmt;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importcom.danga.MemCached.MemCachedClient;importcom.danga.MemCached.SockIOPool;publicclassMemCachedManager{//创建全局的唯一实例protectedstaticMemCachedClientmcc=newMemCachedClient();protectedstaticMemCachedManagermemCached=newMemCachedManager();//设置与缓存服务器的连接池static{//服务器列表和其权重String[]servers={"127.0.0.1:11211"};Integer[]weights={3};//获取socke连接池的实例对象SockIOPoolpool=SockIOPool.getInstance();//设置服务器信息pool.setServers(servers);pool.setWeights(weights);//设置初始连接数、最小和最大连接数以及最大处理时间pool.setInitConn(5);pool.setMinConn(5);pool.setMaxConn(250);pool.setMaxIdle(1000*60*60*6);//设置主线程的睡眠时间pool.setMaintSleep(30);//设置TCP的参数,连接超时等pool.setNagle(false);pool.setSocketTO(3000);pool.setSocketConnectTO(0);//初始化连接池pool.initialize();//压缩设置,超过指定大小(单位为K)的数据都会被压缩mcc.setCompressEnable(true);mcc.setCompressThreshold(64*1024);}/***保护型构造方法,不允许实例化!**/protectedMemCachedManager(){}/***获取唯一实例.*@return*/publicstaticMemCachedManagergetInstance(){returnmemCached;}/***添加一个指定的值到缓存中.*@paramkey*@paramvalue*@return*/publicbooleanadd(Stringkey,Objectvalue){returnmcc.add(key,value);}publicbooleanadd(Stringkey,Objectvalue,Dateexpiry){returnmcc.add(key,value,expiry);}publicbooleanreplace(Stringkey,Objectvalue){returnmcc.replace(key,value);}publicbooleanreplace(Stringkey,Objectvalue,Dateexpiry){returnmcc.replace(key,value,expiry);}/***根据指定的关键字获取对象.*@paramkey*@return*/publicObjectget(Stringkey){returnmcc.get(key);}publicstaticvoidmain(String[]args){MemCachedManagercache=MemCachedManager.getInstance();longstartDate=System.currentTimeMillis();for(inti=0;i<10000*1000;i++){cache.add("test"+i,"中国");}longendDate=System.currentTimeMillis();longnowDate=(endDate-startDate)/1000;System.out.println(nowDate);System.out.print("getvalue:"+cache.get("test"));}}

下面来一个高度封装的memcached工具类;如下:

package com.hoodong.framework.cache;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import com.danga.MemCached.MemCachedClient;import com.danga.MemCached.SockIOPool;import com.hoodong.framework.util.FrameProperties;public class MemCached { private static Map cachePool = new ConcurrentHashMap(); /** * 取得指定memcached. * @param cacheName * @return */ public static MemCachedClient getCache(String cacheName) { if (cacheName == null && "".equals(cacheName.trim())) { return null; } if (cachePool.get(cacheName) == null || !(cachePool.containsKey(cacheName))) { String fileName=cacheName+".xml"; MemCachedClient cacheClient = initMemecached(fileName); if (cacheClient == null) { return null; } else { cachePool.put(cacheName, cacheClient); return cacheClient; } } return (MemCachedClient) cachePool.get(cacheName); } // 设置与缓存服务器的连接池 private static MemCachedClient initMemecached(String filename) { String poolName = FrameProperties.getProperties(filename, "poolName"); // 得到一个实例对象SockIOPool SockIOPool pool = SockIOPool.getInstance(poolName); //先判断pool是否已经被初始化 if(!pool.isInitialized()){ String serverList = FrameProperties.getProperties(filename, "serverList"); String weightList = FrameProperties.getProperties(filename, "weightList"); String minConn = FrameProperties.getProperties(filename, "minConn"); String initConn = FrameProperties.getProperties(filename, "initConn"); String maxConn = FrameProperties.getProperties(filename, "maxConn"); String maxIdle = FrameProperties.getProperties(filename, "maxIdle"); String maintSleep = FrameProperties.getProperties(filename, "maintSleep"); String socketTO = FrameProperties.getProperties(filename, "socketTO"); String socketConnectTO = FrameProperties.getProperties(filename, "socketConnectTO"); String aliveCheck = FrameProperties.getProperties(filename, "aliveCheck"); String nagle = FrameProperties.getProperties(filename, "nagle"); String failover = FrameProperties.getProperties(filename, "failover"); String failback = FrameProperties.getProperties(filename, "failback"); String[] serversStr = serverList.split(","); String[] servers = new String[serversStr.length]; for (int i = 0; i < servers.length; i++) { servers[i] = serversStr[i]; } String[] weightsStr = weightList.split(","); Integer[] weights = new Integer[weightsStr.length]; for (int i = 0; i < weights.length; i++) { weights[i] = new Integer(weightsStr[i]); } // set the servers and the weights // 设置Memcached Server pool.setServers(servers); pool.setWeights(weights); // set some basic pool settings // 5 initial, 5 min, and 250 max conns // and set the max idle time for a conn // to 6 hours pool.setInitConn(Integer.parseInt(initConn)); pool.setMinConn(Integer.parseInt(minConn)); pool.setMaxConn(Integer.parseInt(maxConn)); pool.setMaxIdle(Long.parseLong(maxIdle)); // set the sleep for the maint thread // it will wake up every x seconds and // maintain the pool size pool.setMaintSleep(Long.parseLong(maintSleep)); // Tcp的规则就是在发送一个包之前,本地机器会等待远程主机 // 对上一次发送的包的确认信息到来;这个方法就可以关闭套接字的缓存, // 以至这个包准备好了就发; pool.setNagle(Boolean.parseBoolean(nagle)); // 连接建立后对超时的控制 pool.setSocketTO(Integer.parseInt(socketTO)); // 连接建立时对超时的控制 pool.setSocketConnectTO(Integer.parseInt(socketConnectTO)); pool.setAliveCheck(Boolean.parseBoolean(aliveCheck)); pool.setFailover(Boolean.parseBoolean(failover)); pool.setFailback(Boolean.parseBoolean(failback)); pool.setHashingAlg(SockIOPool.NEW_COMPAT_HASH); // initialize the connection pool // 初始化一些值并与MemcachedServer段建立连接 // 初始化连接池 pool.initialize(); } // 压缩设置,超过指定大小(单位为K)的数据都会被压缩 MemCachedClient mcc = new MemCachedClient(poolName); String primitiveAsString = FrameProperties.getProperties(filename, "primitiveAsString"); String compressEnable = FrameProperties.getProperties(filename, "compressEnable"); mcc.setCompressEnable(Boolean.parseBoolean(compressEnable)); //mcc.setCompressThreshold(64 * 1024);//默认15k mcc.setPrimitiveAsString(Boolean.parseBoolean(primitiveAsString)); mcc.setSanitizeKeys(false); return mcc; } /** * 销毁缓存 */ protected void finalize() throws Throwable { cachePool.clear(); cachePool=null; super.finalize(); } public static void main(String a[]) { MemCachedClient m= MemCached.getCache("mclient0"); m.set("a", 1); m.set("b", 2); m.set("c", 3); System.out.println(m.get("a")); System.out.println(m.get("b")); System.out.println(m.get("c")); }}

快乐要懂得分享,才能加倍的快乐

java中一个memcached案例

相关文章:

你感兴趣的文章:

标签云: