• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

夕水溪下

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

spring与memcache的集成

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.

*
*/

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是一个稳妥的选择。

posted on 2011-11-03 14:16  夕水溪下  阅读(22746)  评论(2)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3