开发者社区 问答 正文

如何自定义Caffeine的过期驱逐策略?

如何自定义Caffeine的过期驱逐策略?

展开
收起
冲冲冲c 2024-06-21 20:41:42 163 分享 版权
1 条回答
写回答
取消 提交回答
  • 你可以通过实现Expiry接口来自定义Caffeine的过期驱逐策略。该接口允许你为每个缓存项定义基于创建、更新或读取时的自定义过期时间。例如:

    LoadingCache<Key, Graph> graphs = Caffeine.newBuilder() 
    .expireAfter(new Expiry<Key, Graph>() { 
    public long expireAfterCreate(Key key, Graph graph, long currentTime) { 
    // 根据graph的创建日期计算过期时间 
    long seconds = graph.creationDate().plusHours(5) 
    .minus(System.currentTimeMillis(), TimeUnit.MILLISECONDS.toNanos(1)) 
    .toEpochSecond(); 
    return TimeUnit.SECONDS.toNanos(seconds); 
    } 
    // ... 其他方法,如expireAfterUpdate和expireAfterRead可以根据需要实现 
    }) 
    .build(key -> createExpensiveGraph(key));
    
    2024-06-21 21:15:55
    赞同 展开评论
问答地址: