Spring Caching抽象和Google Guava Cache

Spring为缓存昂贵的方法调用提供了强大的开箱即用支持。 这里详细介绍缓存抽象。

我的目的是要介绍Spring现在为框架的4.0+版本提供的较新的缓存实现之一-使用Google Guava Cache

简而言之,请考虑一种具有几种慢速方法的服务:

public class DummyBookService implements BookService {

 @Override
 public Book loadBook(String isbn) {
  // Slow method 1.

 }

 @Override
 public List<Book> loadBookByAuthor(String author) {
  // Slow method 2
 }

}

借助Spring Caching抽象,可以通过在这些行上使用方法上的注释来加快具有相同参数的重复调用–在这里,loadBook的结果被缓存到“ book”缓存中,而缓存的图书清单又被缓存到另一个“ books”快取:

public class DummyBookService implements BookService {

 @Override
 @Cacheable("book")
 public Book loadBook(String isbn) {
  // slow response time..

 }

 @Override
 @Cacheable("books")
 public List<Book> loadBookByAuthor(String author) {
  // Slow listing
 }
}

现在,对缓存抽象的支持需要一个CacheManager可用,该CacheManager负责管理基础缓存以存储缓存的结果,而对于新的Guava Cache支持,CacheManager遵循以下原则:

@Bean
public CacheManager cacheManager() {
 return new GuavaCacheManager("books", "book");
}

Google Guava Cache提供了丰富的API,能够预加载缓存,根据上次访问或创建时间设置驱逐时间,设置缓存的大小等,如果要自定义缓存,则可以传递guava CacheBuilder到CacheManager进行此自定义:

@Bean
public CacheManager cacheManager() {
 GuavaCacheManager guavaCacheManager =  new GuavaCacheManager();
 guavaCacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterAccess(30, TimeUnit.MINUTES));
 return guavaCacheManager;
}

如果所有缓存都具有相似的配置,则此方法效果很好,如果需要对缓存进行不同的配置(例如),该怎么办。 在上面的示例中,我可能希望“书”缓存永不过期,但“书”缓存具有30分钟的过期时间,那么GuavaCacheManager抽象不能很好地工作,相反,更好的解决方案是实际上使用SimpleCacheManager提供了一种更直接的方法来获取缓存,并且可以通过以下方式进行配置:

@Bean
public CacheManager cacheManager() {
 SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
 GuavaCache cache1 = new GuavaCache("book", CacheBuilder.newBuilder().build());
 GuavaCache cache2 = new GuavaCache("books", CacheBuilder.newBuilder()
             .expireAfterAccess(30, TimeUnit.MINUTES)
             .build());
 simpleCacheManager.setCaches(Arrays.asList(cache1, cache2));
 return simpleCacheManager;
}

如果需要,可以将某些缓存配置为由不同的缓存引擎本身来支持,例如简单的哈希映射,一些由Guava或EhCache进行缓存,某些由诸如Gemfire的分布式缓存支持,则此方法非常有效。

翻译自: https://www.javacodegeeks.com/2014/11/spring-caching-abstraction-and-google-guava-cache.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值