我想在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 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> …