是否可以在弹簧启动时使用咖啡因为每个缓存设置不同的规格?

Dav*_*vid 17 spring-boot spring-cache caffeine

我有一个简单的sprint启动应用程序1.5.11.RELEASE,@EnableCaching在Application Configuration类上使用spring boot .

的pom.xml

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
 </dependency>
 <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

application.properties

spring.cache.type=caffeine
spring.cache.cache-names=cache-a,cache-b
spring.cache.caffeine.spec=maximumSize=100, expireAfterWrite=1d
Run Code Online (Sandbox Code Playgroud)

我的问题很简单,如何为每个缓存指定不同的大小/到期时间.也许它可能cache-a是有效的1 day.但cache-b也许可以1 week.关于咖啡因缓存的规范似乎是全局的,CacheManager而不是Cache.我错过了什么吗?也许我的用例有更合适的提供商?

mem*_*und 11

这是您唯一的机会:

@Bean
public CaffeineCache cacheA() {
    return new CaffeineCache("CACHE_A",
            Caffeine.newBuilder()
                    .expireAfterAccess(1, TimeUnit.DAYS)
                    .build());
}

@Bean
public CaffeineCache cacheB() {
    return new CaffeineCache("CACHE_B",
            Caffeine.newBuilder()
                    .expireAfterWrite(7, TimeUnit.DAYS)
                    .recordStats()
                    .build());
}
Run Code Online (Sandbox Code Playgroud)

只需将您的自定义缓存公开为bean。它们会自动添加到中CaffeineCacheManager

  • 检查您的配置中是否有“@EnableCaching”。不需要手动注册缓存。 (3认同)

aym*_*afa 6

您可以使用 CaffeineCacheManager 的 registerCustomCache() 方法,而不是使用 SimpleCacheManager。下面是一个例子:

CaffeineCacheManager manager = new CaffeineCacheManager();

manager.registerCustomCache(
    "Cache1",
    Caffeine.newBuilder()
        .maximumSize(1000)
        .expireAfterAccess(6, TimeUnit.MINUTES)
        .build()
);

manager.registerCustomCache(
    "Cache2",
    Caffeine.newBuilder()
        .maximumSize(2000)
        .expireAfterAccess(12, TimeUnit.MINUTES)
        .build()
);
Run Code Online (Sandbox Code Playgroud)


ste*_*pio 5

我将最初的 PR转变为一个单独的小项目

要开始使用它,只需添加 Maven Central 的最新依赖项:

<dependency>
    <groupId>io.github.stepio.coffee-boots</groupId>
    <artifactId>coffee-boots</artifactId>
    <version>2.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

属性的格式如下:

coffee-boots.cache.spec.myCache=maximumSize=100000,expireAfterWrite=1m
Run Code Online (Sandbox Code Playgroud)

如果没有定义特定配置,CacheManager则默认为 Spring 的行为。