memcached是一款非常优秀的分布式缓存工具,有效提升了按主键检索数据的性能问题。而simple-spring-memcached组件通过与spring框架整合,让memcached的调用变得更加简单。
simple-spring-memcached本质上是采用了AOP的方式来实现缓存的调用和管理,其核心组件声明了一些Advice,当遇到相应的切入点时,会执行这些Advice来对memcached加以管理。
切入点是通过标签的方式来进行声明的,在项目开发时,通常在DAO的方法上加以相应的标签描述,来表示组件对该方法的拦截
组件所提供的切入点主要包括以下几种:
ReadThroughSingleCache、ReadThroughMultiCache、ReadThroughAssignCache
当遇到查询方法声明这些切入点时,组件首先会从缓存中读取数据,取到数据则跳过查询方法,直接返回。
取不到数据在执行查询方法,并将查询结果放入缓存,以便下一次获取。
InvalidateSingleCache、InvalidateMultiCache、InvalidateAssignCache
当遇到删除方法声明这些切入点时,组件会删除缓存中的对应实体
UpdateSingleCache、UpdateMultiCache、UpdateAssignCache
当遇到更新方法声明这些切入点是,组件会更新缓存中对应的实体,以便下次从缓存中读取出的数据状态是最新的
simple-spring-memcached本身并不提供cache机制的实现,只是为了cache的调用更加简单而设计的。
在cache的实现上使用的是第三方组件(如x-memcached和spy-memcached),官方给出了针对这两种组件的相关配置
http://code.google.com/p/simple-spring-memcached/wiki/Getting_Started
simple-spring-memcached的使用:
1.首先在Spring配置文件中加入如下两句:
- <import resource="simplesm-context.xml" />
- <aop:aspectj-autoproxy />
simplesm-context.xml封装在simple-spring-memcached-*.jar文件当中,主要用来加载组件核心的Advice,供程序调度使用。
而由于simple-spring-memcached主要是基于AOP的代理,所以加入<aop:aspectj-autoproxy />让代理机制起到作用。
2.定义memcached客户端
memcached比较常用的java客户端有两种,spymemcached和xmemcached,xmemcached支持多线程
- <bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
- <property name="cacheClientFactory">
- <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
- </property>
- <property name="addressProvider">
- <bean class="com.google.code.ssm.config.DefaultAddressProvider">
- <property name="address" value="192.168.7.131:11211" />
- </bean>
- </property>
- <property name="configuration">
- <bean class="com.google.code.ssm.providers.CacheConfiguration">
- <property name="consistentHashing" value="true" />
- </bean>
- </property>
- </bean>
com.google.code.ssm.CacheFactory是一个FactoryBean,会返回Cache实体供Advice使用
address属性定义了缓存节点的IP地址和端口号
consistentHashing属性定义了缓存节点的查找方法
3.实体的定义
memcached相当于一个功能强大的Map,通过Key/Value的形式来缓存POJO实体,在定义实体的时候,可通过@CacheKeyMethod标签来为实体指定Key值,同时实体及实体的每个成员变量必须是可序列化的,可实现Serializable接口,或通过Externalizable接口来为实体指定序列化方法。
- public class User implements Serializable {
- private static final long serialVersionUID = 7517080513591583073L;
- private String userId;
- private String username;
- private String password;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @CacheKeyMethod
- public String getUserId() {
- return userId;
- }
- public void setUserId(String userId) {
- this.userId = userId;
- }
- }
4.DAO的定义
缓存操作通常是对DAO的方法进行拦截,加入必要的通知以达到增删改查的效果
切入点的声明主要通过之前提到的标签来实现
- public class UserDaoImpl implements IUserDao {
- private static final String NAMESPACE="ns";
- private Map<String,User> users=new HashMap<String,User>();
- @Override
- public void saveUser(User user) {
- users.put(user.getUserId(), user);
- }
- /**
- * 当执行getById查询方法时,系统首先会从缓存中获取userId对应的实体
- * 如果实体还没有被缓存,则执行查询方法并将查询结果放入缓存中
- */
- @Override
- @ReadThroughSingleCache(namespace = NAMESPACE, expiration = 3600)
- public User getById(@ParameterValueKeyProvider String userId) {
- System.out.println(userId);
- return users.get(userId);
- }
- /**
- * 当执行updateUser方法时,系统会更新缓存中userId对应的实体
- * 将实体内容更新成@*DataUpdateContent标签所描述的实体
- */
- @UpdateSingleCache(namespace = NAMESPACE, expiration = 3600)
- @Override
- public void updateUser(@ParameterValueKeyProvider @ParameterDataUpdateContent User user) {
- users.put(user.getUserId(), user);
- }
- /**
- * 当执行deleteUser方法时,系统会删除缓存中userId对应的实体
- */
- @InvalidateSingleCache(namespace = NAMESPACE)
- @Override
- public void deleteUser(@ParameterValueKeyProvider String userId) {
- users.remove(userId);
- }
相关推荐
Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项来简化Memcached的使用。 该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-...
simple-spring-memcached是与mamcached与spring结合,实现注解的方式缓存。 这是java所需要的jar,版本为3.3.0
NULL 博文链接:https://younglibin.iteye.com/blog/2157666
一个maven工程,使用spring集成了simple-spring-memcached的demo示例
ssm3-mybatis2-memcached 使用了 simple-spring-memcached 。因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-...
simple-spring-memcached统一缓存的使用实例[整理].pdf
Spring集成的memcached缓存客户端工具包
java运行依赖jar包
java运行依赖jar包
twemproxy:一个memcached和redis的快速,轻量级代理
简单的Spring Memcached 一个通过注释在Spring bean中启用memcached缓存的嵌入式库。 大多数文档已移至github,但仍有一些文档仅在上可用。 介绍 ... 使用Simple Spring Memcached仅需要一点点配置
文档介绍了 1.使用simple-spring-memcached 3.0.2集成memcached和spring; 2.mybatis-memcached-1.0.0-beta1-bundle的用法。
简单的 Sprint Memcached 学习测试项目测试 memcached 服务器: localhost:11211重现@ReadThroughMultiCache 错误 此错误已在 Simple spring memcached 3.6.0 中修复。 ./gradlew runMainSSM 配置在...
dubbo-rpc-memcached dubbo-rpc-redis dubbo-rpc-rest dubbo-rpc-rmi dubbo-rpc-thrift dubbo-rpc-webservice dubbo-simple dubbo-test dubbo-test-benchmark dubbo-test-benchmark-api dubbo-test-benchmark-client...
simple-spring-memcached-3.5.0.jar slf4j-api-1.6.0.jar slf4j-log4j12-1.6.0.jar solr-solrj-3.4.0.jar spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar ...
[INFO] dubbo-rpc-memcached ............................... SUCCESS [0.713s] [INFO] dubbo-rpc-redis ................................... SUCCESS [3.176s] [INFO] dubbo-registry-zookeeper ...................
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...