spring与memcache的集成
2017-01-17 14:03
381 查看
转载自:http://www.cnblogs.com/xishuixixia/archive/2011/11/03/2234485.html
夕水溪下 博客
1.安装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. **/ public class SpringContextHolder implementsApplicationContextAware{ 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"); } } }
首先说一下ApplicationContextAware这个接口,这个接口中有一个方法:
void setApplicationContext(ApplicationContext applicationContext)
下面是这个方法的简单说明:
Set the ApplicationContext that this object runs in.Normally this call will be used to initialize the object.
我们在配置文件中配置了bean的初始化,然后他就可以用于获得spring容器中的东西了。
7.memcache的工具类
public class MemcacheUtil { public static MemCachedClient getMemCachedClient() { return SpringContextHolder.getBean("memcachedClient"); } }
8.junit测试类
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", "yunhui"); System.out.println(m.get("name")); } }
9. Java对memcache调用的实现
Java中对memcache的实现有3种比较出名,分别是memcached client for java(也就是我们上面使用的)、spymemcached、以及xmemcache。下面是我从csdn看到的一个对比他们性能的文章:
较早之前的一些比较主要是集中在java memcached client和spymemcached之间,普遍的结论是:spymemcached校之java memcached client有更高的性能,但却没有java memcached client稳定。随着java memcached client新版本的发布,一些新的对比测试标明java memcached client在性能上并不比spymemcached逊色多少,再加上java memcached client被广泛使用,表现稳定,因此在一般情况下java
memcached client是首选的memcache client.
除上述两个产品之外,还有一个由中国人编写的名为XMemcached的后起之秀,据该产品官网上给出的性能对比,这个产品的性能表现是非常优秀的。但在使用的普遍性和项目未来的可维护上,在选型上需要慎重考虑。
以下是相关产品官网发布的性能测试对比,结果似乎不是那么一致,甚至有些相左,只当参考吧,毕竟基于各自的立场和不同的对比环境,有出入是正常的。
java memcached client官方发布的性能对比:https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
XMemcached官方发布的性能对比:http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
综合考虑,java memcached client是一个稳妥的选择。
相关文章推荐
- memcache与spring集成 实例
- Memcache Spring集成
- spring缓存集成memcache
- 搭建JAVAEE Memcache 集群环境之与Spring集成(四)
- Spring集成Memcache实例
- Memcache与Spring集成实例
- memcache与spring集成 实例
- spring集成memcache 示例二
- spring缓存集成memcache
- Memcache集成spring
- memcache与spring集成 实例
- spring与memcache的集成
- spring与memcache的集成
- spring集成memcache 示例一
- spring缓存集成memcache
- spring集成memcache 示例二
- memcache与spring集成
- Spring 集成 MemCache
- shiro和spring的集成(详细步骤)
- Spring集成Quartz定时任务