java - 咖啡因缓存 - 指定条目的到期时间
问题描述
我正在尝试进一步了解咖啡因缓存。我想知道是否有一种方法可以为缓存中填充的条目指定超时,但其余记录没有基于时间的到期。
本质上我希望有以下界面:
put(key, value, timeToExpiry)
// 输入具有指定 timeToExpiry 的键和值
put(key, value)
// 输入一个没有 timeToExpiry 的键值
我可以编写接口和管道,但我想了解如何为上述两个要求配置咖啡因。我也愿意拥有两个单独的咖啡因缓存实例。
解决方案
这可以通过使用自定义过期策略并利用无法到达的持续时间来完成。最长持续时间Long.MAX_VALUE
为 292 年(以纳秒为单位)。假设您的记录在(以及如果)过期时保留,那么您可以将缓存配置为,
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));
推荐阅读
- ruby-on-rails - Rails 为关联记录创建或更新
- botframework - Bot Framework 通过 UserID 将用户数据保存在数据库中
- c# - 以编程方式导出 Azure 模板
- deep-learning - 使用 LSTM 自动编码器预测罕见事件及其强度
- r - 如何使用 R 将 CSV 文件保存为 s3 存储桶上的 zip?
- react-native - react-native FlatList在滚动到最底部时卡住了
- file - 按年月汇总文件大小并在打印时包括按年总计
- javascript - Javascript if条件与子字符串
- javascript - 按键删除嵌套结构中的对象
- angular - 从路由树中的另一个组件获取数据