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 更新计数器
- Simple-Spring-Memcached(SSM) 的简单使用
- 使用SSM(Simple-Spring-Memcached)的一些心得
- 使用Simple-Spring-Memcached的demo示例
- Simple-Spring-Memcached 使用简介
- simple-spring-memcached简介
- simple-spring-memcached简介
- Simple-Spring-memcached
- simple-spring-memcached简介
- simple-spring-memcached简介
- simple-spring-memcached简介
- simple-spring-memcached简介
- simple-spring-memcached 入门
- simple-spring-memcached简介
- simple-spring-memcached简介
- simple-spring-memcached简介
- Simple-Spring-Memcached
- simple-spring-memcached简介
- spring mvc + simple-spring-memcached
- gperftools-2.5.93
- 静态代码块在类被初始化时加载
- git提交node-modules报文件名过长无法提交问题
- 二叉搜索树的第k个节点(java版)
- 设备 eno16777736 似乎不存在, 延迟初始化操作
- Simple-Spring-Memcached(SSM) 的简单使用
- Flask中图片的刷新
- Clion打开新项目时Building symbols时间过长解决方案
- java 并发编程之volatile关键字
- Service(一)
- Chrome屏蔽广告
- js 检查登录名和密码
- 欢迎使用CSDN-markdown编辑器
- html页面中的<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">,utf-8什么用?