Memcached之——Spring与Memcached的集成
2015-09-05 21:42
537 查看
转载请注明出处:/article/8380882.html
这篇文章给大家介绍如何集成spring与Mamcached,以达到系统性能优化的效果
1.安装memcache
1)下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:http://code.jellycan.com/memcached/2)下载java版客户端 java_memcached-release_2.6.1.zip
3)解压缩memcached-1.2.6-win32-bin.zip到指定目录,例如:D:\memcached-1.2.6-win32 ,
在终端(即cmd命令行界面),执行'D:\memcached-1.2.6-win32\memcached.exe -d install'
安装,再执行:'D:\memcached\memcached.exe -d start'启动,这样memcache就会作为windows系统服务在每 次开机时启动memcache服务。
2. 新建配置文件(spring级别)
新建名为spring-memcache.xml的spring配置文件<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" destroy-method="shutDown"> <constructor-arg> <value>neeaMemcachedPool</value> </constructor-arg> <property name="servers"> <list> <value>${memcache.server}</value> </list> </property> <property name="initConn"> <value>${memcache.initConn}</value> </property> <property name="minConn"> <value>${memcache.minConn}</value> </property> <property name="maxConn"> <value>${memcache.maxConn}</value> </property> <property name="maintSleep"> <value>${memcache.maintSleep}</value> </property> <property name="nagle"> <value>${memcache.nagle}</value> </property> <property name="socketTO"> <value>${memcache.socketTO}</value> </property> </bean> <bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient"> <constructor-arg> <value>neeaMemcachedPool</value> </constructor-arg> </bean> </beans>
3.Web.xml文件中配置新建的文件
<!-- 配置spring的监听器,加载Spring配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/applicationContext-common.xml,classpath:/spring/spring-memcache.xml</param-value> </context-param>
4. 修改spring配置文件
修改applicationContext-common.xml配置文件。1).添加properties配置文件(memcache.properties)去配置memcache的属性。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:memcache.properties</value> <value>classpath:jdbc.properties</value> </list> </property> </bean>2).添加bean去初始化我们自己的一个spring工具类,一会进行详细解释
<bean id="springContextHolder" class="com.hxrainbow.crm.util.SpringContextHolder"/>
5. Memcache配置文件
memcache.properties文件内容如下:mcache.server=127.0.0.1\:11211 memcache.initConn=20 memcache.minConn=10 memcache.maxConn=50 memcache.maintSleep=3000 memcache.nagle=false memcache.socketTO=3000
6. 获得spring容器的工具类
/** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. * @author liuyazhuang **/ public class SpringContextHolder implements ApplicationContextAware{ private static ApplicationContext applicationContext; /** * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. */ public voidsetApplicationContext(ApplicationContext applicationContext) { SpringContextHolder.applicationContext= applicationContext; } /** * 取得存储在静态变量中的ApplicationContext. */ public staticApplicationContext getApplicationContext() { checkApplicationContext(); return applicationContext; } /** * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. */ @SuppressWarnings("unchecked") public static<T> T getBean(String name) { checkApplicationContext(); return (T) applicationContext.getBean(name); } /** * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. * 如果有多个Bean符合Class, 取出第一个. */ @SuppressWarnings("unchecked") public static<T> T getBean(Class<T> clazz) { checkApplicationContext(); Map beanMaps = applicationContext.getBeansOfType(clazz); if (beanMaps!=null&& !beanMaps.isEmpty()) { return(T) beanMaps.values().iterator().next(); }else{ return null; } } private static voidcheckApplicationContext() { if (applicationContext == null) { throw newIllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder"); } } }下面是这个方法的简单说明:
Set the ApplicationContext that this object runs in.Normally this call will be used to initialize the object.
我们在配置文件中配置了bean的初始化,然后他就可以用于获得spring容器中的东西了。
7.memcache的工具类
/** * memcache的工具类 * @author liuyazhuang */ public class MemcacheUtil { public static MemCachedClient getMemCachedClient() { return SpringContextHolder.getBean("memcachedClient"); } }
8.junit测试类
/** * 测试类 * @author liuyazhuang */ public class MemcacheUtilTest { static MemCachedClient memcachedClient; @BeforeClass public static void setUpBeforeClass() throws Exception { ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"/spring/applicationContext-common.xml","/spring/spring-memcache.xml"}); } @Test public void s() { MemCachedClient m=SpringContextHolder.getBean("memcachedClient"); m.set("name", "liuyazhuang"); System.out.println(m.get("name")); } }
相关文章推荐
- Memcached之——与Spring集成(单服务器)
- 利用nginx+lua+memcache实现灰度发布
- 转载 Memcached BinaryProtocol incr指令内存泄露的bug
- win7 64位 安装memcache扩展的方法
- Redis与Memcached的incr/decr差异对比
- java上的缓存框架-Ehcache,redis,memCache
- redis与memcache区别
- mac下安装memcached
- 缓存算法及Redis、Memcached、Guava、Ehcache中的算法
- Memcached内存管理分析
- Redis使用总结之与Memcached异同
- Memcached和Redis
- Memcached之HA架构(9)
- Memcached之代理服务magent(8)
- redis与memcache区别总结
- MySQL & NoSQL – Memcached 插件
- Memcached
- CI使用Memcached
- Centos7安装Memcached
- XMemcached实例及与spring的集成