日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring与memcache的整合

發布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring与memcache的整合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. pom.xml文件增加:

<dependency><groupId>com.whalin</groupId><artifactId>Memcached-Java-Client</artifactId><version>3.0.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.6.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.2</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.5.6</version></dependency>

2. app-cache.xml配置

<bean id="memcachedPool" class="com.whalin.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" lazy-init="false" destroy-method="shutDown"><constructor-arg><value>memcachedPool</value></constructor-arg><!-- 可以設置多個memcached服務器 --><property name="servers"><list><value>${memcache_ip}</value></list></property><!-- 每個服務器初始連接數 --><property name="initConn"><value>10</value></property><!-- 每個服務器最小連接數 --><property name="minConn"><value>5</value></property><!-- 每個服務器最大連接數 --><property name="maxConn"><value>250</value></property><!-- 主線程睡眠時間 --><property name="maintSleep"><value>30</value></property><!-- TCP/Socket的參數,如果是true在寫數據時不緩沖,立即發送出去參數 --><property name="nagle"><value>false</value></property><!-- 連接超時/阻塞讀取數據的超時間是 --><property name="socketTO"><value>3000</value></property></bean><bean id="memcachedClient" class="com.whalin.MemCached.MemCachedClient" ><constructor-arg><value>memcachedPool</value></constructor-arg></bean>

3. 工具類MemcachedUtils

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.text.SimpleDateFormat; import java.util.Date;import org.apache.log4j.Logger;import com.whalin.MemCached.MemCachedClient;public class MemcachedUtils {private static final Logger logger = Logger.getLogger(MemcachedUtils.class); private static MemCachedClient cachedClient; static { if (cachedClient == null) cachedClient = new MemCachedClient("memcachedPool"); } private MemcachedUtils() {} /** * 向緩存添加新的鍵值對。如果鍵已經存在,則之前的值將被替換。 * * @param key * 鍵 * @param value * 值 * @return */ public static boolean set(String key, Object value) { return setExp(key, value, null); } /** * 向緩存添加新的鍵值對。如果鍵已經存在,則之前的值將被替換。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ public static boolean set(String key, Object value, Date expire) { return setExp(key, value, expire); } /** * 向緩存添加新的鍵值對。如果鍵已經存在,則之前的值將被替換。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ private static boolean setExp(String key, Object value, Date expire) { boolean flag = false; try { flag = cachedClient.set(key, value, expire); } catch (Exception e) { // 記錄Memcached日志 MemcachedLog.writeLog("Memcached set方法報錯,key值:" + key + "\r\n" + exceptionWrite(e)); } return flag; } /** * 僅當緩存中不存在鍵時,add 命令才會向緩存中添加一個鍵值對。 * * @param key * 鍵 * @param value * 值 * @return */ public static boolean add(String key, Object value) { return addExp(key, value, null); } /** * 僅當緩存中不存在鍵時,add 命令才會向緩存中添加一個鍵值對。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ public static boolean add(String key, Object value, Date expire) { return addExp(key, value, expire); } /** * 僅當緩存中不存在鍵時,add 命令才會向緩存中添加一個鍵值對。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ private static boolean addExp(String key, Object value, Date expire) { boolean flag = false; try { flag = cachedClient.add(key, value, expire); } catch (Exception e) { // 記錄Memcached日志 MemcachedLog.writeLog("Memcached add方法報錯,key值:" + key + "\r\n" + exceptionWrite(e)); } return flag; } /** * 僅當鍵已經存在時,replace 命令才會替換緩存中的鍵。 * * @param key * 鍵 * @param value * 值 * @return */ public static boolean replace(String key, Object value) { return replaceExp(key, value, null); } /** * 僅當鍵已經存在時,replace 命令才會替換緩存中的鍵。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ public static boolean replace(String key, Object value, Date expire) { return replaceExp(key, value, expire); } /** * 僅當鍵已經存在時,replace 命令才會替換緩存中的鍵。 * * @param key * 鍵 * @param value * 值 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ private static boolean replaceExp(String key, Object value, Date expire) { boolean flag = false; try { flag = cachedClient.replace(key, value, expire); } catch (Exception e) { MemcachedLog.writeLog("Memcached replace方法報錯,key值:" + key + "\r\n" + exceptionWrite(e)); } return flag; } /** * get 命令用于檢索與之前添加的鍵值對相關的值。 * * @param key * 鍵 * @return */ public static Object get(String key) { Object obj = null; try { obj = cachedClient.get(key); } catch (Exception e) { MemcachedLog.writeLog("Memcached get方法報錯,key值:" + key + "\r\n" + exceptionWrite(e)); } return obj; } /** * 刪除 memcached 中的任何現有值。 * * @param key * 鍵 * @return */ public static boolean delete(String key) { return deleteExp(key, null); } /** * 刪除 memcached 中的任何現有值。 * * @param key * 鍵 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ public static boolean delete(String key, Date expire) { return deleteExp(key, expire); } /** * 刪除 memcached 中的任何現有值。 * * @param key * 鍵 * @param expire * 過期時間 New Date(1000*10):十秒后過期 * @return */ @SuppressWarnings("deprecation")private static boolean deleteExp(String key, Date expire) { boolean flag = false; try { flag = cachedClient.delete(key, expire); } catch (Exception e) { MemcachedLog.writeLog("Memcached delete方法報錯,key值:" + key + "\r\n" + exceptionWrite(e)); } return flag; } /** * 清理緩存中的所有鍵/值對 * * @return */ public static boolean flashAll() { boolean flag = false; try { flag = cachedClient.flushAll(); } catch (Exception e) { MemcachedLog.writeLog("Memcached flashAll方法報錯\r\n" + exceptionWrite(e)); } return flag; } /** * 返回異常棧信息,String類型 * * @param e * @return */ private static String exceptionWrite(Exception e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); pw.flush(); return sw.toString(); } /** * * @ClassName: MemcachedLog * @Description: Memcached日志記錄 * @author yinjw * @date 2014-6-18 下午5:01:37 * */ private static class MemcachedLog { private final static String MEMCACHED_LOG = "D:\\memcached.log"; private final static String LINUX_MEMCACHED_LOG = "/usr/local/logs/memcached.log"; private static FileWriter fileWriter; private static BufferedWriter logWrite; // 獲取PID,可以找到對應的JVM進程 private final static RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); private final static String PID = runtime.getName(); /** * 初始化寫入流 */ static { try { String osName = System.getProperty("os.name"); if (osName.indexOf("Windows") == -1) { fileWriter = new FileWriter(MEMCACHED_LOG, true); } else { fileWriter = new FileWriter(LINUX_MEMCACHED_LOG, true); } logWrite = new BufferedWriter(fileWriter); } catch (IOException e) { logger.error("memcached 日志初始化失敗", e); closeLogStream(); } } /** * 寫入日志信息 * * @param content * 日志內容 */ public static void writeLog(String content) { try { logWrite.write("[" + PID + "] " + "- [" + new SimpleDateFormat("yyyy年-MM月-dd日 hh時:mm分:ss秒").format(new Date().getTime()) + "]\r\n" + content); logWrite.newLine(); logWrite.flush(); } catch (IOException e) { logger.error("memcached 寫入日志信息失敗", e); } } /** * 關閉流 */ private static void closeLogStream() { try { fileWriter.close(); logWrite.close(); } catch (IOException e) { logger.error("memcached 日志對象關閉失敗", e); } } } }

4. app-config.xml(idc,dev,test,prd各自環境)

memcache_ip=192.168.1.10:11211

5. 使用

public class MemCacheController {private final Logger logger = LoggerFactory.getLogger(getClass());/*** 查找memcache中的key* @param key* @return*/@RequestMapping(value = "/findSessionByKey", method = {RequestMethod.POST, RequestMethod.GET})@ResponseBodypublic String findByKey(@RequestParam String key){logger.info("MemCacheController.findByKey param:key="+key);if(StringUtils.isEmpty(key)){return "key must not be empty or null!";}return (String)MemcachedUtils.get(key);}}

?參考文獻

【1】http://www.cnblogs.com/xiaoqingxin/p/4132391.html

轉載于:https://www.cnblogs.com/davidwang456/p/5064145.html

總結

以上是生活随笔為你收集整理的spring与memcache的整合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二区在线观看视频 | 国产精品乱码一区二区三区 | 青青草视频在线免费观看 | 中文字幕在线一区二区三区 | 国产一级二级在线观看 | 蜜臀久久99精品久久久无需会员 | 青青草国产成人av片免费 | 91微拍| jizz免费视频 | 亚洲国产aⅴ成人精品无吗 日韩乱论 | 一区二区视频在线播放 | 手机在线观看av | 久久99国产精品成人 | 精品国产99久久久久久 | 国产三级全黄裸体 | 欧洲综合色| 日本japanese乳偷乱熟 | 无码人妻精品中文字幕 | 视频在线一区二区三区 | 日本中文字幕在线不卡 | 奇米影视播放器 | 不卡视频在线观看免费 | 国产精品毛片久久久 | 日本在线播放一区 | 美女啪啪无遮挡 | 久久三级网站 | 中文字幕永久 | 日韩中文字幕在线观看视频 | 久操亚洲 | 男男啪啪网站 | 九九99精品视频 | 网红av在线| 中文字幕精品在线观看 | 女人性做爰69片免费看 | 超碰这里只有精品 | 美女在线一区 | 欧美在线观看www | 鲁啊鲁在线视频 | 国产福利网 | 欧美精品播放 | 在线视频中文 | 成人h动漫精品一区 | 欧美视频亚洲视频 | 国产一区美女 | 在线香蕉视频 | 国产精品一区二区av日韩在线 | 亚洲成人自拍网 | 亚洲福利网 | 在线观看涩涩 | 欧美日韩一区二区三 | 欧洲亚洲成人 | 青青青青草| 夜夜天天干 | 色呦呦在线播放 | 久久天堂网 | 成人欧美一区 | 久草久| 1024香蕉视频 | 打美女屁股网站 | 自拍偷拍福利视频 | 91久久人澡人人添人人爽欧美 | 欧美日韩视频在线观看免费 | 小视频在线免费观看 | 日本视频精品 | 午夜精品久久 | 性奶老妇 视频 | 成熟丰满熟妇高潮xxxxx视频 | 99热超碰在线 | 伊人久久色 | 538精品一线| 一进一出视频 | 爆操巨乳| 九色视频自拍 | 久久深夜 | 成人午夜视频一区二区播放 | wwwsss在线观看| 91娇羞白丝 | 亚欧洲精品视频在线观看 | 久久只有这里有精品 | 97爱爱爱| 免费麻豆国产一区二区三区四区 | 亚洲AV成人无码网站天堂久久 | 中日精品一色哟哟 | 狠狠一区二区 | 欧美日韩国产大片 | 污免费视频 | 91麻豆成人| 伊人色网站| 视色网站 | 美女131爽爽爽 | 欧美色成人 | 精品无码黑人又粗又大又长 | 色爽视频 | 国内爆初菊对白视频 | 国产精品播放 | 欧美日韩免费视频 | 日日夜夜干 | 无码成人一区二区 | 久久精品久久久精品美女 |