zoukankan      html  css  js  c++  java
  • 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容器的工具类

     1 /**
     2 
     3 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
     4 
     5 **/
     6 
     7 public class SpringContextHolder implementsApplicationContextAware{
     8 
     9 private static ApplicationContext applicationContext;
    10 
    11 /**
    12 
    13 * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
    14 
    15 */
    16 
    17 public voidsetApplicationContext(ApplicationContext applicationContext) {
    18 
    19 SpringContextHolder.applicationContext= applicationContext;
    20 
    21 }
    22 
    23 /**
    24 
    25 * 取得存储在静态变量中的ApplicationContext.
    26 
    27 */
    28 
    29 public staticApplicationContext getApplicationContext() {
    30 
    31 checkApplicationContext();
    32 
    33 return applicationContext;
    34 
    35 }
    36 
    37 /**
    38 
    39 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
    40 
    41 */
    42 
    43 @SuppressWarnings("unchecked")
    44 
    45 public static<T> T getBean(String name) {
    46 
    47 checkApplicationContext();
    48 
    49 return (T) applicationContext.getBean(name);
    50 
    51 }
    52 
    53 /**
    54 
    55 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
    56 
    57 * 如果有多个Bean符合Class, 取出第一个.
    58 
    59 */
    60 
    61 @SuppressWarnings("unchecked")
    62 
    63 public static<T> T getBean(Class<T> clazz) {
    64 
    65 checkApplicationContext();
    66 
    67 Map beanMaps = applicationContext.getBeansOfType(clazz);
    68 
    69 if (beanMaps!=null&& !beanMaps.isEmpty()) {
    70 
    71 return(T) beanMaps.values().iterator().next();
    72 
    73 } else{
    74 
    75 return null;
    76 
    77 }
    78 
    79 }
    80 
    81 private static voidcheckApplicationContext() {
    82 
    83 if (applicationContext == null) {
    84 
    85 throw newIllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
    86 
    87 }
    88 
    89 }
    90 
    91 }

    首先说一下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的工具类

    1 public class MemcacheUtil {
    2     public static MemCachedClient getMemCachedClient() {
    3         return SpringContextHolder.getBean("memcachedClient");
    4 }
    5 }

    8.junit测试类

     1 public class MemcacheUtilTest {
     2     static MemCachedClient memcachedClient;
     3     @BeforeClass
     4     public static void setUpBeforeClass() throws Exception {
     5         ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"/spring/applicationContext-common.xml","/spring/spring-memcache.xml"});
     6     }
     7     @Test
     8     public void s() {
     9         MemCachedClient m=SpringContextHolder.getBean("memcachedClient");
    10         m.set("name", "yunhui");
    11         System.out.println(m.get("name"));
    12     }
    13 }

    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是一个稳妥的选择。
  • 相关阅读:
    ffmpeg给视频添加文本
    装饰器的补充以及迭代器
    闭包函数与装饰器
    函数的嵌套,名称空间,以及作用域
    函数一
    文件处理二
    字符编码及文本一
    基本数据类型及内置方法(二)
    基本数据类型的内置方法
    流程控制之if,while,for
  • 原文地址:https://www.cnblogs.com/link1988/p/5422406.html
Copyright © 2011-2022 走看看