问题标签 [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 回答
579 浏览

caffeine - com.github.benmanes.caffeine.cache.maximumsize(long maximumSize) 允许最大记录数达到最大记录数?

https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/1.0.0/com/github/benmanes/caffeine/cache/Caffeine.html#maximumSize-long-

表示 maximumSize() 指定缓存可能包含的最大条目数。请注意,缓存可能会在超出此限制之前驱逐条目。

它会表现出与我们在 GuavaCache 中看到的相同的行为,因为默认 ConcurrencyLevel 为 4 ,因此最大计数远低于预期?

0 投票
0 回答
445 浏览

kotlin - 如何从 Kotlin 中的协程作用域获取返回值?

我正在使用 Caffeine 和 Kotlin 构建缓存。我有这样的事情:

因为我也在使用 Vertx,所以我知道它有一个事件循环,可以阻止并阻止我的应用程序。并runBlocking给我带来了这个问题。所以我需要将其交换runBlocking为其他一些 Vertx 资源,或者可能是GlobalScope.launch(vertx.dispacther()). 然后我可以避免阻塞事件。问题是:我不知道我可以使用哪个 Vertx 资源,也不能使用,GlobalScope.launch因为它返回的是 Job,而不是sendRequest函数的返回值。有任何想法吗?Ps.:既然sendRequest是暂停的乐趣,我只能从协程或其他暂停的乐趣中调用它:(

0 投票
2 回答
5020 浏览

java - 咖啡因 Springboot 集成

我们正在使用咖啡因来替换当前 springboot 中默认的 ConcurrentHashMap 缓存。我们正在使用@Cacheable(cacheNames = { "..." })注解动态创建缓存。

我正在尝试设置recordStats属性,因为我们正在使用 springboot 执行器包来监控我们应用程序的各个方面。

我尝试设置spring.cache.caffeine.spec=expireAfterAccess=3600s,recordStatsapplication.properties但不起作用。

在课堂上设置它@Configure也不起作用:

缓存统计信息不会出现在/actuator/cache/{caches}端点或我们的 springboot-admin 服务器中。

从当前的 api 文档中,我发现:

字符串语法是一系列以逗号分隔的键或键值对,每个对应于一个 Caffeine 构建器方法。

...

持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别表示天、小时、分钟或秒。当前没有以毫秒、微秒或纳秒为单位请求过期的语法。

逗号和等号前后的空格将被忽略。键不能重复;在单个值中使用以下键对也是非法的:

以及相关点:

CaffeineSpec 不支持使用非值参数配置 Caffeine 方法。这些必须在代码中配置。

有没有可能完成我的任务?

谢谢

0 投票
1 回答
623 浏览

spring-boot - 使用 Caffeine Cache Springboot 缓存 Kafka 记录

我试图在间隔发布后的 3 分钟内缓存 Kafka 记录,因为它将过期并从缓存中删除。

每个使用在 springboot 中编写的 kafka 消费者获取的传入记录都需要首先在缓存中更新,然后如果它存在,如果它与缓存记录匹配,我需要丢弃下一个重复记录。

我尝试使用咖啡因缓存如下,

我的卡夫卡消费者如下,

我的缓存服务如下,

但是每次记录进入消费者时,我的缓存总是空的。它没有保存记录。

修改完成:

在完成建议后,我添加了如下配置文件,更多类型的研发删除了一些早期的逻辑,现在缓存按预期工作,但是当所有三个消费者都发送相同的记录时,重复检查失败。

`

`

现在我使用上面的缓存作为手动放置和获取。

0 投票
1 回答
547 浏览

caffeine - 咖啡因 AsyncLoadingCache 和雷鸣般的羊群

Caffeine AsyncLoadingCache 上的 .get() 是否通过延迟调用 .get() 的后续线程直到第一个线程完成来防止并发加载?或者它可以配置为在发生自填充负载请求时返回一个陈旧的值?

这样可以通过使用缓存来防止雷鸣般的羊群。

我看到的行为表明即使我正在使用缓存,也没有处理雷鸣般的牛群。

我像这样创建缓存:

并将其与 redis 中的 L2 缓存一起使用,如下所示(kotlin elvis 运算符):

我知道 getIfPresent 是并发的,但是最终调用 fetchFromRedis() / get() 的后续调用似乎有问题。我想将其fetchFromRedis移入asyncLoad()函数可能对负载容限更好。

0 投票
0 回答
482 浏览

java - Spring boot 2.2.4是否支持Caffeine AsyncCache实现

我刚刚开始使用咖啡因。我看到CaffeineCacheSpring Boot 中的类只支持CacheCaffeine 的接口实现,如下面的代码所示,但我想知道 Spring Boot 是否支持实现AsyncCache?谢谢

0 投票
1 回答
2086 浏览

java - 咖啡因java缓存 - 如果refreshAfterWrite过期,如何先加载新值然后返回新值而不是旧值

我正在尝试使用咖啡因缓存并遇到问题:

假设缓存为空,我查询一个值,它使用加载器并将新值加载到缓存中,经过 2 天后,我查询相同的值,我首先获得OLD值,然后在单独的线程上启动刷新,如果可以加载,则加载新值。

我要存档的是-尝试先刷新并在可能的情况下先返回新值,如果出现问题,则仅返回旧值。我该如何存档?如何在没有变通方法的情况下实现简单、面向未来、整洁的实现?那将是真棒!

编辑:这个解决方案能正常工作吗?

0 投票
1 回答
1553 浏览

spring - 配置 spring 咖啡因缓存管理器时遇到问题

我有一个 Spring Boot 项目,它用作其他项目的库(打包的 jar 文件)。我正在尝试配置咖啡因缓存,该缓存将在向服务发出请求后异步刷新。

pom.xml(包括):

我的配置类:

DAO 层(这里需要缓存):

DAO 层(这里也需要缓存):

运行此设置时,我遇到了错误堆栈:

不确定设置中缺少什么?

0 投票
0 回答
1914 浏览

java - 咖啡因缓存——maximumSize 驱逐似乎还不算晚

我们遇到了咖啡因缓存的问题。我们将它的大小配置为 60,TTL 为 300 秒,如下所示:

现在,removingListener 的定义如下:

话虽如此,我们以这种方式插入缓存:

问题是有时我们会得到以下日志:

键 'key1' 添加了值 'value1'。当前估计缓存中 250 个键的大小

我们经常看到驱逐日志(监听器方法):

我们得到键“key1”和值“value1”的大小到期

一秒钟后,日志:

键 'key2' 添加了值 'value2'。当前估计缓存中 251 个键的大小

现在,我知道了“estimatedSize”的细微差别——它包括将要被驱逐的键,但问题是我们遇到了 Java 内存堆问题,这意味着实际删除发生得太晚而无法使用。

有解决办法吗?也许我们需要改用番石榴?

0 投票
1 回答
383 浏览

caching - Caffeine 中的替代缓存策略

在我的研究中,我只对其中的一些项目进行跟踪并访问 Caffeine 的缓存。因此,我收集了自己的命中/未命中统计数据,这与 Caffeine 的内置统计数据不同。这适用于 Caffeine 的默认策略 - Window-TinyLFU。但是,我想对其他缓存策略做同样的事情。

事实上,Caffeine 的模拟器建议了许多缓存策略,可以使用 application.conf 进行选择。文件。然而,AFAIK,模拟器的行为就像一个黑匣子——运行整个跟踪,制作自己的统计数据等。换句话说,虽然 Caffeine 的构建器允许定义一些参数(例如缓存的最大大小),但我没有找到任何在那里定义缓存策略的方法。

有没有办法做到这一点?我只对录取/驱逐感兴趣——(目前)我不使用基于时间的过期策略。提前非常感谢。