`
baobeituping
  • 浏览: 1067878 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

spring整合memeched

 
阅读更多

XMemcached是一个基于Java nio的memcached客户端。

它是线程安全,结构简单,支持所有的memcached文本协议和二进制协议,并且有比较优异的性能表现。还支持一些高级特性,如JMX、动态增删节点、客户端统计以及nio连接池等。

整合开始前,先确认有一个或多个可用的Memcached服务,XMemcached支持集群及服务的权重配置。

文章参考:

1. http://code.google.com/p/xmemcached/

2. http://code.google.com/p/xmemcached/wiki/Spring_Integration

 

1. 项目使用maven管理,那么请在pom.xml里边添加Xmemcached的依赖包:

1 <dependency
2     <groupId>com.googlecode.xmemcached</groupId>
3     <artifactId>xmemcached</artifactId>
4     <version>1.4.1</version>
5 </dependency>

2. 添加bean配置,自动装载到容器

复制代码
 1 <bean id="propertyHolder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 2         <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
 3         <property name="ignoreResourceNotFound" value="true" />
 4         <property name="locations">
 5             <list>
 6                 <value>classpath:conf/system.properties</value>
 7                 <value>classpath:conf/jdbc.properties</value>
 8                 <value>classpath:conf/memcached.properties</value>
 9             </list>
10         </property>
11 </bean>
12 
13 <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
14         <constructor-arg>
15             <list>
16                 <bean class="java.net.InetSocketAddress">
17                     <constructor-arg>
18                             <value>${memcached.server.host}</value>
19                     </constructor-arg>
20                     <constructor-arg>
21                             <value>${memcached.server.port}</value>
22                     </constructor-arg>
23                 </bean>
24             </list>
25         </constructor-arg>
26         <constructor-arg>
27             <list>
28                 <value>${memcached.server.weight}</value>
29             </list>
30         </constructor-arg>
31         <property name="connectionPoolSize" value="${memcached.connectionPoolSize}" />
32         <property name="commandFactory">
33                 <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
34         </property>
35         <property name="sessionLocator">
36                 <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
37         </property>
38         <property name="transcoder">
39                 <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
40         </property>
41 </bean>
42 <bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown" />
复制代码

3. memcached.properties 配置内容:

memcached.connectionPoolSize=50
memcached.failureMode=true
#server
memcached.server.host=127.0.0.1
memcached.server.port=11211
memcached.server.weight=1

4. 上面可以设置多台memcached服务器,并指定weight权重。XMemcachedClientBuilder 有两个参数,第一个参数是server配置的list,第二个参数是每台服务器的权重。如:

复制代码
 1 <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
 2         <constructor-arg>
 3             <list>
 4                 <bean class="java.net.InetSocketAddress">
 5                     <constructor-arg>
 6                             <value>${memcached.server1.host}</value>
 7                     </constructor-arg>
 8                     <constructor-arg>
 9                             <value>${memcached.server1.port}</value>
10                     </constructor-arg>
11                 </bean>
12                 <bean class="java.net.InetSocketAddress">
13                     <constructor-arg>
14                             <value>${memcached.server2.host}</value>
15                     </constructor-arg>
16                     <constructor-arg>
17                             <value>${memcached.server2.port}</value>
18                     </constructor-arg>
19                 </bean>
20             </list>
21         </constructor-arg>
22         <constructor-arg>
23             <list>
24                 <value>${memcached.server1.weight}</value>
25                 <value>${memcached.server2.weight}</value>
26             </list>
27         </constructor-arg>
28         <property name="connectionPoolSize" value="${memcached.connectionPoolSize}" />
29         <property name="commandFactory">
30                 <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
31         </property>
32         <property name="sessionLocator">
33                 <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
34         </property>
35         <property name="transcoder">
36                 <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
37         </property>
38     </bean>
复制代码

相应properties配置变更为:

复制代码
#server1
memcached.server1.host=127.0.0.1
memcached.server1.port=11211
memcached.server1.weight=1
#server2
memcached.server2.host=127.0.0.1
memcached.server2.port=11212
memcached.server2.weight=2
复制代码

5. 下面简单提供了一份单台memcached服务器的存取操作及获取memcached状态信息的代码实例:

复制代码
 1 /*
 2  * Copyright 2013 Alibaba.com All right reserved. This software is the
 3  * confidential and proprietary information of Alibaba.com ("Confidential
 4  * Information"). You shall not disclose such Confidential Information and shall
 5  * use it only in accordance with the terms of the license agreement you entered
 6  * into with Alibaba.com.
 7  */
 8 package com.yunos.tv.server.controller.web;
 9 
10 import java.net.InetSocketAddress;
11 import java.util.Iterator;
12 import java.util.Map;
13 import java.util.Map.Entry;
14 import java.util.concurrent.TimeoutException;
15 
16 import net.rubyeye.xmemcached.MemcachedClient;
17 import net.rubyeye.xmemcached.exception.MemcachedException;
18 
19 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.stereotype.Controller;
21 import org.springframework.web.bind.annotation.RequestMapping;
22 import org.springframework.web.bind.annotation.RequestMethod;
23 import org.springframework.web.bind.annotation.ResponseBody;
24 
25 /**
26  * 类DemoController.java的实现描述:TODO 类实现描述
27  * @author riqi 2013-6-28 上午10:48:58
28  */
29 
30 @Controller
31 @RequestMapping(value = "/demo")
32 public class DemoController extends BaseController {
33 
34     @Autowired
35     private MemcachedClient memcachedClient;
36 
37     @SuppressWarnings("unchecked")
38     @ResponseBody
39     @RequestMapping(value = "/hello", method = RequestMethod.GET)
40     public String helloWorld() {
41         try {
42             memcachedClient.set("string", 3600, "Hello World!");
43             Map<InetSocketAddress, Map<String, String>> memcachedStats = memcachedClient.getStats();
44 
45             String helloWord = memcachedClient.get("string");
46             StringBuilder strBuilder = new StringBuilder(helloWord);
47             strBuilder.append("\n");
48 
49             for (Iterator<?> statsIterator = memcachedStats.entrySet().iterator(); statsIterator.hasNext();) {
50                 Map.Entry<InetSocketAddress, Map<String, String>> entry = (Entry<InetSocketAddress, Map<String, String>>) statsIterator.next();
51 
52                 strBuilder.append(entry.getKey() + ":" + entry.getValue());
53                 strBuilder.append("\n");
54             }
55 
56             return strBuilder.toString();
57 
58         } catch (TimeoutException e) {
59             e.printStackTrace();
60         } catch (InterruptedException e) {
61             e.printStackTrace();
62         } catch (MemcachedException e) {
63             e.printStackTrace();
64         }
65 
66         return "";
67     }
68 }
复制代码

浏览器输入:http://localhost:8080/demo/hello.htm

输出内容:

Hello World! 
/127.0.0.1:11211:{delete_hits=0, bytes=68, total_items=62, listen_disabled_num=0, auth_errors=0, evictions=0, version=1.4.4-14-g9c660c0, pointer_size=32, time=1373528740, incr_hits=0, threads=4, limit_maxbytes=67108864, bytes_read=169146, curr_connections=109, get_misses=0, bytes_written=2559445, connection_structures=110, cas_hits=0, delete_misses=0, total_connections=310, cmd_flush=0, uptime=1426, pid=6312, cas_badval=0, get_hits=61, curr_items=1, cas_misses=0, accepting_conns=1, cmd_get=61, cmd_set=62, incr_misses=0, auth_cmds=0, decr_misses=0, decr_hits=0, conn_yields=0}
分享到:
评论

相关推荐

    Mybatis与Spring整合所需的jar包

    mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar javassist-3.22.0-CR2.jar log4j-...

    mybatis与spring整合的全部jar包

    SSM(Spring、SpringMVC、MyBatis)框架整合是Java开发中常见的技术栈,主要用于构建企业级的Web应用程序。在这个压缩包中,我们找到了整合MyBatis和Spring所需的全部jar包,这对于初学者或者开发者搭建项目环境非常...

    mybatis与spring整合全部jar包

    这个“mybatis与spring整合全部jar包”包含了这三个框架整合所需的所有依赖库,使得开发者可以快速搭建SSM项目。 首先,让我们深入了解一下这三个组件: 1. **Spring**:Spring 是一个全面的Java企业级应用开发...

    mybatis-spring 整合jar包

    mybatis-spring 整合jar包,Spring和MyBatis环境整合mybatis-spring-1.1.1

    java-spring整合

    Java-Spring 整合 Java-Spring 整合是指将 Java 语言与 Spring 框架进行整合,以便更好地开发企业级应用程序。下面我们将对 Java-Spring 整合的相关知识点进行详细讲解。 一、 Spring 框架简介 Spring 框架是一款...

    iBatis和Spring整合

    iBatis和Spring整合 iBatis和Spring整合

    spring_mybatis 整合jar包

    在Java开发领域,Spring框架和MyBatis框架的整合是常见的数据访问技术组合。Spring作为一个全面的开源应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,而MyBatis则是一个轻量级的持久层框架,专注于SQL...

    spring整合Mybatis

    在IT行业中,Spring框架与Mybatis的整合是常见的企业级应用开发模式,它结合了Spring的强大功能和Mybatis的灵活性,使得数据访问更加高效。本文将深入探讨如何进行"Spring整合Mybatis"的基础搭建,以及涉及到的相关...

    Spring整合Mybatis与SpringBoot整合Mybatis原理分析

    **Spring整合Mybatis原理分析** 在Java Web开发中,Spring框架以其强大的依赖注入和面向切面编程能力,成为了事实上的核心框架。Mybatis则是一个轻量级的持久层框架,它简化了数据库操作,提供了直观的SQL映射。将...

    spring整合elasticsearch-2.3.5

    本示例程序主要是spring 整合elasticsearch-2.3.5的实践,测试时先将配置文件es.properties中ES服务端es.ip,es.port, es.cluster 配置替换成自己的服务器信息

    spring整合

    Spring整合是Java开发中一个广泛讨论的主题,它涉及到Spring框架与其他技术或库的协同工作,以构建高效、可维护的大型应用程序。Spring以其模块化、松耦合的特性,成为了企业级应用开发的事实标准。在本篇内容中,...

    Spring 整合 Flex 包

    Spring 整合 Flex 是一种将 Adobe Flex 前端技术和 Spring 框架后端服务进行集成的方法,目的是为了创建富互联网应用程序(Rich Internet Applications,RIA)。Spring Flex 提供了全面的支持,使得 Flex 应用程序...

    mybatis-spring整合简单的实例代码

    【标题】"mybatis-spring整合简单实例代码"所涉及的知识点主要集中在如何将MyBatis与Spring框架进行集成,以便在Spring应用中利用MyBatis进行数据访问。这一过程通常包括以下几个关键步骤: 1. **环境配置**:首先...

    struts2-hibernate3-spring整合需要的全部jar包

    - struts2-spring-plugin.jar:Spring插件,用于整合Struts2和Spring。 2. **Hibernate3 ORM框架**: - hibernate3.jar:Hibernate的核心库,包括实体管理、会话工厂等。 - hibernate-annotations.jar:提供注解...

    Spring整合CXF发布服务

    当我们需要在Spring环境中发布Web服务时,Spring与CXF的整合就显得尤为重要。本篇文章将深入探讨如何实现Spring与CXF的整合,以便发布服务。 1. **Spring与CXF整合的基础** 在整合Spring和CXF之前,我们需要确保...

    struts1和spring整合

    Struts1 和 Spring 整合是 Java Web 开发中常见的一种技术组合,它们分别作为 MVC 框架和依赖注入框架,共同提升了应用的可维护性和可扩展性。Struts1 提供了强大的控制器层,而 Spring 提供了业务逻辑处理和依赖...

    Mybatis与Spring整合全部jar包

    4. **Spring与Mybatis的整合**:通过Spring的SqlSessionTemplate或SqlSessionDaoSupport来创建SqlSession实例,这样可以在不离开Spring的上下文中执行Mybatis的SQL操作。 5. **Mapper接口和XML映射文件**:编写...

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

    Spring整合其他ORM框架

    3. **Spring 整合 JPA**:Java Persistence API(JPA)是 Java 标准的 ORM 规范,Spring 提供了 LocalContainerEntityManagerFactoryBean 支持 JPA 集成。开发者可以选择不同的 JPA 实现,如 Hibernate JPA、Eclipse...

    xfire+Spring整合

    当我们将XFire与Spring进行整合时,我们可以利用Spring的强大功能来管理Web服务的生命周期,并且更容易地集成到现有的Spring应用中。 XFire与Spring的整合主要涉及以下几个关键知识点: 1. **Spring的Bean管理**:...

Global site tag (gtag.js) - Google Analytics