相关疑难解决方法(0)

Caffeine Expiry 中如何设置多个过期标准?

我正在使用 Caffeine v2.8.5,我想创建一个具有可变到期时间的缓存,基于:

  • 值的创建/更新以及
  • 该值的最后一次访问(读取)。

无论先发生什么都应该触发该条目的删除。


缓存将成为三层值解析的一部分:

  1. 密钥存在于咖啡因缓存中
    • 使用这个值
    • 刷新访问/读取过期
  2. 密钥存在于 Redis 数据库中
  3. 该密钥既不存在于内部缓存也不存在于 Redis 中
    • 从外部 REST API 请求值
    • 将此值存储在 Redis 数据库中,固定期限为 30 天
    • 将此值存储在 Caffeine 缓存中,固定期限为 30 天

Redis用作全局缓存,以便多个应用程序/实例可以共享缓存数据,但这种解析经常发生,以至于它不能用于每个请求,因此需要另一个缓存层。

根据请求时间,请求的数据具有不同的 TTL。因此,虽然当我们请求 REST API 时过期时间可能是固定的,并且过期时间是在 Redis 中设置的,但在 Caffeine 中该时间将是动态的,因为过期时间基于 Redis 密钥的剩余 TTL。

情况 (2) 和 (3) 已经在我的 Caffeine 缓存的 CacheLoader 中得到解决(我在通读模式下使用缓存)。为了控制过期,我已经发现,我必须使用高级 Expiry API,并且我还研究了类似的问题,例如(Specify expiry for an Entry)(Expire cached value after create time)。所以我为我的键想出了一个包装对象,如下所示:

import lombok.Value;
import org.jetbrains.annotations.NotNull;
import …
Run Code Online (Sandbox Code Playgroud)

java caching redis caffeine

3
推荐指数
1
解决办法
3072
查看次数

标签 统计

caching ×1

caffeine ×1

java ×1

redis ×1