问题标签 [caffeine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - 在 Spring Actuator (CacheManager) 中注册 Caffeine Cache
我们正在使用 Spring Boot 2 和 Spring Actuator。创建缓存时,如下所示:
它已注册到 Spring Actuator 中,可以通过端点访问和处理:
但是,这在使用注释时是有效的@Cacheable
- 但我想创建一个缓存并将其用作地图。
因此,我可以创建:
它可以工作,但不能被Spring Actuator发现。有没有办法注册这种缓存?
java - 是否可以调整 Caffeine LoadingCache 以与 Spring Boot 的 @Cacheable 一起使用?
我正在开发一个大型 Spring Boot 2.1.5.RELEASE 应用程序,使用 Caffeine 作为缓存提供程序。为了防止 I/O 瓶颈,我LoadingCache<K,V>
以(基本上)以下方式使用咖啡因:
据我所知,如果不使用LoadingCache
.
但是,LoadingCache
没有实现 Spring 的Cache
. 这意味着我不能依赖@Bean
方法来注册我的缓存,每个方法都需要进行不同的配置。理论上,在 Spring 上下文中注册将允许它们与 Spring 的@Cacheable
注释一起使用。
从CaffeineCacheConfiguration.java的源代码中可以看出,我也不能依赖 Spring Boot 的自动配置。类型的 Bean CaffeineCache
(Spring 的Caffeine的缓存适配器模式Cache<K,V>
)是自动注册的,但是适配器强制我将其<Object, Object>
用作 my 的泛型类型CacheLoader<K, V>
。我只想将其作为最后的手段。
这个 SO question表明可以以编程方式配置不同的缓存:
只需将您的自定义缓存公开为 bean。它们会自动添加到
CaffeineCacheManager
.
但是,使用LoadingCache<K, V>
(使用任意K
, V
, not <Object, Object>
)执行此操作似乎更难。
这个 SO question似乎表明使用 aSimpleCacheManager
而不是 aCaffeineCacheManager
是可能的 - 但是使用这个解决方案需要CacheLoader
定义对Cache
bean 可用。这可能很容易首先需要使用缓存注入服务@Cacheable
,例如在昂贵的 HTTP 调用的情况下。这似乎也是一个容易产生依赖循环的解决方案,但如果不是这种情况,请纠正我。
问题
LoadingCache<K, V>
定义用于 Spring 的Caffeine 的正确方法是@Cacheable
什么?
java - 带有统计信息的异步咖啡因缓存
在这篇关于实现 Caffeine 异步缓存的博客文章之后,我们想从缓存中获取统计数据。
我们使用2.7.0
的是咖啡因版本
但是,似乎AsyncCache
无法访问其统计信息:
另外,在查看AsyncCache的源代码并将其与Cache类进行比较时,async 类中没有任何stats()
方法。
这有什么原因吗?
java - 如何创建ExpensiveGraph
我想在我的应用程序中使用以下代码
但是,我在多线程方面非常愚蠢,以至于我无法弄清楚如何实现函数 createExpensiveGraph。请帮忙。
java - 使用缓存作为数据库前面的一层
我正在开发一些本质上是异步的后端服务。也就是说,我们有多个异步运行的作业,并将结果写入某个记录。
该记录基本上是一个包装HashMap
结果的类(键是job_id
)。
问题是,我不想提前计算或知道要运行多少作业(如果我知道,我可以cache.invalidate()
在所有作业都已经完成时打开钥匙)
相反,我想要以下方案:
- 为新记录设置到期时间(即
expireAfterWrite
) - 到期时,将(实际上
upsert
)记录写入数据库 - 如果发生缓存未命中,
load()
则调用从数据库中获取记录(如果未找到,则创建一个新记录)
问题: 我尝试使用 Caffeine 缓存,但问题是记录没有在预期的确切时间过期。然后我阅读了这个关于 Guava's Cache 的SO 答案,我想类似的机制也适用于咖啡因。
所以问题是一个记录可以在缓存中“等待”很长一段时间,即使它已经完成了。有没有办法克服这个问题?也就是说,有没有办法“鼓励”缓存使过期项目无效?
这导致我质疑我的解决方案。你会认为我的解决方案是一个好习惯吗?
PS 如有必要,我愿意切换到其他缓存解决方案。
corda - Corda Enterprise 4.0 缺少对咖啡因的依赖
第一次尝试在 Corda Enterprise 4.1 上编译我的项目时,出现了缺少依赖项的堆栈跟踪。
如何包含正确的咖啡因依赖性?
spring-boot - 使用 prometheus 查询缓存命中率图
我将 Caffeine 缓存与 Spring Boot 应用程序一起使用。所有指标都已启用,因此我将它们放在 Prometheus 和 Grafana 上。
基于cache_gets_total
指标,我想构建一个HitRate图表。
我试图获得缓存命中:
并且全部从缓存中获取:
这两个指标都可以正常工作并具有价值。但是当我试图获得命中率时,我没有数据点。我试过的查询:
为什么这个查询不起作用以及如何根据我从 Spring Boot 和 Caffeine 获得的信息获取 HitRate 图表?
java - spring应用启动时如何制作缓存依赖于其他缓存
在我们的多模块项目中,我们在不同的模块中存在不同的缓存。我们在@PostConstruct 中的服务器启动时填充所有这些缓存。现在一些缓存依赖于其他可能存在于不同模块中的缓存。因此,它要求在依赖于该缓存的缓存之前填充一些缓存。1. 我们如何在 Spring 中做到这一点?我可以利用任何设计模式吗?2. 如果缓存被更新,我们如何将这个更新的更改实时传播到那些依赖于更新缓存的缓存?
java - 如何使用 Caffeine 缓存管理器测试内存缓存?(即缓存后获取缓存中的条目数,缓存逐出)
我想在缓存数据或驱逐数据后获取自定义缓存中条目的详细信息。
我尝试使用执行器依赖项来获取“执行器/指标”路径以获取详细信息,但我得到了空的 tomcat 服务器缓存。我的自定义缓存没有迹象表明 myCache (我传递给@Cacheable
注释值参数的名称)。
spring-boot - 在 Spring Boot 应用程序中进行 put 操作后,CaffeineCache 不会立即刷新
我的 Spring Boot 应用程序中有一个随机问题CaffeineCache
。问题在于一个集成测试,它使下一个
- 查找用户
- 删除它
- 再次找到它
find
似乎有时缓存在删除后立即第二次调用之前没有按时刷新。
这是find
方法的简化签名
以及删除的简化签名
我想调用后delete
缓存不会立即更新,这就是find
第二次不调用方法的原因。它从 10 发生 1 次。
关于修复的任何想法?