首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caffeine Cache -指定条目的过期时间

Caffeine Cache -指定条目的过期时间
EN

Stack Overflow用户
提问于 2020-05-11 10:31:11
回答 1查看 1.5K关注 0票数 2

我正在努力加深我对caffeine cache的理解。我想知道是否有一种方法可以为缓存中填充的条目指定超时,但对于其余记录没有基于时间的过期。

从本质上讲,我希望有以下接口:

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

put(key, value) //输入不带timeToExpiry的键值

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 10:48:15

这可以通过使用自定义过期策略并利用不可达的持续时间来实现。最大持续时间为Long.MAX_VALUE,即292年,单位为纳秒。假设您的记录在何时(如果)过期,那么您可以将缓存配置为,

代码语言:javascript
复制
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
    .expireAfter(new Expiry<Key, Graph>() {
      public long expireAfterCreate(Key key, Graph graph, long currentTime) {
        if (graph.getExpiresOn() == null) {
          return Long.MAX_VALUE;
        }
        long seconds = graph.getExpiresOn()
            .minus(System.currentTimeMillis(), MILLIS)
            .toEpochSecond();
        return TimeUnit.SECONDS.toNanos(seconds);
      }
      public long expireAfterUpdate(Key key, Graph graph, 
          long currentTime, long currentDuration) {
        return currentDuration;
      }
      public long expireAfterRead(Key key, Graph graph,
          long currentTime, long currentDuration) {
        return currentDuration;
      }
    })
    .build(key -> createExpensiveGraph(key));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61721386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档