转载:http://blog.csdn.net/u013725455/article/details/52102170

Memcached Client目前有3种: 
Memcached Client for Java 
SpyMemcached 
XMemcached

这三种Client一直存在各种争议: 
Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛; 
SpyMemcached 比 Memcached Client for Java更高效; 
XMemcached 比 SpyMemcache并发效果更好。

方式一:Memcached Client for Java 
jar包准备:java_memcached-release_2.6.6.jar

memcached.properties配置文件:配置服务器地址,连接数,超时时间等

  1. #######################Memcached配置#######################
  2. #服务器地址
  3. memcached.server1=127.0.0.1
  4. memcached.port1=11211
  5. #memcached.server=127.0.0.1:11211
  6. #初始化时对每个服务器建立的连接数目
  7. memcached.initConn=20
  8. #每个服务器建立最小的连接数
  9. memcached.minConn=10
  10. #每个服务器建立最大的连接数
  11. memcached.maxConn=50
  12. #自查线程周期进行工作,其每次休眠时间
  13. memcached.maintSleep=3000
  14. #Socket的参数,如果是true在写数据时不缓冲,立即发送出去
  15. memcached.nagle=false
  16. #Socket阻塞读取数据的超时时间
  17. memcached.socketTO=3000
  18.  
  19. ##pool.setServers(servers);
  20. ##pool.setWeights(weights);
  21. ##pool.setHashingAlg(SockIOPool.CONSISTENT_HASH);
  22. ##pool.setInitConn(5);
  23. ##pool.setMinConn(5);
  24. ##pool.setMaxConn(250);
  25. ##pool.setMaxIdle(1000 * 60 * 60 * 6);
  26. ##pool.setMaintSleep(30);
  27. ##pool.setNagle(false);
  28. ##pool.setSocketTO(3000);
  29. ##pool.setSocketConnectTO(0);

配置Bean

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  9. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  10. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  11. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
  12. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
  15. <!-- properties config -->
  16. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  17. <property name="order" value="1"/>
  18. <property name="ignoreUnresolvablePlaceholders" value="true"/>
  19. <property name="locations">
  20. <list>
  21. <!--<value>classpath:/com/springmvc/config/memcached.properties</value>-->
  22. <value>/WEB-INF/config/memcached.properties</value>
  23. </list>
  24. </property>
  25. </bean>
  26. <!-- Memcached配置 -->
  27. <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
  28. factory-method="getInstance" init-method="initialize" destroy-method="shutDown">
  29. <property name="servers">
  30. <!-- ${memcached.server} -->
  31. <list>
  32. <value>${memcached.server1}:${memcached.port1}</value>
  33. </list>
  34. </property>
  35. <property name="initConn">
  36. <value>${memcached.initConn}</value>
  37. </property>
  38. <property name="minConn">
  39. <value>${memcached.minConn}</value>
  40. </property>
  41. <property name="maxConn">
  42. <value>${memcached.maxConn}</value>
  43. </property>
  44. <property name="maintSleep">
  45. <value>${memcached.maintSleep}</value>
  46. </property>
  47. <property name="nagle">
  48. <value>${memcached.nagle}</value>
  49. </property>
  50. <property name="socketTO">
  51. <value>${memcached.socketTO}</value>
  52. </property>
  53. </bean>
  54. </beans>

将app-context-memcached.xml配置到app-context.xml中

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  9. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  10. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  11. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
  12. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
  15. <import resource="app-context-memcached.xml" /><!--memcached 缓存配置 -->
  16. <!-- <import resource="app-context-xmemcached.xml" /> -->
  17. <!-- <import resource="app-context-spymemcached.xml" /> -->
  18. <!-- @Component and @Resource -->
  19. <bean
  20. class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
  21. <!-- 对com包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
  22. <context:component-scan base-package="com.springmvc.imooc" />
  23. <!-- 定时器 -->
  24. <!-- <task:annotation-driven /> -->
  25. <!-- mvc -->
  26. <mvc:annotation-driven />
  27. <!-- Aspect -->
  28. <!-- <aop:aspectj-autoproxy /> -->
  29. </beans>

Memcached工具类:

  1. /*
  2. * 文件名:MemcachedUtils.java
  3. * 版权:Copyright 2007-2016 517na Tech. Co. Ltd. All Rights Reserved.
  4. * 描述: MemcachedUtils.java
  5. * 修改人:peiyu
  6. * 修改时间:2016年8月2日
  7. * 修改内容:新增
  8. */
  9. package com.springmvc.imooc.util;
  10.  
  11. import java.io.PrintWriter;
  12. import java.io.StringWriter;
  13. import java.util.Date;
  14.  
  15. import com.danga.MemCached.MemCachedClient;
  16.  
  17. /**
  18. * @author peiyu
  19. */
  20. public final class MemcachedUtils {
  21. /**
  22. * cachedClient.
  23. */
  24. private static MemCachedClient cachedClient;
  25. static {
  26. if (cachedClient == null) {
  27. cachedClient = new MemCachedClient("memcachedPool");
  28. }
  29. }
  30. /**
  31. * 构造函数.
  32. */
  33. private MemcachedUtils() {
  34. }
  35. /**
  36. * 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
  37. * @param key 键
  38. * @param value 值
  39. * @return boolean
  40. */
  41. public static boolean set(String key, Object value) {
  42. return setExp(key, value, null);
  43. }
  44. /**
  45. * 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
  46. * @param key 键
  47. * @param value 值
  48. * @param expire 过期时间 New Date(1000*10):十秒后过期
  49. * @return boolean
  50. */
  51. public static boolean set(String key, Object value, Date expire) {
  52. return setExp(key, value, expire);
  53. }
  54. /**
  55. * 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.
  56. * @param key 键
  57. * @param value 值
  58. * @param expire 过期时间 New Date(1000*10):十秒后过期
  59. * @return boolean
  60. */
  61. private static boolean setExp(String key, Object value, Date expire) {
  62. boolean flag = false;
  63. try {
  64. flag = cachedClient.set(key, value, expire);
  65. } catch (Exception e) {
  66. MemcachedLog.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
  67. }
  68. return flag;
  69. }
  70. /**
  71. * 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.
  72. * @param key 键
  73. * @param value 值
  74. * @return boolean
  75. */
  76. public static boolean add(String key, Object value) {
  77. return addExp(key, value, null);
  78. }
  79. /**
  80. * 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.
  81. * @param key 键
  82. * @param value 值
  83. * @param expire 过期时间 New Date(1000*10):十秒后过期
  84. * @return boolean
  85. */
  86. public static boolean add(String key, Object value, Date expire) {
  87. return addExp(key, value, expire);
  88. }
  89. /**
  90. * 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.
  91. * @param key 键
  92. * @param value 值
  93. * @param expire 过期时间 New Date(1000*10):十秒后过期
  94. * @return boolean
  95. */
  96. private static boolean addExp(String key, Object value, Date expire) {
  97. boolean flag = false;
  98. try {
  99. flag = cachedClient.add(key, value, expire);
  100. } catch (Exception e) {
  101. MemcachedLog.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
  102. }
  103. return flag;
  104. }
  105. /**
  106. * 仅当键已经存在时,replace 命令才会替换缓存中的键.
  107. * @param key 键
  108. * @param value 值
  109. * @return boolean
  110. */
  111. public static boolean replace(String key, Object value) {
  112. return replaceExp(key, value, null);
  113. }
  114. /**
  115. * 仅当键已经存在时,replace 命令才会替换缓存中的键.
  116. * @param key 键
  117. * @param value 值
  118. * @param expire 过期时间 New Date(1000*10):十秒后过期
  119. * @return boolean
  120. */
  121. public static boolean replace(String key, Object value, Date expire) {
  122. return replaceExp(key, value, expire);
  123. }
  124. /**
  125. * 仅当键已经存在时,replace 命令才会替换缓存中的键.
  126. * @param key 键
  127. * @param value 值
  128. * @param expire 过期时间 New Date(1000*10):十秒后过期
  129. * @return boolean
  130. */
  131. private static boolean replaceExp(String key, Object value, Date expire) {
  132. boolean flag = false;
  133. try {
  134. flag = cachedClient.replace(key, value, expire);
  135. } catch (Exception e) {
  136. MemcachedLog.writeLog("Memcached replace方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
  137. }
  138. return flag;
  139. }
  140. /**
  141. * get 命令用于检索与之前添加的键值对相关的值.
  142. * @param key 键
  143. * @return boolean
  144. */
  145. public static Object get(String key) {
  146. Object obj = null;
  147. try {
  148. obj = cachedClient.get(key);
  149. } catch (Exception e) {
  150. MemcachedLog.writeLog("Memcached get方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
  151. }
  152. return obj;
  153. }
  154. /**
  155. * 删除 memcached 中的任何现有值.
  156. * @param key 键
  157. * @return boolean
  158. */
  159. public static boolean delete(String key) {
  160. return deleteExp(key, null);
  161. }
  162. /**
  163. * 删除 memcached 中的任何现有值.
  164. * @param key 键
  165. * @param expire 过期时间 New Date(1000*10):十秒后过期
  166. * @return boolean
  167. */
  168. public static boolean delete(String key, Date expire) {
  169. return deleteExp(key, expire);
  170. }
  171. /**
  172. * 删除 memcached 中的任何现有值.
  173. * @param key 键
  174. * @param expire 过期时间 New Date(1000*10):十秒后过期
  175. * @return boolean
  176. */
  177. @SuppressWarnings("deprecation")
  178. private static boolean deleteExp(String key, Date expire) {
  179. boolean flag = false;
  180. try {
  181. flag = cachedClient.delete(key, expire);
  182. } catch (Exception e) {
  183. MemcachedLog.writeLog("Memcached delete方法报错,key值:" + key + "\r\n" + exceptionWrite(e));
  184. }
  185. return flag;
  186. }
  187. /**
  188. * 清理缓存中的所有键/值对.
  189. * @return boolean
  190. */
  191. public static boolean flashAll() {
  192. boolean flag = false;
  193. try {
  194. flag = cachedClient.flushAll();
  195. } catch (Exception e) {
  196. MemcachedLog.writeLog("Memcached flashAll方法报错\r\n" + exceptionWrite(e));
  197. }
  198. return flag;
  199. }
  200. /**
  201. * 返回异常栈信息,String类型.
  202. * @param e Exception
  203. * @return boolean
  204. */
  205. private static String exceptionWrite(Exception e) {
  206. StringWriter sw = new StringWriter();
  207. PrintWriter pw = new PrintWriter(sw);
  208. e.printStackTrace(pw);
  209. pw.flush();
  210. return sw.toString();
  211. }
  212. }

  

测试:

  1. System.out.println(MemcachedUtils.set("aa", "bb", new Date(1000 * 60)));
  2. Object obj = MemcachedUtils.get("aa");
  3. System.out.println("***************************");
  4. System.out.println(obj.toString());

Spring集成Memcached三种方式(一)的更多相关文章

  1. spring配置datasource三种方式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp34 spring配置datasource三种方式 1.使用org.spri ...

  2. Spring依赖注入三种方式详解

    在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...

  3. spring实例化bean三种方式

    我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...

  4. spring配置datasource三种方式及具体信息

    1.使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就 ...

  5. Spring笔记03(Spring创建对象的三种方式)

    1.创建对象的三种方式和bean的生命周期的验证: Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃 ...

  6. Spring创建对象的三种方式以及创建时间

    创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...

  7. spring配置datasource三种方式 数据库连接池

    尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.da ...

  8. 创建 Spring容器的三种方式

    一.src路径下打包完在war包的classes层级下 1.Spring容器创建的三种方式 创建Bean容器之后创建对象: 其中第三种使用的是BeanFactory对象 2.spring通过配置文件用 ...

  9. web.xml中配置spring.xml的三种方式

    我们知道spring在web.xml中可以有三种方式来配置其xml路径:org.springframework.web.servlet.DispatcherServletorg.springframe ...

随机推荐

  1. 【P1915】[usaco09 dec gold]电视游戏问题

    在百度上搜到了nzx学长的题解orz 原题: 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可是后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是因为满足的牛会产更 ...

  2. 如何将自己的windows设置为mysql服务器

    1.安装mysql 服务器 2.创建超级用户,即 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; ...

  3. java System.arraycopy 数组复制和合并

    public class Test { public static void main(String[] args) { Integer[] a = {1,2,3}; Integer[] b = {4 ...

  4. VS高效开发快捷键

    Ctrl + Tab 标签切换 Ctrl + '-'向后导航 Ctrl + Shift+'-'向前导航 Ctrl +Shift +空格  提示函数参数 Ctrl +F4 退出本标签 Ctrl+F 查找 ...

  5. polyfill之javascript函数的兼容写法——Array篇

    1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype. ...

  6. IDEA创建maven项目使用命令打包遇到的问题及解决方法

    maven项目命令打包springboot项目 首先打开tomcat命令工具(如图所示):

  7. [转载]Eclipse调试Java的10个技巧

    原文:http://www.oschina.net/question/82993_69439 我也特别喜欢的是Drop to frame. 在看这篇文章前,我推荐你看一下Eclipse 快捷键手册,我 ...

  8. nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token

    最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...

  9. EL总结

    El: 1.el表达式语言(是什么) 2.el是书写到jsp页面 3.el语法格式${ } 4.el算数运算(+,-,*,/,%), 逻辑运算(&&,||,!), 关系运算(>, ...

  10. 基于Three.js的360X180度全景图预览插件

    基于Three.js的360X180度全景图预览插件 时间 2015-08-12 10:01:10  HTML5中国 原文  http://www.html5cn.org/article-8621-1 ...