问题标签 [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 投票
1 回答
1290 浏览

java - ConcurrentHashMap 在番石榴/咖啡因/?缓存

Since Java 8 we can use .compute* methods on ConcurrentHashMap to synchronize processing by key, so that if two threads execute .compute* method on the same key at the same time, callbacks still will be executed one after another and not simultaneously. But ConcurrentHashMap doesn't provide ability to delete data in timely fashion as caches usually allow.

Guava/Caffeine caches provide ability to automatically delete values based on time, but you don't have that nasty feature of synchronized processing based on key, as in ConcurrentHashMap (you can get ConcurrentMap using asMap method, but .compute* implementations doesn't provide synchronization based on key)

My goal is to have both processing synchronization by key as in ConcurrentHashMap AND removals by time as in Guava/Caffeine.

What is the best way to achieve it in Java?

0 投票
1 回答
1377 浏览

java - 咖啡因缓存“无法转换为 org.springframework.cache.Cache”

我正在尝试使用 Spring Boot 缓存。我有一个缓存类:

我有一个配置:

我有一个缓存:

我收到此错误:

我也尝试过使用 Guava 缓存,但我得到了同样的错误。我在这里想念什么?如何强制 Spring 使用咖啡因?

0 投票
1 回答
335 浏览

java - 动态调整咖啡因缓存的大小

我目前正在从ConcurrentLinkedHashMap迁移到Caffeine,我一直在尝试找到setCapacity的等效功能

有没有办法在咖啡因中做同样的事情?

我应该将当前缓存复制到新创建的具有新大小的缓存中吗?这似乎不是很有效,但我目前看不到另一种方法

0 投票
1 回答
546 浏览

jmx - Is there a way to enable Caffeine MBean registration?

I am using Scaffeine in my project (https://github.com/blemale/scaffeine), a Scala wrapper for Caffeine (https://github.com/ben-manes/caffeine). I also have a prometheus JMX collector embedded in my metrics API (https://github.com/Segence/kamon-jmx-collector).

However when I launch my application, I can't really see any MBeans for Caffeine in VisualVM.

Also, when looking at the Caffeine project, I found that in the caffeine/jcache/src/main/resources/reference.conf there is a config for JMX monitoring:

Both are set to false. Is there a way to configure Caffeine so that it exposes MBeans to JMX?

0 投票
1 回答
195 浏览

java - 咖啡因缓存:永远不会调用 write()

我的缓存是用以下内容构建的writer

在我的测试中,我正在加载 10 个项目,然后等待(无限循环 + 睡眠)。

问题是write()永远不会被调用,即使在调用之后cleanUp()

为什么没有write()触发?

0 投票
0 回答
645 浏览

java - 咖啡因:Memoize 或 Cache Builder 一个大项目列表?

作为免责声明,我是 Caffeine 的新手,正在探索这种轻量级的方法。

我有一个从包含超过 20K 的简单 ItemLOV 双属性对象的数据库中获取的集合。它们被拉出、转换/转换为:

我正在寻找的是将缓存的项目设置为我拥有的第三方组件的 setItems 方法。setItems 是一个公共 void 方法,它允许在以下位置解析三个选项:

  • public void setItems(final Collection<T> items)
  • public void setItems(Stream<T> streamOfItems)
  • public void setItems(@SuppressWarnings("unchecked") final T... items)

我注意到有一个类似的帖子:Simple Way to Cache a List of Collection in Java但我不确定的是:

  1. 我的列表应该使用 memoize 还是缓存构建器?
  2. 如果最好使用 memoize,示例代码(在链接的帖子中)中使用的供应商演员表是来自 java.util 包还是 Guava 包?
  3. 在将缓存设置为 setItems 方法之前,是否需要再次将缓存重新转换为列表?
  4. 对于 memoizeWithExpiration 方法,是否可以将上面的现有代码作为委托参数而不是空的供应商集合进行转置/移动,还是我们需要在 get() 方法中进行?将现有列表解析为委托是很棒的,但不是很确定。
0 投票
1 回答
1243 浏览

hibernate - Spring Data:休眠查询缓存不适用于派生查询

我正在尝试为 Spring Data 中由方法名称派生的查询设置 Hibernate 查询缓存,但查询缓存从未使用过,甚至似乎没有处于活动状态。

我使用带有 JCache 扩展的 Spring Boot 2.2.1、 Kotlin1.3.50和 Caffeine 作为我的底层 Hibernate 缓存。

我的存储库如下:

二级缓存处于活动状态且正常工作,并在库实体上正确设置:

摘自我的配置:

但是,在查询时libraryRepository.findAll(Sort.by("name")),始终会查询数据库。

日志中没有提到有关查询缓存的任何内容。

第一次调用(应该放在缓存中):

第二次调用(应该命中缓存):

0 投票
1 回答
1754 浏览

java - 如何创建没有最大值且不会过期的咖啡因缓存?

我已经实现了Caffeine如下缓存:

如何确保缓存没有最大大小并且不会过期?

0 投票
2 回答
1498 浏览

spring - Spring Cache:根据条件强制更新缓存

我有一个需要缓存的作业列表(按 id)。然而,在某些情况下,拥有最新版本的作业很重要,并且需要绕过缓存(强制更新)。发生这种情况时,应将新获取的作业放入缓存中。

我是这样实现的:

期望的行为:

  • getJob("123", false)=> 返回作业 v1(如果存在,则从缓存中获取)
  • getJob("123", true)=> 返回作业 v2(更新版本,从数据库中获取)
  • getJob("123", false)=> 返回作业 v2(更新版本,从缓存中获取

实际上,最后一次调用会getJob("123", false)返回作业v1,即陈旧版本。似乎第二次调用(强制更新)不会更新缓存中的值。

我怎样才能在这里实现正确的行为?

缓存配置(使用咖啡因):

0 投票
1 回答
692 浏览

java - 动态切换 Caffeine Cache 上的记录统计信息

我希望能够通过 REST 端点或 JMX 方法按需动态切换咖啡因缓存统计信息的记录

我们有一个大型应用程序,我们在其中使用多个咖啡因缓存实例。我们可以使用所有可能的性能升级,因此持续录制似乎是多余的。特别是如果 JavaDoc 说记录有性能成本。经过我的分析,我认为它没有直接支持。或者是吗?

我有 2 个统计目标,第一个是能够调整我们的缓存策略。确定我们的命中率糟糕的地方,或者我们实际上不需要缓存的地方。为了适应这种情况,我们可能会在打开录制的情况下进行临时发布,然后再进行最终发布。这意味着这个解决方案根本不是动态的。

第二个目标是使用它来确定系统故障的原因。在实时生产环境中诊断错误状态。为了保持我所有的理想要求,这必须是动态的。如果我不能更改缓存实例,我想我可以替换该实例。这会给系统带来巨大的时间负载,因为它基本上会清除所有缓存。

为了避免清除,我们可能会以某种方式将值廉价地传递给新实例,并切换统计记录。我还不知道如何,甚至可能。

所以我的问题是实现我的目标的最佳方式是什么?