把近期整合spring cache的文档发成博客,因为我相信 开源-程序员的春天!
2.6 数据库二级缓存(spring cache)
自Spring 3.1起,提供了注解Cache支持,且提供了Cache抽象;在此之前一般通过AOP实现;使用Spring Cache的好处:
提供基本的Cache抽象,方便切换各种底层Cache(他这么说,我们就提供两种底层框架ehcache和redis);
通过注解Cache可以实现类似于事务一样,缓存逻辑透明的应用到我们的业务代码上,且只需要更少的代码就可以完成;
提供事务回滚时也自动回滚缓存;支持比较复杂的缓存逻辑;
2.6.1 ehcache的配置使用
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
那我们配置是由applicationContext-ehcache.xml和ehcache.xml构成
2.6.2 redis(spring cache)的配置使用
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。业务逻辑层(Service层)
redis的客户端实现、主要分为spring-redis-data 、jredis,我们框架采用的和spring结合的就是spring-redis-data。
配置文件applicationContext-rediscache.xml。
2.6.3 spring cache注解使用
@Cacheable
应用到读取数据的方法上,即可缓存的方法,如查找方法:先从缓存中读取,如果没有再调用方法获取数据,然后把数据添加到缓存中:
@CachePut
应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存:即调用该方法时,会把#account.getName()作为key,返回值作为value放入缓存;
@CacheEvict
即应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据: