使用Guava配置Spring缓存

xed*_*edo 10 java spring caching guava

关于缓存spring文档之后,我可以在我的项目中使用缓存,但是如何配置guava来定义每个缓存名称的过期时间或大小?

applicationConfig.xml

<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/>
Run Code Online (Sandbox Code Playgroud)

Foo.java

@Cacheable(value="courses", key="#user.id")
public List<Course> getCoursesByUser(User user) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

Kyr*_*nko 28

您可以单独配置缓存.请参阅Spring Guava缓存

@Bean
public CacheManager cacheManager() {
    SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
    GuavaCache bookCache = new GuavaCache("book", CacheBuilder.newBuilder().build());
    GuavaCache booksExpirableCache = new GuavaCache("books", CacheBuilder.newBuilder()
            .expireAfterAccess(30, TimeUnit.MINUTES)
            .build());
    simpleCacheManager.setCaches(Arrays.asList(bookCache, booksExpirableCache));
    return simpleCacheManager;
}
Run Code Online (Sandbox Code Playgroud)

  • 在一个缓存管理器中为多个缓存投票 (4认同)

mav*_*azy 17

您可以在Spring配置中为GuavaCacheManager指定CacheBuilder

  1. 在Java配置的情况下,它可以如下所示:
@Bean
public CacheManager cacheManager() {
    GuavaCacheManager cacheManager = new GuavaCacheManager();
    cacheManager.setCacheBuilder(
        CacheBuilder.
        newBuilder().
        expireAfterWrite(2, TimeUnit.SECONDS).
        maximumSize(100));
    return cacheManager;
}
Run Code Online (Sandbox Code Playgroud)
  1. 在XML配置的情况下,您可以在番石榴中使用CacheBuilderSpec
<bean id="legendaryCacheBuilder"
      class="com.google.common.cache.CacheBuilder"
      factory-method="from">
    <constructor-arg value="maximumSize=42,expireAfterAccess=10m,expireAfterWrite=1h" />
</bean>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看:

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilderSpec.html

通过Spring将Google番石榴缓存构建器注入bean

  • 您可以使用具有不同配置的其他cacheBuilder创建单独的cacheManager.然后指定`@Cacheable(value ="courses",cacheManager ="shortTTLCacheManager")`和`@Cacheable(value ="foo",cacheManager ="longTTLCacheManager")` (2认同)