标签: 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.我错过了什么吗?也许我的用例有更合适的提供商?

spring-boot spring-cache caffeine

17
推荐指数
3
解决办法
3857
查看次数

LRU含咖啡因

我正在尝试使用Caffeine作为LRU缓存,因此首先添加的条目将首先被逐出.跑这段代码:

final Cache<Object, Object> map = Caffeine.newBuilder()
            .maximumSize(10)
            .initialCapacity(10)
            .build();

for (long i=0; i<20;i++) {
        map.put(i, i);
}

map.cleanUp();
System.out.println(map.ge.getAllPresent(map.asMap().keySet()));
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

{0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 19=19}
Run Code Online (Sandbox Code Playgroud)

但我期待

{10=10, 11=11, 12=12, 13=13, 14=14, 15=15, 16=16, 17=17, 18=18, 19=19}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java lru caffeine

10
推荐指数
1
解决办法
2430
查看次数

多个咖啡因LoadingCaches添加到Spring CaffeineCacheManager

我想在LoadingCacheSpring 上添加几个不同的CacheManager,但我不知道如何使用它CaffeineCacheManager.似乎只有一个加载器可以刷新内容,但是我需要为每个缓存单独加载.是否可以向Spring缓存管理器添加多个加载缓存?如果是这样,那怎么样?

CaffeineCacheManager cacheManage = new CaffeineCacheManager();

LoadingCache<String, Optional<Edition>> loadingCache1 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test -> this.testRepo.find(test));

LoadingCache<String, Optional<Edition>> loadingCache2 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test2 -> this.testRepo.find2(test2));

// How do I add to cache manager, and specify a name?
Run Code Online (Sandbox Code Playgroud)

spring spring-cache caffeine

9
推荐指数
1
解决办法
5262
查看次数

咖啡因与番石榴缓存

根据这些微型基准,事实证明,在读取和写入操作中,咖啡因的速度都比Guava缓存快。

咖啡因实施的秘密是什么?它与Guava缓存有何不同?

我是否可以在咖啡因定时过期的情况下使用预定的执行程序在后台执行适当的维护操作?

caching guava caffeine

9
推荐指数
1
解决办法
2723
查看次数

咖啡因缓存 - 指定条目的到期时间

我正在尝试进一步了解咖啡因缓存。我想知道是否有一种方法可以为缓存中填充的条目指定超时,但其余记录没有基于时间的到期时间。

本质上我希望有以下界面:

put(key, value, timeToExpiry)// 输入具有指定 timeToExpiry 的键和值

put(key, value)// 输入没有 timeToExpiry 的键值

我可以编写接口和管道,但我想了解如何配置咖啡因以满足上述两个要求。我也愿意拥有两个单独的咖啡因缓存实例。

java caffeine

9
推荐指数
1
解决办法
9230
查看次数

咖啡因缓存日志记录

我正在使用带有 spring 注释的咖啡因缓存提供程序,当条目\xe2\x80\x99s 放入缓存或驱逐或缓存上发生的任何活动时,我无法看到来自 caffeinecachemanager 的日志。我是否必须明确提及属性启用或禁用咖啡因日志?

\n\n

任何人都可以帮助解决以下问题吗?\n当 @cachable 填充缓存时如何记录消息?\n当缓存条目从缓存中逐出时如何记录?\n有什么方法可以检查以缓存名称存储的所有缓存条目吗?\ n使用spring注解和CaffeineCacheManager时是否需要AOP配置。?如果是这样,请帮助示例。

\n

spring caching spring-cache caffeine

8
推荐指数
1
解决办法
2172
查看次数

是否可以调整 Caffeine LoadingCache 以与 Spring Boot 的 @Cacheable 一起使用?

我正在开发一个大型 Spring Boot 2.1.5.RELEASE 应用程序,使用 Caffeine 作为缓存提供程序。为了防止 I/O 瓶颈,我LoadingCache<K,V>在(基本上)以下方式中使用了咖啡因:

LoadingCache<K, V> cache = Caffeine.newBuilder()
    .refreshAfterWrite(1, TimeUnit.MINUTES)
    .build(loadStuffOverHttp());
Run Code Online (Sandbox Code Playgroud)

据我所知,如果不使用LoadingCache.

但是,LoadingCache 没有实现 Spring 的Cache. 这意味着我不能依赖@Bean方法来注册我的缓存,每个缓存都需要进行不同的配置。理论上,在 Spring 上下文中注册将允许它们与 Spring 的@Cacheable注释结合使用。

从我从CaffeineCacheConfiguration.java的源代码中可以看出,我也不能依赖 Spring Boot 的自动配置。类型的 Bean CaffeineCache(用于 Caffeine 的Spring 缓存适配器模式Cache<K,V>)是自动注册的,但适配器强制我将其<Object, Object>用作CacheLoader<K, V>. 我只想把这作为最后的手段。

这个 SO 问题表明可以以编程方式配置不同的缓存:

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

但是,使用LoadingCache<K, V>(使用任意K, V, not <Object, Object> …

java spring caching spring-boot caffeine

8
推荐指数
1
解决办法
2707
查看次数

如何将 @Cacheable 与 Kotlin 挂起功能一起使用

我正在 Kotlin 和 Spring Boot 项目中工作,我正在尝试使用 Caffeine 进行缓存。我有一个具有暂停功能的服务,可以进行 http 调用。这是我的配置:

@Bean
open fun caffeineConfig(): @NonNull Caffeine<Any, Any> {
   return Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS)
}

@Bean
open fun cacheManager(caffeine: Caffeine<Any, Any>): CacheManager {
    val caffeineCacheManager = CaffeineCacheManager()
    caffeineCacheManager.getCache("test")
    caffeineCacheManager.setCaffeine(caffeine)
    return caffeineCacheManager
}
Run Code Online (Sandbox Code Playgroud)

这是我想要缓存的函数:

@Cacheable(value = ["test"])
open suspend fun getString(id: String): String {
    return client.getString(id)
}
Run Code Online (Sandbox Code Playgroud)

但似乎缓存不起作用,因为我可以从日志中看到每次调用服务函数时都会调用客户端。不适@Cacheable用于暂停功能?或者我还缺少其他东西吗?

caching kotlin caffeine kotlin-coroutines

6
推荐指数
1
解决办法
6109
查看次数

如何在Spring Java配置中创建Jcache?

我在使用spring cache abstraction设置jcache时遇到问题.

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean(name = "caffeineCachingProvider")
    public CachingProvider caffeineCachingProvider() {
        return new CaffeineCachingProvider();
    }

    @Bean(name = "caffeineCacheManager")
    public JCacheCacheManager getSpringCacheManager() {
        CacheManager cacheManager = caffeineCachingProvider().getCacheManager();
        CaffeineConfiguration<String, List<Product>> caffeineConfiguration = new CaffeineConfiguration<>();
        caffeineConfiguration.setExpiryPolicyFactory(FactoryBuilder.factoryOf(new AccessedExpiryPolicy(new Duration(TimeUnit.MINUTES, 60))));
        Cache<String, List<Product>> productCache = cacheManager.createCache("productCache", caffeineConfiguration);

        JCacheCacheManager jCacheCacheManager = new JCacheCacheManager(cacheManager);
        return jCacheCacheManager;
    }

} 
Run Code Online (Sandbox Code Playgroud)

我正在使用Caffein作为Jcache.我只是无法理解我做错了什么.你能解释一下如何正确地做到这一点吗?

我得到的是NPE在线cacheManager.createCache(...)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'caffeineCacheManager' defined in com.myapp.spring.config.CacheConfig: Bean instantiation via factory method …
Run Code Online (Sandbox Code Playgroud)

java spring jcache spring-cache caffeine

5
推荐指数
1
解决办法
2332
查看次数

如何扩展默认的 Spring Boot CacheManager 配置

我在我的 Web 应用程序中使用 Spring Boot 缓存支持,并将Caffeine设置为缓存提供程序。

我的项目中有几个缓存,大多数都有通用的配置,但是对于两个特定的缓存我需要设置不同的参数。

在我的application.properties我有类似的东西:

spring.cache.cache-names=a-cache,b-cache,c-cache, ...
spring.cache.caffeine.spec=maximumSize=200,expireAfterWrite=3600s
Run Code Online (Sandbox Code Playgroud)

这适用于常见的缓存。然后我想用自定义参数扩展这个配置。

这篇文章解释了如何通过@Configuration类配置缓存,但使用这种方法我完全覆盖了通用配置。

我需要的是这样的:

@Configuration
public class CacheConfiguration {

    @Autowired
    private CacheManager cacheManager;

    @Bean
    public CacheManager cacheManager(Ticker ticker) {
        CaffeineCache c1 = new CaffeineCache("my-custom-cache", Caffeine.newBuilder()
                       .expireAfterWrite(10, TimeUnit.MINUTES)
                       .maximumSize(400)
                       .build());

        // ...

        cacheManager.setCaches(Arrays.asList(..., c1, ... )); // here I'd like to add custom caches...
        return cacheManager;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是声明一个新的CacheManagerbean,“原始”cacheManager不是自动装配的......

有没有办法实现我需要的?

java spring spring-boot caffeine

5
推荐指数
1
解决办法
3462
查看次数