Simple-Spring-Memcached(SSM) 的简单使用

来源:互联网 发布:手机端域名注册 编辑:程序博客网 时间:2024/06/06 02:39

memcached是一种分布式缓存工具,有效提升了按主键检索数据的性能问题。

Simple-Spring-Memcached 是memcached与spring 框架整合的一种缓存框架,本质是采用aop的方式实现缓存的调用和管理。其核心组件声明了一些Advice,当遇到相应的切入点时,会执行这些Advice来对memcached 加以管理。

Simple-Spring-Memcached 本身不提供cache机制,需借助第三方组件,比如:spymemcached,xmemcached,aws-elasticache.

本文以Maven项目,采用spymemcached 为例。
首先在.pom文件中添加相关依赖

 <!-- memcached -->        <dependency>            <groupId>com.google.code.simple-spring-memcached</groupId>            <artifactId>spymemcached</artifactId>            <version>2.8.4</version>        </dependency>        <dependency>            <groupId>com.google.code.simple-spring-memcached</groupId>            <artifactId>spymemcached-provider</artifactId>            <version>3.1.0</version>        </dependency>        <dependency>            <groupId>com.google.code.simple-spring-memcached</groupId>            <artifactId>simple-spring-memcached</artifactId>            <version>3.1.0</version>        </dependency>

配置文件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"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="       http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://www.springframework.org/schema/aop            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  <import resource="simplesm-context.xml" />  <aop:aspectj-autoproxy />    <bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">        <property name="cacheClientFactory">            <!--  spymemcached配置方法 -->            <bean name="cacheClientFactory"                  class="com.google.code.ssm.providers.spymemcached.MemcacheClientFactoryImpl"/>        </property>        <!-- 定义了缓存节点的IP地址和端口号 -->        <property name="addressProvider">            <bean class="com.google.code.ssm.config.DefaultAddressProvider">                <property name="address" value="${aliyun.memcached}:11211"/>            </bean>        </property>        <!-- 定义了缓存节点的查找方法 -->        <property name="configuration">            <bean class="com.google.code.ssm.providers.CacheConfiguration">                <property name="consistentHashing" value="true"/>            </bean>        </property>    </bean></beans>

simplesm-context.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"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="           http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <!-- mode: ${mode} -->    <!--<aop:aspectj-autoproxy /> -->    <context:component-scan base-package="com.google.code.ssm" />    <bean id="cacheBase" class="com.google.code.ssm.aop.CacheBase" />    <bean id="readThroughSingleCache" class="com.google.code.ssm.aop.ReadThroughSingleCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="readThroughMultiCache" class="com.google.code.ssm.aop.ReadThroughMultiCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="readThroughAssignCache" class="com.google.code.ssm.aop.ReadThroughAssignCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="updateSingleCache" class="com.google.code.ssm.aop.UpdateSingleCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="updateMultiCache" class="com.google.code.ssm.aop.UpdateMultiCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="updateAssignCache" class="com.google.code.ssm.aop.UpdateAssignCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="invalidateSingleCache" class="com.google.code.ssm.aop.InvalidateSingleCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="invalidateMultiCache" class="com.google.code.ssm.aop.InvalidateMultiCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="invalidateAssignCache" class="com.google.code.ssm.aop.InvalidateAssignCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="incrementCounterInCache" class="com.google.code.ssm.aop.counter.IncrementCounterInCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="decrementCounterInCache" class="com.google.code.ssm.aop.counter.DecrementCounterInCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="readCounterFromCache" class="com.google.code.ssm.aop.counter.ReadCounterFromCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean>    <bean id="updateCounterInCache" class="com.google.code.ssm.aop.counter.UpdateCounterInCacheAdvice">        <property name="cacheBase" ref="cacheBase" />    </bean></beans>

现在现在配置基本完成,现在就可以进行实际操作了。下面会介绍一些常见的注解


@CacheKeyMethod

用来注解缓存key值生成的方法。方法无参数,返回值为字符串。如果能找到该注解,则使用该注解的方法生成唯一的key.若找不到则使用Object.toString()

最常用的九大注解:

@ReadThroughSingleCache,@ReadThroughMultiCache,
@ReadThroughAssignCache,@InvalidateSingleCache,
@InvalidateMultiCache,@InvalidateAssignCache,
@UpdateSingleCache,@UpdateMultiCache,@UpdateAssignCache

按照操作类型分为:read,Invalidate,update 读取,失效,更新

按照操作对象分为:Single,Multi,Assign

SingleCache:操作单个POJO的Cache数据,由ParameterValueKeyProvider和CacheKeyMethod提供标识组装keyMultiCache:读取多个缓存AssignCache:注解指定key

一些例子
@ReadThroughSingleCache

  @ReadThroughSingleCache(namespace = "test" ,expiration = 3600)    public ObUsers getUsers(@ParameterValueKeyProvider long id){        return new ObUsers();    }    //多个数据生成key ,需要 order 属性    @ReadThroughSingleCache(namespace = "test" ,expiration = 3600)    public ObUsers getUsers2(@ParameterValueKeyProvider long id,                             @ParameterValueKeyProvider(order = 1) String name){        return new ObUsers();    }

@ReadThroughMultiCache

 @ReadThroughMultiCache(namespace = "userlist")    //expiration 不写,默认为0,会使用key值的默认过期时间    public ArrayList<ObUsers> getUserBaseInfo(@ParameterValueKeyProvider ArrayList<Long> idList) {        return null;    }    @ReadThroughMultiCache(option = @ReadThroughMultiCacheOption(generateKeysFromResult = true),            namespace = "userlist",expiration = 3600)    //generateKeysFromResult = TRUE 通过结果生成key    public ArrayList<ObUsers> getUserBaseInfo2(@ParameterValueKeyProvider ArrayList<Long> idList) {        return null;    }

@ReadThroughAssignCache

@ReadThroughAssignCache(assignedKey = "all",namespace = "test",expiration = 3600)    public ArrayList<ObUsers> getAll() {        return null;    }

@UpdateSingleCache

 @UpdateSingleCache(namespace = "test", expiration = 3600)    @ReturnDataUpdateContent    //更新后的值成为缓存中的返回值    public ObUsers updateUsers(@ParameterValueKeyProvider  long id) {        return new ObUsers();    }    @UpdateSingleCache(namespace = "test", expiration = 3600)    public ObUsers updateUsers2(@ParameterValueKeyProvider @ParameterDataUpdateContent ObUsers user) {        return new ObUsers();    }

@UpdateMultiCache,@UpdateAssignCache

 @UpdateMultiCache(namespace = "userlist")    @ReturnDataUpdateContent    public ArrayList<ObUsers> updateUserBaseInfo(@ParameterValueKeyProvider ArrayList<Long> idList) {        return null;    }    @UpdateAssignCache(assignedKey = "all",namespace = "test")    public ArrayList<ObUsers> updateAll() {        return null;    }

@InvalidateSingleCache,@InvalidateMultiCache,@InvalidateAssignCache

 @InvalidateSingleCache(namespace = "test")    @ReturnValueKeyProvider    public long removeUsers(@ParameterValueKeyProvider  long id) {        return id;    }    @InvalidateMultiCache(namespace = "userlist")    public ArrayList<Long> removeUserBaseInfo(@ParameterValueKeyProvider ArrayList<Long> idList) {        return idList;    }    @InvalidateAssignCache(assignedKey = "all",namespace = "test")    public ArrayList<ObUsers> removeAll() {        return null;    }

其他的一些注解

@ReadCounterFromCache 读取计数器@IncrementCounterInCache 计数器加一@DecrementCOunterIncache 计数器减一@UpdateCounterIncache 更新计数器
原创粉丝点击