`
liyonghui160com
  • 浏览: 775728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Xmemcached使用之与Spring整合

阅读更多

 

 

<dependency>
    <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>1.4.3</version>
    <type>pom</type>
</dependency>

 

项目启动配置文件:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:memcachedconf.properties</value>
            </list>
        </property>
    </bean>
    <import resource="classpath:spring/clerk-memcached.xml"/>
</beans>

 

 

 

clerk-memcached.xml中代码如下:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--xmemcached 配置-->
    <bean name="xmemcachedClient" class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"
          destroy-method="shutdown">
        <property name="servers" value="${memcached.servers}"/>
        <property name="weights">
            <list>
                  <value>1</value>
                  <value>2</value>
                  <value>3</value>
            </list>
        </property>
        <property name="connectionPoolSize" value="${memcached.connectionPoolSize}"/>
        <property name="sessionLocator">
            <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"/>
        </property>
        <property name="transcoder">
            <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder"/>
        </property>
        <property name="bufferAllocator">
            <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"/>
        </property>
        <property name="failureMode" value="true"/>
    </bean>
    <!--简单封装的memcached客户端-->
    <bean name="memcachedClient" class="com.si.util.Memcached">
        <property name="isOpen" value="${memcached.isOpen}"/>
        <property name="expires" value="${memcached.expires}"/>
        <property name="memcachedClient" ref="xmemcachedClient"/>
    </bean>
</beans>

 

 

其中各参数的意义:

参数

含义

servers

服务器列表,格式:ip:port

weights

主机映射:host1对应1号、host2对应2..

sessionLocator

Session 分配器,有自带的,影响分布式

transcoder

通信编码方式

bufferAllocator

缓冲区分配器

 

 

 

memcachedconf.properties中的代码如下

 

 

#memcached开关
memcached.isOpen=true
#过期时间15分钟,单位(秒)
memcached.expires=3600
#memcached服务器列表
memcached.servers=host1:port1 host2:port2
#memcached 连接池大小
memcached.connectionPoolSize=30

 

 

com.si.clerk.util.Memcached的java类代码

 

 

package com.si.util;

import net.rubyeye.xmemcached.MemcachedClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;

public class Memcached {
    private static Log log = LogFactory.getLog(Memcached.class);
    private boolean isOpen; // Memcached 开关
    private int expires;    // 默认过期时间
    private MemcachedClient mc;

    /*
    add 仅当存储空间中不存在键相同的数据时才保存
     */
    public <T> void addWithNoReply(String key, T value) {
        this.addWithNoReply(key, expires, value);
    }

    /**
     * 设置键值对
     * @param key     key
     * @param expires 单位:秒,0 表示永不过期
     * @param value   必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的
     */
    public <T> void addWithNoReply(String key, int expires, T value) {
        if (StringUtil.isEmpty(key)) return;
        try {
            if (isOpen && mc != null) {
                mc.addWithNoReply(key, expires, value);
            }
        } catch(Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    /*
    set 无论何时都保存
     */
    public <T> void set(String key, T value) {
        this.set(key, expires, value);
    }

    /**
     * 设置键值对
     * @param key     key
     * @param expires 单位:秒,0 表示永不过期
     * @param value   必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的
     */
    public <T> void set(String key, int expires, T value) {
        if (StringUtil.isEmpty(key)) return;
        try {
            if (isOpen && mc != null) {
                mc.set(key, expires, value);
            }
        } catch(Exception e) {
            log.error(e.getMessage(), e);
        }
    }

    /**
     * 根据key获得值
     * @param key key
     * @return value
     */
    public <T> T get(String key) {
        try {
            if (!StringUtil.isEmpty(key) && isOpen && mc != null) {
                return (T)mc.get(key);
            }
        } catch(Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }

    /**
     * 给每个原始key加上前缀后,再查。
     * @param keys                 原始key
     * @param memcachedKeyPrefix   前缀
     * @return
     */
    public <T> Map<String, T> getMulti(Collection keys, String memcachedKeyPrefix) {
        if (CommonTools.isEmpty(keys)) return null;
        if ("".equals(memcachedKeyPrefix)) {
            return this.get(keys);
        }
        List<String> strList = new ArrayList<String>();
        for (Object key : keys) {
            strList.add(memcachedKeyPrefix + String.valueOf(key));
        }
        return this.get(strList);
    }

    /**
     * 重载方法
     * @param keys
     * @param <T>
     * @return
     */
    public <T> Map<String, T> getMulti(Collection keys) {
        return getMulti(keys, "");
    }

    /**
     * 批量获取
     * @param keys keys
     * @return valueMap
     */
    private <T> Map<String, T> get(Collection<String> keys) {
        Map<String, T> map = null;
        try {
            if (keys != null && isOpen && mc != null) {
                map = mc.get(keys);
            }
        } catch(Exception e) {
            log.error(e.getMessage(), e);
        }
        return map;
    }

    public void setIsOpen(boolean open) {
        isOpen = open;
    }

    public void setExpires(int expires) {
        this.expires = expires;
    }

    public void setMemcachedClient(MemcachedClient mc) {
        this.mc = mc;
    }


}

 

 

 

 

分享到:
评论

相关推荐

    Ehcache+xmemcached+redis 整合spring注解demo

    xmemcached提供了丰富的API,可以方便地与Spring整合,通过注解实现缓存管理。例如,可以使用`@Memcached`注解在方法上,使方法结果自动存储到Memcached服务器。 3. **Redis**: Redis是一个开源的、基于键值对的...

    Xmemcached/jedis springdemo

    4. **Spring整合NoSQL**: - **Spring Data** 框架提供了对多种NoSQL数据库的支持,包括Memcached和Redis。通过Spring Data,可以简化数据访问层的开发,例如自动产生CRUD操作,提供基于注解的查询支持。 - 配置...

    xmemcached

    8. **易于集成**:Xmemcached与Spring框架有很好的兼容性,可以方便地与Spring的缓存抽象层集成,简化开发工作。 **Xmemcached版本1.3.3** 版本1.3.3是Xmemcached的一个稳定版本,可能包含了一些错误修复、性能...

    Xmemcached官方中文手册

    Spring框架在企业级Java应用中广泛应用,Xmemcached提供了一套完整的Spring整合方案。通过Spring的Bean管理,可以方便地在应用上下文中注入Memcached客户端,实现服务的自动配置和依赖注入。手册中会详细介绍如何...

    xmemcached 中文开发手册

    XMemcached作为一款高度优化的memcached客户端,不仅支持memcached的所有功能,还提供了许多额外的功能,如动态节点管理、与Spring框架的集成等,使其成为现代Web应用程序的理想选择。通过本文的详细介绍,希望能...

    xmemcache与SPRING整合

    【Xmemcached与SPRING整合】是将Xmemcached客户端库与Spring框架集成,以便在Spring应用程序中方便地使用memcached缓存服务。Xmemcached是一个高性能的Java NIO实现的memcached客户端,具备多种特性,如高性能、支持...

    征服 Kestrel + XMemcached + Spring TaskExecutor

    通过深入学习Kestrel的配置、管理和监控,掌握XMemcached的使用技巧,以及理解Spring TaskExecutor的线程池管理策略,开发者可以有效地优化应用程序的性能,同时保证系统的可伸缩性和可靠性。在实际项目中,可能还...

    Spring与memcached整合

    标题“Spring与memcached整合”涉及的是在Java开发环境中如何将Spring框架与memcached缓存系统相结合使用,以便提升应用程序的性能和响应速度。这里我们将深入探讨这一整合过程中的关键概念和技术。 首先,...

    Xmemcached用户指南

    - **简化开发流程**:考虑到许多项目已经使用Spring框架作为依赖注入容器,XMemcached提供了对Spring的支持。此外,XMemcached还支持与Hibernate-Memcached集成,后者允许将Memcached用作Hibernate的二级缓存。 **8...

    阿里ocs客户端与spring集成,生命周期由spring管理

    两个都可用,但xmc可以交由spring管理client对象的生命周期,而spymc却是spring能创建但无法关闭,研究结果为:用xmc来做客户端,需注意的地方就是spring配置文件中要使用:plain和BinaryCommandFactory。...

    SSM与memcached整合项目Spring Cache

    在本项目中,我们主要探讨的是如何将Spring Cache与memcached进行整合,以提升应用程序的性能和效率。Spring Cache是Spring框架的一部分,它提供了一种抽象的缓存管理机制,可以方便地集成到各种缓存解决方案中,如...

    mule ce xmemcached

    这里给出的解决方案是通过Spring Bean来与XMemcached配合,创建一个简单的缓存应用实例。这种方式可以帮助用户在不支付额外费用的情况下,利用开源组件实现缓存功能。 **知识点详解:** 1. **Mule ESB**: Mule是一...

    Memcached与Spring、Mybatis集成.doc

    ### Memcached与Spring、Mybatis集成 #### 一、简单介绍 本文档主要讲述了如何将Memcached缓存系统与Spring框架以及MyBatis ORM工具进行集成。通过这种方式,可以有效地提高应用程序性能,尤其是在处理大量数据读取...

    spring集成memcached

    ### Spring集成Memcached详解 #### 一、Memcached简介与客户端选择 Memcached是一种高性能、分布式内存对象缓存系统,用于减轻数据库负载、加速动态Web应用,并提高网站速度。Spring框架可以通过集成Memcached来...

    Memcached spring 的集成

    在Spring框架中集成Memcached,主要是为了利用其高性能的分布式内存缓存特性来提升应用程序的性能。Xmemcached是Java实现的一个Memcached客户端,提供了丰富的功能和良好的性能。下面我们将深入探讨如何进行集成以及...

    Xmemcached用户指南.docx

    7. **框架集成**:与Spring框架和Hibernate-memcached无缝集成,使得在使用这些框架的项目中轻松引入Memcached缓存。 8. **客户端连接池**:为了提升高并发环境下的性能,XMemcached支持创建连接池,但需要保证数据...

    Xmemcached用户指南.pdf

    7. **Spring和Hibernate集成**:与Spring框架无缝集成,同时支持Hibernate-memcached,作为二级缓存解决方案,可替代Spymemcached。 8. **客户端连接池**:允许创建连接池以应对高并发场景,但需要注意数据独立性和...

    simple-spring-memcached集成memcache

    当我们需要在Spring应用中集成Memcached时,"simple-spring-memcached"(SSM)是一个很好的选择。这篇博客(链接:https://younglibin.iteye.com/blog/2157666)将指导我们如何进行这个集成过程。 首先,我们要了解...

    kestrel-task-executor:Kestrel + XMemcached + Spring TaskExecutor

    【Kestrel任务执行者:Kestrel + XMemcached + Spring TaskExecutor】 在Java开发领域,高效的任务调度和执行是关键部分,特别是在分布式系统中。这个项目名为"kestrel-task-executor",它结合了Kestrel消息队列、...

    memcache-demo

    "下面我们以XMemcached为例,结合spring演示一下其使用"这部分意味着该压缩包可能包含了如何将XMemcached与Spring框架整合使用的教程或代码示例。Spring是一个广泛应用的Java企业级开发框架,它可以与多种缓存解决...

Global site tag (gtag.js) - Google Analytics