Memcached使用实例

1package com.memcached.util; 2 3import java.io.BufferedWriter; 4import java.io.FileWriter; 5import java.io.IOException; 6import java.io.PrintWriter; 7import java.io.StringWriter; 8import java.lang.management.ManagementFactory; 9import java.text.SimpleDateFormat; 10import java.util.Date; 11 12import com.danga.MemCached.MemCachedClient; 13import com.danga.MemCached.SockIOPool; 14 15/** 16 * Memcached工具类 17 * 18 * @author gulf 19*/ 20public class MemcachedUtils { 21 22 private static MemCachedClient memCachedClient; 23 static { 24 /************************************配置Memcached**************************************/ 25 SockIOPool sockIOPool = SockIOPool.getInstance(); 26 27 sockIOPool.setServers(new String[]{"127.0.0.1:11211"});//设置memcached服务器地址 28 sockIOPool.setWeights(new Integer[]{3}); //设置每个MemCached服务器权重 29 sockIOPool.setFailover(true); //当一个memcached服务器失效的时候是否去连接另一个memcached服务器. 30 sockIOPool.setInitConn(10); //初始化时对每个服务器建立的连接数目 31 sockIOPool.setMinConn(10); //每个服务器建立最小的连接数 32 sockIOPool.setMaxConn(100); //每个服务器建立最大的连接数 33 sockIOPool.setMaintSleep(30); //自查线程周期进行工作,其每次休眠时间 34 sockIOPool.setNagle(false); //Socket的参数,如果是true在写数据时不缓冲,立即发送出去。Tcp的规则是在发送一个包之前,包的发送方会等待远程接收方确认已收到上一次发送过来的包;这个方法就可以关闭套接字的缓存——包准备立即发出。 35 sockIOPool.setSocketTO(3000); //Socket阻塞读取数据的超时时间 36 sockIOPool.setAliveCheck(true); //设置是否检查memcached服务器是否失效 37 sockIOPool.setMaxIdle(1000*30*30); // 设置最大处理时间 38 sockIOPool.setSocketConnectTO(0); //连接建立时对超时的控制 39 40 sockIOPool.initialize(); // 初始化连接池 41 if (memCachedClient == null){ 42 memCachedClient = new MemCachedClient(); 43 memCachedClient.setPrimitiveAsString(true); //是否将基本类型转换为String方法 44 } 45 } 46 47 private MemcachedUtils() { 48 } 49 50 /** 51 * 向缓存添加键值对。注意:如果键已经存在,则之前的键对应的值将被替换。 52 * 53 * @author javaagent 54 */ 55 public static boolean set(String key, Object value) { 56 try { 57 return memCachedClient.set(key, value); 58 } catch (Exception e) { 59 MemcachedLogUtils.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 60 return false; 61 } 62 } 63 64 /** 65 * 向缓存添加键值对并为该键值对设定逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:如果键已经存在,则之前的键对应的值将被替换。 66 * 67 * @author javaagent 68 */ 69 public static boolean set(String key, Object value, Date expire) { 70 try { 71 return memCachedClient.set(key, value, expire); 72 } catch (Exception e) { 73 MemcachedLogUtils.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 74 return false; 75 } 76 } 77 78 /** 79 * 向缓存添加键值对。注意:仅当缓存中不存在键时,才会添加成功。 80 * 81 * @author javaagent 82 */ 83 public static boolean add(String key, Object value) { 84 try { 85 if (get(key) != null) { 86 MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(new Exception("Memcached内存缓存中已经存在该键值对"))); 87 return false; 88 }else{ 89 return memCachedClient.add(key, value); 90 } 91 } catch (Exception e) { 92 MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 93 return false; 94 } 95 } 96 97 /** 98 * 向缓存添加键值对并为该键值对设定逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:仅当缓存中不存在键时,才会添加成功。 99 * 100 * @author javaagent 101 */ 102 public static boolean add(String key, Object value, Date expire) { 103 try { 104 if (get(key) != null) { 105 MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(new Exception("Memcached内存缓存中已经存在该键值对"))); 106 return false; 107 }else{ 108 return memCachedClient.add(key, value, expire); 109 } 110 } catch (Exception e) { 111 MemcachedLogUtils.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 112 return false; 113 } 114 } 115 116 /** 117 * 根据键来替换Memcached内存缓存中已有的对应的值。注意:只有该键存在时,才会替换键相应的值。 118 * 119 * @author javaagent 120 */ 121 public static boolean replace(String key, Object newValue) { 122 try { 123 return memCachedClient.replace(key, newValue); 124 } catch (Exception e) { 125 MemcachedLogUtils.writeLog("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 126 return false; 127 } 128 } 129 130 /** 131 * 根据键来替换Memcached内存缓存中已有的对应的值并设置逾期时间(即多长时间后该键值对从Memcached内存缓存中删除,比如: new Date(1000*10),则表示十秒之后从Memcached内存缓存中删除)。注意:只有该键存在时,才会替换键相应的值。 132 * 133 * @author javaagent 134 */ 135 public static boolean replace(String key, Object newValue, Date expireDate) { 136 try { 137 return memCachedClient.replace(key, newValue, expireDate); 138 } catch (Exception e) { 139 MemcachedLogUtils.writeLog("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 140 return false; 141 } 142 } 143 144 /** 145 * 根据键获取Memcached内存缓存管理系统中相应的值 146 * 147 * @author javaagent 148 */ 149 public static Object get(String key) { 150 try { 151 return memCachedClient.get(key); 152 } catch (Exception e) { 153 MemcachedLogUtils.writeLog("Memcached get方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 154 return null; 155 } 156 } 157 158 /** 159 * 根据键删除memcached中的键/值对 160 * 161 * @author javaagent 162 */ 163 public static boolean delete(String key) { 164 try { 165 return memCachedClient.delete(key); 166 } catch (Exception e) { 167 MemcachedLogUtils.writeLog("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 168 return false; 169 } 170 } 171 172 /** 173 * 根据键和逾期时间(例如:new Date(1000*10):十秒后过期)删除 memcached中的键/值对 174 * 175 * @author javaagent 176 */ 177 public static boolean delete(String key, Date expireDate) { 178 try { 179 return memCachedClient.delete(key, expireDate); 180 } catch (Exception e) { 181 MemcachedLogUtils.writeLog("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e)); 182 return false; 183 } 184 } 185 186 /** 187 * 清理缓存中的所有键/值对 188 * 189 * @author javaagent 190 */ 191 public static boolean flashAll() { 192 try { 193 return memCachedClient.flushAll(); 194 } catch (Exception e) { 195 MemcachedLogUtils.writeLog("Memcached flashAll方法报错\r\n" + exceptionWrite(e)); 196 return false; 197 } 198 } 199 200 /** 201 * 返回String类型的异常栈信息 202 * 203 * @author javaagent 204 */ 205 private static String exceptionWrite(Exception exception) { 206 StringWriter stringWriter = new StringWriter(); 207 PrintWriter printWriter = new PrintWriter(stringWriter); 208 exception.printStackTrace(printWriter); 209 printWriter.flush(); 210 return stringWriter.toString(); 211 } 212 213 /** 214 * Memcached日志记录工具 215 * 216 * @author javaagent 217 */ 218 private static class MemcachedLogUtils { 219 220 private static FileWriter fileWriter; 221 private static BufferedWriter logWrite; 222 private final static String PID = ManagementFactory.getRuntimeMXBean().getName();// 通过找到对应的JVM进程获取PID 223 224 /** 225 * 初始化Memcached日志写入流 226 * 227 * @author javaagent 228 */ 229 static { 230 try { 231 String osName = System.getProperty("os.name"); 232 if (osName.contains("Windows")) { 233 fileWriter = new FileWriter("D:\\memcached.log", true); 234 } else { 235 fileWriter = new FileWriter("/usr/local/logs/memcached.log", true); 236 } 237 logWrite = new BufferedWriter(fileWriter); 238 } catch (IOException iOException) { 239 iOException.printStackTrace(); 240 try { 241 if (fileWriter != null) { 242 fileWriter.close(); 243 } 244 if (logWrite != null) { 245 logWrite.close(); 246 } 247 } catch (Exception exception) { 248 exception.printStackTrace(); 249 } 250 } 251 } 252 253 /** 254 * 写入日志信息 255 * 256 * @author javaagent 257 */ 258 public static void writeLog(String logContent) { 259 try { 260 logWrite.write("[" + PID + "] " + "- [" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "]\r\n" + logContent); 261 logWrite.newLine(); 262 logWrite.flush(); 263 } catch (IOException e) { 264 e.printStackTrace(); 265 } 266 } 267 } 268}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

java代码073

code073.javapackagepack02;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.UUID;importjavax.servlet.ServletException;importjavax.servlet.annotation.Multip