Spring集成Memcached三种方式(一)

转载: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配置文件:配置服务器地址,连接数,超时时间等

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

配置Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "><!-- properties config   -->  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  <property name="order" value="1"/>  <property name="ignoreUnresolvablePlaceholders" value="true"/>  <property name="locations">  <list> <!--<value>classpath:/com/springmvc/config/memcached.properties</value>--> <value>/WEB-INF/config/memcached.properties</value>  </list>  </property>  </bean>  <!-- Memcached配置 -->  <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"  factory-method="getInstance" init-method="initialize" destroy-method="shutDown">  <property name="servers">  <!-- ${memcached.server} --><list>  <value>${memcached.server1}:${memcached.port1}</value>  </list>  </property>  <property name="initConn">  <value>${memcached.initConn}</value>  </property>  <property name="minConn">  <value>${memcached.minConn}</value>  </property>  <property name="maxConn">  <value>${memcached.maxConn}</value>  </property>  <property name="maintSleep">  <value>${memcached.maintSleep}</value>  </property>  <property name="nagle">  <value>${memcached.nagle}</value>  </property>  <property name="socketTO">  <value>${memcached.socketTO}</value>  </property>  </bean>
</beans>

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "><import resource="app-context-memcached.xml" /><!--memcached 缓存配置 --><!-- <import resource="app-context-xmemcached.xml" /> --><!-- <import resource="app-context-spymemcached.xml" />  --><!-- @Component and @Resource --><beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /><!-- 对com包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --><context:component-scan base-package="com.springmvc.imooc" /><!-- 定时器 --><!-- <task:annotation-driven /> --><!-- mvc --><mvc:annotation-driven /><!-- Aspect --><!-- <aop:aspectj-autoproxy /> -->
</beans>

Memcached工具类:

/** 文件名:MemcachedUtils.java* 版权:Copyright 2007-2016 517na Tech. Co. Ltd. All Rights Reserved. * 描述: MemcachedUtils.java* 修改人:peiyu* 修改时间:2016年8月2日* 修改内容:新增*/
package com.springmvc.imooc.util;import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;import com.danga.MemCached.MemCachedClient;/*** @author peiyu*/
public final class MemcachedUtils {/*** cachedClient.*/private static MemCachedClient cachedClient;static {if (cachedClient == null) {cachedClient = new MemCachedClient("memcachedPool");}}/*** 构造函数.*/private MemcachedUtils() {}/*** 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.* @param key 键* @param value 值* @return boolean*/public static boolean set(String key, Object value) {return setExp(key, value, null);}/*** 向缓存添加新的键值对。如果键已经存在,则之前的值将被替换.* @param key 键* @param value 值* @param expire 过期时间 New Date(1000*10):十秒后过期* @return boolean*/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 boolean*/private static boolean setExp(String key, Object value, Date expire) {boolean flag = false;try {flag = cachedClient.set(key, value, expire);} catch (Exception e) {MemcachedLog.writeLog("Memcached set方法报错,key值:" + key + "\r\n" + exceptionWrite(e));}return flag;}/*** 仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对.* @param key 键* @param value 值* @return boolean*/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 boolean*/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 boolean*/private static boolean addExp(String key, Object value, Date expire) {boolean flag = false;try {flag = cachedClient.add(key, value, expire);} catch (Exception e) {MemcachedLog.writeLog("Memcached add方法报错,key值:" + key + "\r\n" + exceptionWrite(e));}return flag;}/*** 仅当键已经存在时,replace 命令才会替换缓存中的键.* @param key 键* @param value 值* @return boolean*/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 boolean*/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 boolean*/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 boolean*/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 boolean*/public static boolean delete(String key) {return deleteExp(key, null);}/*** 删除 memcached 中的任何现有值.* @param key 键* @param expire 过期时间 New Date(1000*10):十秒后过期* @return boolean*/public static boolean delete(String key, Date expire) {return deleteExp(key, expire);}/*** 删除 memcached 中的任何现有值.* @param key 键* @param expire 过期时间 New Date(1000*10):十秒后过期* @return boolean*/@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 boolean*/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 Exception* @return boolean*/private static String exceptionWrite(Exception e) {StringWriter sw = new StringWriter();PrintWriter pw = new PrintWriter(sw);e.printStackTrace(pw);pw.flush();return sw.toString();}
}

  

测试:

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

posted on 2016-08-03 18:16 舞飞林 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/rench/p/5733964.html

Spring集成Memcached三种方式(一)相关推荐

  1. Spring集成Memcached三种方式

    Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种Client一直存在各种争议: Memcache ...

  2. IoC、Spring 环境搭建、Spring 创建对象的三种方式、DI

    二.IoC 中文名称:控制反转 英文名称:(Inversion of Control) 3.I oC 是什么? 3.1 IoC 完成的事情原先由程序员主动通过 new 实例化对象事情,转交给 Spri ...

  3. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  4. spring配置datasource三种方式

    转自:http://blog.csdn.net/yangyz_love/article/details/8199207 1.使用org.springframework.jdbc.datasource. ...

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

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

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

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

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

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

  8. Spring 容器:三种方式解决 Resource leak: ‘applicationContext‘ is never closed 问题

    文章目录 前言 一.Spring 容器警告的产生 1.1.项目场景 二.Spring 容器未关闭后果分析 2.1.肉眼可见的警告 2.2.导致的内存泄漏 2.2.1.什么是内存泄漏? 2.2.2.如何 ...

  9. Spring注入的三种方式

    Spring实例注入的三种方式: 1.属性注入,即使用注解注入. 2.set方法注入. 3.构造方法注入. 1.属性注入 使用@Autowired.@Resource或@Inject注解注入. 1.1 ...

最新文章

  1. UE4.18预览第一版发布,共享XR引擎层降低硬件支持难度
  2. DGA GAN——GAN在安全中的应用
  3. flask运行环境搭建(nginx+gunicorn)
  4. Linux基础:利用SSH上传、下载(使用sz与rz命令)
  5. jetty eclipse_3个步骤实现Jetty和Eclipse集成
  6. 数组排序并找出元素索引--Where do I belong-FCC
  7. 360回扫样本存储系统Xstore的设计与实践
  8. 创科视觉软件说明书_【拓斯达 | GGII】20192023年中国机器视觉行业调研
  9. 滴滴这车值不值得上?前Google全球技术总监郄小虎说来来来
  10. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况
  11. Java配置文件读取写入通用类库:PropUtils 属性文件类
  12. web app 开发
  13. 4x4矩阵键盘c语言程序,C语言矩阵键盘程序
  14. ICLR 2022 | 合作博弈新范式:为可解释性等机器学习估值问题提供新方法
  15. ncverilog脚本_nc-sim (irun)和verdi ncverilog,
  16. 表格中复制后出现空格_尝过廉江这个美食后,已经连续3天出现在下午茶名单中!...
  17. 【转载】浅的不能再浅的浅谈百利金单双胡及全字尖
  18. Ai智能对话页面html,js人工智能对话框 - osc_q50is30g的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 抓包技术(浏览器APP小程序PC应用)
  20. linux系统zip压缩命令,linux zip 压缩命令

热门文章

  1. plaintextedit指定一行一行的高亮显示_LED显示器常见芯片的作用及原理,故障诊断维修...
  2. BootStrap笔记-分页
  3. Java笔记-基于Spring Boot的SOAP双向SSL认证及WS-Security
  4. C++笔记-ClassA a和ClassA a()的区别与联系
  5. Spring Boot中Thymeleaf的初步使用
  6. C/C++中如何使用typedef给函数指针取别名使其更具可读性
  7. C/C++ OpenCV之Canny边缘检测
  8. python复制代码会被发现吗,我发现了一个记忆代码片段,我想知道它在复制。复制...
  9. Django获取request header信息
  10. 计算机办公软件的使用技巧,实用的Word小技巧集锦(1)办公软件知识 -电脑资料