Spring+memcached整合

标签: spring memcached | 发表时间:2015-03-24 15:28 | 作者:mengshijian4810
出处:http://www.iteye.com

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调用的实现

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [spring memcached] 推荐:

Spring+memcached整合

- - 行业应用 - ITeye博客
1)  下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:http:. 2)  下载java版客户端 java_memcached-release_2.6.1.zip. 3)  解压缩memcached-1.2.6-win32-bin.zip到指定目录,例如:D:\memcached-1.2.6-win32 ,.

memcached+magent实现memcached集群

- - 编程语言 - ITeye博客
首先说明下memcached存在如下问题.   本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源;无法同步数据,容易造成单点故障. (memagent代理实现集群).       在 Memcached中可以保存的item数据量是没有限制的,只要内存足够.

MemCached详解

- - CSDN博客推荐文章
首先,我们来了解一下MemCached与MemCache之间的区别:. Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统. 用于加速动态web应用程序,减轻数据库负载. 它可以应对任意多个连接,使用非阻塞的网络IO. 由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这 些HashTable.

Memcached调优

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 项目中有一个对实时响应性比较高的服务,引入了Memcached以减少延迟和减少数据库压力. 但是期间遇到了一些问题,这里记录一些调优细节. 最开始我使用的是 Memcached Java Client,但是最后放弃了,放弃原因包括:.

memcached协议

- - 开源软件 - ITeye博客
旧版: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt. 新版: https://github.com/memcached/memcached/blob/master/doc/protocol.txt.

Java使用memcached

- - 互联网 - ITeye博客
首先到 http://danga.com/memcached下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可. 然后是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:>;memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start.

转 redis vs memcached

- - 数据库 - ITeye博客
传统MySQL+ Memcached架构遇到的问题.   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:.   1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间.

Memcached安全性

- - xiaobaoqiu Blog
1.Memcached -l参数. 1.Memcached -l参数. 最近整理了组内使用的Memcached. 发现很多问题,其中一个问题就是开发机器测试机器可以直连线上的Memcached. 这也是memcached公认的问题:memcached 是一种很简单、有效的协议,但也有其缺点,就是 memcached 自身没有 ACL 控制(或者相当弱).

Memcached的LRU算法

- Eric - 平凡的世界
最近计划对Memcached做一些尝试性的改造,主要是针对Memcached在处理过期数据的时候进行改造,以实现在一个缓存的过期时间达到的时候,可以对该缓存的数据进行一个验证和存储的处理. 这个需求,主要是为了解决MySQL的写入瓶颈,通过延期、合并写入请求来减少MySQL的并发写入量. 现在逐渐记录出来和有需要的朋友一起讨论.

[转]memCached 客户端

- - 小鸥的博客
memcache客户端下载. 许多Web应用都将数据保存到DBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响. memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件.