问题标签 [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.
caffeine - com.github.benmanes.caffeine.cache.maximumsize(long maximumSize) 允许最大记录数达到最大记录数?
表示 maximumSize() 指定缓存可能包含的最大条目数。请注意,缓存可能会在超出此限制之前驱逐条目。
它会表现出与我们在 GuavaCache 中看到的相同的行为,因为默认 ConcurrencyLevel 为 4 ,因此最大计数远低于预期?
kotlin - 如何从 Kotlin 中的协程作用域获取返回值?
我正在使用 Caffeine 和 Kotlin 构建缓存。我有这样的事情:
因为我也在使用 Vertx,所以我知道它有一个事件循环,可以阻止并阻止我的应用程序。并runBlocking
给我带来了这个问题。所以我需要将其交换runBlocking
为其他一些 Vertx 资源,或者可能是GlobalScope.launch(vertx.dispacther())
. 然后我可以避免阻塞事件。问题是:我不知道我可以使用哪个 Vertx 资源,也不能使用,GlobalScope.launch
因为它返回的是 Job,而不是sendRequest
函数的返回值。有任何想法吗?Ps.:既然sendRequest
是暂停的乐趣,我只能从协程或其他暂停的乐趣中调用它:(
java - 咖啡因 Springboot 集成
我们正在使用咖啡因来替换当前 springboot 中默认的 ConcurrentHashMap 缓存。我们正在使用@Cacheable(cacheNames = { "..." })
注解动态创建缓存。
我正在尝试设置recordStats
属性,因为我们正在使用 springboot 执行器包来监控我们应用程序的各个方面。
我尝试设置spring.cache.caffeine.spec=expireAfterAccess=3600s,recordStats
,application.properties
但不起作用。
在课堂上设置它@Configure
也不起作用:
缓存统计信息不会出现在/actuator/cache/{caches}
端点或我们的 springboot-admin 服务器中。
从当前的 api 文档中,我发现:
字符串语法是一系列以逗号分隔的键或键值对,每个对应于一个 Caffeine 构建器方法。
...
持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别表示天、小时、分钟或秒。当前没有以毫秒、微秒或纳秒为单位请求过期的语法。
逗号和等号前后的空格将被忽略。键不能重复;在单个值中使用以下键对也是非法的:
以及相关点:
CaffeineSpec 不支持使用非值参数配置 Caffeine 方法。这些必须在代码中配置。
有没有可能完成我的任务?
谢谢
spring-boot - 使用 Caffeine Cache Springboot 缓存 Kafka 记录
我试图在间隔发布后的 3 分钟内缓存 Kafka 记录,因为它将过期并从缓存中删除。
每个使用在 springboot 中编写的 kafka 消费者获取的传入记录都需要首先在缓存中更新,然后如果它存在,如果它与缓存记录匹配,我需要丢弃下一个重复记录。
我尝试使用咖啡因缓存如下,
我的卡夫卡消费者如下,
我的缓存服务如下,
但是每次记录进入消费者时,我的缓存总是空的。它没有保存记录。
修改完成:
在完成建议后,我添加了如下配置文件,更多类型的研发删除了一些早期的逻辑,现在缓存按预期工作,但是当所有三个消费者都发送相同的记录时,重复检查失败。
`
`
现在我使用上面的缓存作为手动放置和获取。
caffeine - 咖啡因 AsyncLoadingCache 和雷鸣般的羊群
Caffeine AsyncLoadingCache 上的 .get() 是否通过延迟调用 .get() 的后续线程直到第一个线程完成来防止并发加载?或者它可以配置为在发生自填充负载请求时返回一个陈旧的值?
这样可以通过使用缓存来防止雷鸣般的羊群。
我看到的行为表明即使我正在使用缓存,也没有处理雷鸣般的牛群。
我像这样创建缓存:
并将其与 redis 中的 L2 缓存一起使用,如下所示(kotlin elvis 运算符):
我知道 getIfPresent 是并发的,但是最终调用 fetchFromRedis() / get() 的后续调用似乎有问题。我想将其fetchFromRedis
移入asyncLoad()
函数可能对负载容限更好。
java - Spring boot 2.2.4是否支持Caffeine AsyncCache实现
我刚刚开始使用咖啡因。我看到CaffeineCache
Spring Boot 中的类只支持Cache
Caffeine 的接口实现,如下面的代码所示,但我想知道 Spring Boot 是否支持实现AsyncCache
?谢谢
java - 咖啡因java缓存 - 如果refreshAfterWrite过期,如何先加载新值然后返回新值而不是旧值
我正在尝试使用咖啡因缓存并遇到问题:
假设缓存为空,我查询一个值,它使用加载器并将新值加载到缓存中,经过 2 天后,我查询相同的值,我首先获得OLD值,然后在单独的线程上启动刷新,如果可以加载,则加载新值。
我要存档的是-尝试先刷新并在可能的情况下先返回新值,如果出现问题,则仅返回旧值。我该如何存档?如何在没有变通方法的情况下实现简单、面向未来、整洁的实现?那将是真棒!
编辑:这个解决方案能正常工作吗?
spring - 配置 spring 咖啡因缓存管理器时遇到问题
我有一个 Spring Boot 项目,它用作其他项目的库(打包的 jar 文件)。我正在尝试配置咖啡因缓存,该缓存将在向服务发出请求后异步刷新。
pom.xml(包括):
我的配置类:
DAO 层(这里需要缓存):
DAO 层(这里也需要缓存):
运行此设置时,我遇到了错误堆栈:
不确定设置中缺少什么?
java - 咖啡因缓存——maximumSize 驱逐似乎还不算晚
我们遇到了咖啡因缓存的问题。我们将它的大小配置为 60,TTL 为 300 秒,如下所示:
现在,removingListener 的定义如下:
话虽如此,我们以这种方式插入缓存:
问题是有时我们会得到以下日志:
键 'key1' 添加了值 'value1'。当前估计缓存中 250 个键的大小
我们经常看到驱逐日志(监听器方法):
我们得到键“key1”和值“value1”的大小到期
一秒钟后,日志:
键 'key2' 添加了值 'value2'。当前估计缓存中 251 个键的大小
现在,我知道了“estimatedSize”的细微差别——它包括将要被驱逐的键,但问题是我们遇到了 Java 内存堆问题,这意味着实际删除发生得太晚而无法使用。
有解决办法吗?也许我们需要改用番石榴?
caching - Caffeine 中的替代缓存策略
在我的研究中,我只对其中的一些项目进行跟踪并访问 Caffeine 的缓存。因此,我收集了自己的命中/未命中统计数据,这与 Caffeine 的内置统计数据不同。这适用于 Caffeine 的默认策略 - Window-TinyLFU。但是,我想对其他缓存策略做同样的事情。
事实上,Caffeine 的模拟器建议了许多缓存策略,可以使用 application.conf 进行选择。文件。然而,AFAIK,模拟器的行为就像一个黑匣子——运行整个跟踪,制作自己的统计数据等。换句话说,虽然 Caffeine 的构建器允许定义一些参数(例如缓存的最大大小),但我没有找到任何在那里定义缓存策略的方法。
有没有办法做到这一点?我只对录取/驱逐感兴趣——(目前)我不使用基于时间的过期策略。提前非常感谢。