问题标签 [caffeine-cache]
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.
scala - 咖啡因:如何为默认值设置不同的过期时间
Scala 应用程序用例:
我们有一个基于 Scala 的模块,它从全局缓存(Redis)读取数据并将其保存到本地缓存(Scaffine)中。由于我们希望这些数据异步刷新,因此我们使用 LoadingCache 并将 refreshAfterWrite 持续时间设置为 2.second 的刷新窗口。
问题:
在本地缓存中设置值时,我们需要设置不同的过期时间,具体取决于 redis(全局缓存)中是否存在键。
例如 ,如果键不存在于全局缓存中,我们希望将相同的键保存在本地缓存中,默认值和刷新窗口设置为 5.minutes。如果全局缓存中存在键,我们希望将其存储在本地缓存中,并将实际值和刷新窗口设置为 30.minute。
示例代码
我看到许多可用于覆盖 expiryAfter 策略(expiryAfterWrite/Update/Access)的 custom.policy,但无法找到异步刷新数据的 refreshAterWrite 策略。任何帮助都将是可观的。
PS 我是在 Scala 上工作并探索咖啡因的新手。
java - 咖啡因缓存 application.properties 配置与 CacheManager 类配置
我目前正在学习咖啡因,总的来说我是 Spring 新手。我一直在尝试用咖啡因实现缓存;但是,我发现自己遇到了一些问题。
我见过两种配置咖啡因缓存的方法。
首先是一个Java类:
其次是在 application.properties 中:
我想问一下这两个有什么区别吗?我需要一个 class 和 application.properties 配置,还是只需要其中一个?此外,在 Java 类实现中,cacheManager 是仅适用于名称为“example”的缓存,还是适用于每个缓存?
非常感谢!
java - java.lang.IllegalArgumentException:找不到名为 ... 的缓存,用于 Builder
在现有项目中实现缓存(使用咖啡因缓存)时出现错误。
相同的代码适用于示例应用程序。我知道已经有人问过类似的问题,但对我都没有用。我已经使用这个例子实现了:https ://www.javadevjournal.com/spring-boot/spring-boot-with-caffeine-cache/
下面是代码片段: EventListner 类:
MyEventListener.java:
MySecurityServiceClient.java:
实现类DefaultMySecurityServiceClient.java 的接口:
}
应用程序属性
另外,我使用的是 Caffeine Cache Version = 2.8.5
Spring Boot 版本= 2.3.5.RELEASE
错误:
java.lang.IllegalArgumentException:找不到缓存名为 'userToken' 的 Builder [public org.springframework.http.ResponseEntity xx.xx.xx.xx.xx.DefaultMySecurityServiceClient.getUserToken()] 缓存 = [userToken] | 键='' | 密钥生成器='' | 缓存管理器='' | 缓存解析器='' | 条件='' | 除非='' | 同步='假'
caching - 根据时间戳条件删除 Caffeine 条目
有没有办法根据时间戳条件删除咖啡因条目?例如,在T1
我有以下条目
有时T2
我只更新K2
和K3
. (我不知道这两个条目是否都有确切的时间戳。K2
可能有T2
但K3
可能是T2 + some nanos
。但为了这个问题,让我们假设他们有)
现在我希望咖啡因使条目无效K1 -> V1
,因为T1 < T2
.
一种方法是遍历条目并检查它们的写入时间戳是否为 < T2
。收集此类密钥并最终调用invalidateKeys(keys)
。
也许有一种非迭代的方式?
java - CaffeineCacheManager() 构造函数需要 cacheName 吗?
我有一个 MultipleCacheManager 类,如下所示:
我是否需要在 CaffeieneCacheManager() 构造函数中实际传递我的缓存名称?只要@Cacheable
有财产@Cacheable(cacheName = "example1", cacheManager = "mainCacheManager")
就重要吗?缓存管理器在技术上已经连接到该名称。
scala - 如何在“Scala”中为 Caffeine LoadingCache 编写缓存加载器以使“refreshAfterWrite”正常工作
Scala 应用程序用例:
我们有一个基于 Scala 的模块,它从全局缓存(Redis)中读取数据并将其保存到本地缓存(Caffeine LoadingCache)中。由于我们希望这些数据异步刷新,我们使用 LoadingCache 并将 refreshAfterWrite 持续时间设置为 2.second 的刷新窗口。
问题: 不是问题,但需要有关以下代码的帮助,该代码给出警告并编译时错误
警告:对于build
方法,它给出警告为Implements member load in CacheLoader (com.github.benmanes.caffeine.cache)
编译时错误1: type arguments [Int,redisToCaffeine.DataObject] conform to the bounds of none of the overloaded alternatives of value build: [K1 <: Object, V1 <: Object](x$1: com.github.benmanes.caffeine.cache.CacheLoader[_ >: K1, V1])com.github.benmanes.caffeine.cache.LoadingCache[K1,V1] <and> [K1 <: Object, V1 <: Object]()com.github.benmanes.caffeine.cache.Cache[K1,V1] .build[Int, DataObject](key => loader(key))
编译时错误2: wrong number of type parameters for overloaded method value build with alternatives: [K1 <: Object, V1 <: Object](x$1: com.github.benmanes.caffeine.cache.CacheLoader[_ >: K1, V1])com.github.benmanes.caffeine.cache.LoadingCache[K1,V1] <and> [K1 <: Object, V1 <: Object]()com.github.benmanes.caffeine.cache.Cache[K1,V1] .build[Int, DataObject](key => loader(key))
代码:
我是 Scala 和 Caffeine 的新手,所以不确定我做错了什么;我尝试了这里和这里提到的不同方法来编写加载程序,但没有任何效果(主要是在 Java 中)。围绕 Scala 边界的少量研究在这里没有任何帮助。请帮忙。
java - 如何使用分组的 Caffeine Cache 或 ConcurrentHashMap?
我想为每个 userId 缓存以下数据实体映射对象。
作为想法之一,我考虑了 Caffeine 中的以下缓存。
但是,上面示例中的 userDataCache 不是线程安全的,因为它被定义为嵌套的 hashmap。
我准备了另一个想法来使它成为线程安全的。
此方法是线程安全的,因为它不使用嵌套的 hashmap。
但是,这种方法不允许我们定义一个 invalidate 方法来使每个 userId 的缓存失效。
如何以满足以下要求的方式使用 Caffeine Cache 或 ConcurrentHashMap?
- 缓存每个 userId 的数据映射
- 使每个 userId 的数据映射无效
- 使其成为线程安全的
java - 当您必须从数据中提供多个结果时,如何优化使用 Guava Cache?
我有一个缓存加载器,它缓存来自 API 的响应(以列表的形式)。现在我的函数不需要直接响应数据,所以我创建了一个提供者,它可以处理这些原始响应并充当一个预言机,它允许我发送所需的数据而不是整个列表。
我当前方法的问题是,对于每个这样的响应,提供者必须遍历整个列表,即使列表与以前相同;这使得每次调用的复杂性为 O(n) 而不是我想要的 O(1)。
我能想到的潜在解决方案
- 而是缓存处理过的数据。现在的问题是,在这种情况下我需要两个不同的缓存,并且每次刷新都会从 API 中不必要地获取相同的结果。
- 仅当缓存值已更改时才在提供程序中迭代我想这样做但我找不到知道缓存是否已更改值的方法,我所有的方法都需要传递数据,这将再次需要 O(n)时间。
任何人都可以提出解决此问题的好方法吗?
规则信息缓存加载器类
规则信息提供者
java - How to customize expireAfterWrite for concrete cache if I use cacheBuilder?
Based on this answer I try to use customized expireAfterWrite
for "customCache"
So my config look like this:
Then in codeBase I use:
"customCache"
And based on my experiments it keeps values on cache pnly 60 seconds by I expect 60 minutes.
How to achieve desired result ?
java - 咖啡因缓存在 expireAfterAccess/expireAfterWrite 之后不会被驱逐
我的配置:
测试代码:(连续读取缓存 3 次,读取间隔 45 秒)
实际结果:
预期结果:缓存在 30 秒后被驱逐:
我错了什么?
怎么修 ?