问题标签 [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.

0 投票
2 回答
3019 浏览

spring-boot - 在 Spring Actuator (CacheManager) 中注册 Caffeine Cache

我们正在使用 Spring Boot 2 和 Spring Actuator。创建缓存时,如下所示:

它已注册到 Spring Actuator 中,可以通过端点访问和处理:

但是,这在使用注释时是有效的@Cacheable- 但我想创建一个缓存并将其用作地图。

因此,我可以创建:

它可以工作,但不能被Spring Actuator发现。有没有办法注册这种缓存?

0 投票
0 回答
3178 浏览

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定义对Cachebean 可用。这可能很容易首先需要使用缓存注入服务@Cacheable,例如在昂贵的 HTTP 调用的情况下。这似乎也是一个容易产生依赖循环的解决方案,但如果不是这种情况,请纠正我。

问题

LoadingCache<K, V>定义用于 Spring 的Caffeine 的正确方法是@Cacheable什么?

0 投票
1 回答
1973 浏览

java - 带有统计信息的异步​​咖啡因缓存

这篇关于实现 Caffeine 异步缓存的博客文章之后,我们想从缓存中获取统计数据。

我们使用2.7.0的是咖啡因版本

但是,似乎AsyncCache无法访问其统计信息:

另外,在查看AsyncCache的源代码并将其与Cache类进行比较时,async 类中没有任何stats()方法。

这有什么原因吗?

0 投票
1 回答
392 浏览

java - 如何创建ExpensiveGraph

我想在我的应用程序中使用以下代码

但是,我在多线程方面非常愚蠢,以至于我无法弄清楚如何实现函数 createExpensiveGraph。请帮忙。

0 投票
1 回答
507 浏览

java - 使用缓存作为数据库前面的一层

我正在开发一些本质上是异步的后端服务。也就是说,我们有多个异步运行的作业,并将结果写入某个记录。

该记录基本上是一个包装HashMap结果的类(键是job_id)。

问题是,我不想提前计算或知道要运行多少作业(如果我知道,我可以cache.invalidate()在所有作业都已经完成时打开钥匙)

相反,我想要以下方案:

  1. 为新记录设置到期时间(即expireAfterWrite
  2. 到期时,将(实际上upsert)记录写入数据库
  3. 如果发生缓存未命中,load()则调用从数据库中获取记录(如果未找到,则创建一个新记录)

问题: 我尝试使用 Caffeine 缓存,但问题是记录没有在预期的确切时间过期。然后我阅读了这个关于 Guava's Cache 的SO 答案,我想类似的机制也适用于咖啡因。

所以问题是一个记录可以在缓存中“等待”很长一段时间,即使它已经完成了。有没有办法克服这个问题?也就是说,有没有办法“鼓励”缓存使过期项目无效?

这导致我质疑我的解决方案。你会认为我的解决方案是一个好习惯吗?

PS 如有必要,我愿意切换到其他缓存解决方案。

0 投票
1 回答
111 浏览

corda - Corda Enterprise 4.0 缺少对咖啡因的依赖

第一次尝试在 Corda Enterprise 4.1 上编译我的项目时,出现了缺少依赖项的堆栈跟踪。

如何包含正确的咖啡因依赖性?

0 投票
1 回答
2771 浏览

spring-boot - 使用 prometheus 查询缓存命中率图

我将 Caffeine 缓存与 Spring Boot 应用程序一起使用。所有指标都已启用,因此我将它们放在 Prometheus 和 Grafana 上。

基于cache_gets_total指标,我想构建一个HitRate图表。

我试图获得缓存命中

并且全部从缓存中获取:

这两个指标都可以正常工作并具有价值。但是当我试图获得命中率时,我没有数据点。我试过的查询:

为什么这个查询不起作用以及如何根据我从 Spring Boot 和 Caffeine 获得的信息获取 HitRate 图表?

0 投票
1 回答
123 浏览

java - spring应用启动时如何制作缓存依赖于其他缓存

在我们的多模块项目中,我们在不同的模块中存在不同的缓存。我们在@PostConstruct 中的服务器启动时填充所有这些缓存。现在一些缓存依赖于其他可能存在于不同模块中的缓存。因此,它要求在依赖于该缓存的缓存之前填充一些缓存。1. 我们如何在 Spring 中做到这一点?我可以利用任何设计模式吗?2. 如果缓存被更新,我们如何将这个更新的更改实时传播到那些依赖于更新缓存的缓存?

0 投票
1 回答
1377 浏览

java - 如何使用 Caffeine 缓存管理器测试内存缓存?(即缓存后获取缓存中的条目数,缓存逐出)

我想在缓存数据或驱逐数据后获取自定义缓存中条目的详细信息。

我尝试使用执行器依赖项来获取“执行器/指标”路径以获取详细信息,但我得到了空的 tomcat 服务器缓存。我的自定义缓存没有迹象表明 myCache (我传递给@Cacheable注释值参数的名称)。

0 投票
0 回答
79 浏览

spring-boot - 在 Spring Boot 应用程序中进行 put 操作后,CaffeineCache 不会立即刷新

我的 Spring Boot 应用程序中有一个随机问题CaffeineCache。问题在于一个集成测试,它使下一个

  • 查找用户
  • 删除它
  • 再次找到它

find似乎有时缓存在删除后立即第二次调用之前没有按时刷新。

这是find方法的简化签名

以及删除的简化签名

我想调用后delete缓存不会立即更新,这就是find第二次不调用方法的原因。它从 10 发生 1 次。

关于修复的任何想法?