001配置
POM 添加:
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>simple-spring-memcached</artifactId>
<version>2.0.0</version>
</dependency>
app添加:
<import resource="classpath:simplesm-context.xml" />
<bean name="cardtypeIcon" 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.232.201:11111,192.168.232.201:11112" />
</bean>
</property>
<property name="configuration">
<bean
class="com.google.code.ssm.providers.xmemcached.XMemcachedConfiguration">
<!--是否使用一致性哈希 -->
<property name="consistentHashing" value="true" />
<property name="operationTimeout" value="10000" />
</bean>
</property>
<property name="cacheName">
<value>cardtypeIcon</value>
</property>
</bean>
java 代码:
/**
* 通过cache查询
*
* @author libin
* @param cardtypeId
* memcached map 对应的key
* @return
*/
@ReadThroughSingleCache(namespace = "yazuo.cardtypeIcon", expiration = 60) //失效时间单位秒
@CacheName("cardtypeIcon")
public String queryCardtypeIcon(
@ParameterValueKeyProvider Integer cardtypeId) {
CardtypeIcon cardtypeIcon = new CardtypeIcon();
cardtypeIcon.setCardtypeId(cardtypeId);
cardtypeIcon = cardtypeIconService.selectCardtypeIconByID(cardtypeIcon);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (null != cardtypeIcon) {
return cardtypeIcon.getIcon();
}
return "";
}
执行之后再cache 中可以使用: get yazuo.cardtypeIcon:cardtypeId
yazuo.cardtypeIcon:是namespace
cardtypeId:是传过来的ID
例如: get yazuo.cardtypeIcon:50
get yazuo.cardtypeIcon:50
VALUE yazuo.cardtypeIcon:50 0 24
55185390502646010083.png
END
遗留问题:
1、 怎么查看 cache 设置的失效时间 命令行
2、 怎么设置到从数据库查询对象为空的时候, 不放入缓存,使用 ReadThroughSingleCache 怎么设置当返回对象为空,不放入缓存
解决:按照ssm注解的意思是,只要数据库执行成功就能放到缓存, 执行失败就不放入缓存了, 所以可以采取抛出异常的方式,放整个方法失败, 这样就不会放入缓存了!
3、使用注解怎么在程序启动的时候, 加载数据库的数据到缓存
002-接口
1、增加或者更新
/**
* 通过cache查询
*
* @author libin
* @param cardtypeId
* memcached map 对应的key
* @return
*/
@ReadThroughSingleCache(namespace = WebCommonContents.CARDTYPEICON_CACHE, expiration = WebCommonContents.CARDTYPEICON_EXPIRATION)
@CacheName("cardtypeIcon")
public String queryCardtypeIcon(
@ParameterValueKeyProvider Integer cardtypeId) {
CardtypeIcon cardtypeIcon = new CardtypeIcon();
cardtypeIcon.setCardtypeId(cardtypeId);
cardtypeIcon = cardtypeIconService.selectCardtypeIconByID(cardtypeIcon);
if (null != cardtypeIcon) {
return cardtypeIcon.getIcon();
}
// TODO 返回空未处理
return "";
}
/**
* @author libin
* @return
*/
@UpdateSingleCache(namespace = WebCommonContents.CARDTYPEICON_CACHE, expiration = WebCommonContents.CARDTYPEICON_EXPIRATION)
@CacheName("cardtypeIcon")
@Override
public void updateCardtypeIcon(
@ParameterValueKeyProvider Integer cardtypeId,
@ParameterDataUpdateContent String icon) {
CardtypeIcon cardtypeIcon = new CardtypeIcon();
cardtypeIcon.setCardtypeId(cardtypeId);
cardtypeIcon = cardtypeIconService.selectCardtypeIconByID(cardtypeIcon);
if (null == cardtypeIcon) {
cardtypeIcon = new CardtypeIcon();
cardtypeIcon.setCardtypeId(cardtypeId);
cardtypeIcon.setIcon(icon);
cardtypeIcon.setLastTime(new Timestamp(System.currentTimeMillis()));
cardtypeIconService.addCardtypeIcon(cardtypeIcon);
} else {
cardtypeIcon.setIcon(icon);
cardtypeIcon.setLastTime(new Timestamp(System.currentTimeMillis()));
cardtypeIconService.updateCardtypeIconByID(cardtypeIcon);
}
}
/**
* @author libin
* @return
*/
@InvalidateSingleCache(namespace = WebCommonContents.CARDTYPEICON_CACHE)
@CacheName("cardtypeIcon")
@Override
public void deleteIcon(@ParameterValueKeyProvider Integer cardtypeId) {
CardtypeIcon cardtypeIcon = new CardtypeIcon();
cardtypeIcon.setCardtypeId(cardtypeId);
cardtypeIconService.removeCardtypeIconByObject(cardtypeIcon);
}
spring 中使用到的注解:
@CacheKeyMethod
@ReadThroughSingleCache
, @ReadThroughMultiCache
, @ReadThroughAssignCache
@InvalidateSingleCache
, @InvalidateMultiCache
, @InvalidateAssignCache
@UpdateSingleCache
, @UpdateMultiCache
, @UpdateAssignCache
@ReadCounterFromCache
@IncrementCounterInCache
, @DecrementCounterInCache
@UpdateCounterInCache
切入点是通过标签的方式来进行声明的,在项目开发时,通常在DAO的方法上加以相应的标签描述,来表示组件对该方法的拦截
组件所提供的切入点主要包括以下几种:
ReadThroughSingleCache、ReadThroughMultiCache、ReadThroughAssignCache
当遇到查询方法声明这些切入点时,组件首先会从缓存中读取数据,取到数据则跳过查询方法,直接返回。
取不到数据在执行查询方法,并将查询结果放入缓存,以便下一次获取。
InvalidateSingleCache、InvalidateMultiCache、InvalidateAssignCache
当遇到删除方法声明这些切入点时,组件会删除缓存中的对应实体
UpdateSingleCache、UpdateMultiCache、UpdateAssignCache
当遇到更新方法声明这些切入点是,组件会更新缓存中对应的实体,以便下次从缓存中读取出的数据状态是最新的
simple-spring-memcached本身并不提供cache机制的实现,只是为了cache的调用更加简单而设计的。
在cache的实现上使用的是第三方组件(如x-memcached和spy-memcached),官方给出了针对这两种组件的相关配置
附件提供一个 java 客户端,可以查询 memcached 中的key 和value , 方便测试,如果熟悉命令行的话, 可以不需要这个!
相关推荐
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
一个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缓存客户端工具包
twemproxy:一个memcached和redis的快速,轻量级代理
java运行依赖jar包
java运行依赖jar包
文档介绍了 1.使用simple-spring-memcached 3.0.2集成memcached和spring; 2.mybatis-memcached-1.0.0-beta1-bundle的用法。
下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’...
python-memcached python-memcached
纯手动学习搭建了一个基于ASP.NET MVC的ORM框架,该框架是EF,Spring.net,Memcached和cache分布式缓存结合搭建实现,并且在项目的根目录下data下有一个自己设计的基于RBAC权限设计的sqlserver数据库备份文件。...
简单的Spring Memcached 一个通过注释在Spring bean中启用memcached缓存的嵌入式库。 大多数文档已移至github,但仍有一些文档仅在上可用。 介绍 ... 使用Simple Spring Memcached仅需要一点点配置
cas-client-support-distributed-memcached-3.2.0.jar
spring 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、shiro等 #### 软件架构 基于Java 1.8 #### Spring 版本 - 5.0.8.RELEASE #### 模块说明 - ...
- Memcached 8. 消息队列: - RabbitMQ - Kafka 9. 性能优化: - JVM调优 - Tomcat调优 - 数据库调优 10. 安全: - XSS、CSRF、SQL注入等常见安全漏洞 - Spring Security安全框架 以上是Java后端...
- Memcached 8. 消息队列: - RabbitMQ - Kafka 9. 性能优化: - JVM调优 - Tomcat调优 - 数据库调优 10. 安全: - XSS、CSRF、SQL注入等常见安全漏洞 - Spring Security安全框架 以上是Java后端...
- Memcached 8. 消息队列: - RabbitMQ - Kafka 9. 性能优化: - JVM调优 - Tomcat调优 - 数据库调优 10. 安全: - XSS、CSRF、SQL注入等常见安全漏洞 - Spring Security安全框架 以上是Java后端...