- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Spring cache简单使用
Spring cache简单使用
前言
spring有一套和各种缓存的集成方式。类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache.
什么时候用缓存
首先,缓存是为了省略消耗时间的步骤,比如io。当我需要从数据库查询的数据几乎没有变化,或者变化很少的时候,我就没必要每次都去数据库里拿数据了。大可以放到本地,直接取出来就可以了。这时候需要注意的是数据一致性问题,缓存的数据是否被更改了,数据是否有效。
我的项目是分布式部署的,但还没有搭建分布式缓存服务。我采用的本地缓存,也就是说,我的缓存只能在本实例中,跨机器访问则不命中。即便如此也大大减少了访问数据库的开销了。
配置缓存
这里采用guava cache作为本地缓存。将guava cache注册到cacheManger里就可以调用了。
1.配置cacheManger
首先针对要缓存的类型,配置缓存策略。这里设置最大缓存数量和缓存过期时间
public static final String HOTEL_POSTION = hotel_position; //cache key
@Value(${cache.guavaCache.hotelPosition.maxSize})
private long hotelPositionMaxSize;
@Value(${cache.guavaCache.hotelPosition.duration})
private long hotelPositionDuration;
private GuavaCache buildHotelPositionCache() {
return new GuavaCache(HOTEL_POSTION,
CacheBuilder.newBuilder()
.recordStats()
.maximumSize(hotelPositionMaxSize)
.expireAfterWrite(hotelPositionDuration, TimeUnit.DAYS)
.build());
}
将刚才创建的缓存策略添加到cacheManger:
@Bean
public CacheManager cacheManager() {
SimpleCacheManager manager = new SimpleCacheManager();
List list = new ArrayList();
list.add(buildHotelPositionCache());
manager.setCaches( list );
return manager;
}
2.配置要缓存的方法
在需要使用这个缓存的地方,增加一行注解
@Cacheable(value = CacheManagementConfig.HOTEL_POSTION, key = {#hotelId}, condition = , unless = !#result.isSuccessful())
public BaseDomainResponseHotelPosition getHotelPosition(int hotelId, String apiToken) {
//......
}
@Cacheable表示这个方法要被缓存
value string,表示这个方法缓存的唯一性标识,即这方法缓存的key。语法为SpEL.
key String,表示每条请求缓存的key,即如果key相同,则返回缓存中对应的数据
condition boolean,可以额外添加缓存的条件.语法为SpEL.
unless boolean, 配置哪些条件下的记录不缓存。语法为SpEL.
result表示return的这个对象,可以同result来调用这个对象的属性,比如isSuccessful()就是我返回对象的一个方法。
官方文档
此处学习官方文档cache部分,spring版本4.1+。
At its core, the abstraction applies caching to Java methods, reducing thus the number of executions based on the information a
文档评论(0)