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

caffeine - 咖啡因读/写在高负载下需要更长的时间

这就是我在 Spring Boot 中构建咖啡因缓存的方式:

我使用以下同步方法:

当缓存负载很高时,我看到 get/put 时间增加(> 100ms),这让我想这些调用是否应该在 hystrix 之后,但我认为这将是一个过度的为内存搜索启动线程?

此外,我看到 GC 经常发生,我相信这可能会影响读/写时间。关于设置 GC 的任何建议/最佳实践或我可以采取的任何其他一般性建议来改善延迟?谢谢

0 投票
2 回答
334 浏览

caffeine - 咖啡因缓存 - 如何获取元素创建日期的信息

有没有办法从 CaffeineCache 访问元素的创建时间戳?种cache.get("x").getTimestamp()

0 投票
1 回答
685 浏览

caffeine - 咖啡因缓存,仅在放置成功时才执行过期元素的驱逐

我使用 Caffeine 缓存来缓存来自需要提供给休息端点的数据库的数据。因此缓存仅在数据库上的读取操作时更新。

在名义情况下,我希望缓存带头响应,直到数据不超过某个时间点(=>这种情况通过定义正确的过期选项就可以了)

如果数据库访问失败,即使缓存中的数据过期,我也想回退到缓存。此用例假设过期数据尚未删除。

我正在考虑的解决方案是制作Eviction of Items from the cache only after a successful PUT(成功的 PUT 意味着数据库工作正常)。那有可能吗?

0 投票
0 回答
1005 浏览

spring-boot - 带有 Spring Boot 的咖啡因缓存

我的 DAO 层采用了一种昂贵的方法,如下所示:

另一个作为

我的缓存配置类为:

我正在使用spring boot :: 2.2.6.RELEASE,我的pom包括:

我错过了什么吗?我想维护一个缓存“功能”和“用户故事”,并在调用 DAO 方法后异步更新它。

我收到以下错误:

无法加载配置类:com.packageName.CaffeineCacheConfig

引起:java.lang.NoClassDefFoundError: com/github/benmanes/caffeine/cache/Caffeine

引起:java.lang.ClassNotFoundException:com.github.benmanes.caffeine.cache.Caffeine

我发现这些报告与类似问题有关:CaffeineGit-1CaffeineGit-Related

0 投票
1 回答
1302 浏览

gradle - Gradle 构建问题:无法在咖啡因模拟器中获取未知属性“库”

我曾经使用 Eclipse 在我的 Caffeine's Simulator 分支上工作,并且该项目已编译并构建好。

突然,我在运行 Gradle 构建时开始收到以下错误:

我确实不理解 Caffeine 的 Simulator build.gradle 依赖项中的语法“implementation libraries.X”。

为了研究这个问题,我在 Eclipse 中生成了 MWE 项目,其 build.gradle 如下:

这个 MWE 给出了同样的错误。删除行 implementation libraries.xz 后,项目构建正常。

我猜“库”是在咖啡因某处定义的属性/变量,但找不到它。

0 投票
1 回答
1867 浏览

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

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

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

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

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

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

0 投票
1 回答
701 浏览

java - 如果在springboot的结果中合并/组合,缓存方法(使用咖啡因)是否可能返回部分响应?

我有一个用例,我配置了多个具有不同属性的缓存管理器,以及用单独的缓存名称注释的不同方法。缓存的方法是从 http 客户端异步检索数据,并缓存响应。在上述用例中,来自两个缓存方法的数据在返回结果之前被合并。有时,结果仅包含来自缓存方法之一的数据,并且在刷新时问题得到解决。我无法理解在什么情况下会出现问题?

正在使用的型号

缓存的方法类是:

调用方法:

异步 API 调用是否可能导致某种未命中,并且第二个缓存的结果集被添加到结果中并返回?(调用方法也是从控制器类异步调用的)

无论端点被触发的次数如何,我应该如何处理以获得一致的响应?

0 投票
1 回答
120 浏览

java - 在 Java 中缓存数据

我的实现非常简单,但它没有做应该做的事情。我正在使用这个缓存库:https ://github.com/ben-manes/caffeine

当我部署应用程序时:

Calls Controller Endpoint -> First time loads data to cache (works fine) -> Wait 10 seconds -> refresh data to cache -> wait 10 seconds -> ... over and over

第一次加载完美。问题是 10 秒后,数据的重新加载没有运行。

控制器

MyData 类

任何线索为什么refreshAfterWrite不每 10 秒运行一次?

谢谢

0 投票
1 回答
2630 浏览

java - 如何在咖啡因缓存中缓存空值

我正在使用咖啡因缓存来存储从外部系统接收到的数据。

结果,

咖啡因不会在缓存中保存空值。如何在咖啡因中存储空值?

0 投票
1 回答
1417 浏览

java - 咖啡因:当 AsyncLoader 无法刷新时使用陈旧的值

我想将我的缓存配置Caffeine为在加载程序无法刷新缓存时返回陈旧的结果。以下 Kotlin 代码演示了这种情况:

我希望此测试能够通过,但我收到以下错误:

我在 Kotlin 中编写了代码,但我认为这个问题与 Kotlin 协程无关。我想将 Caffeine 配置为在刷新时不抛出,而是在缓存中返回之前的结果。