在固定的超时时间内缓存单个对象的最佳方法是什么?

阿列克谢·扎哈罗夫(Alexey Zakharov):

Google Guava具有CacheBuilder,它允许使用到期密钥创建ConcurrentHash,从而允许在固定的平局之后删除条目。但是,我只需要缓存某些特定类型的实例。

使用Google Guava在固定的超时时间内缓存单个对象的最佳方法是什么?

艾蒂安·尼芙(Etienne Neveu):

我会用番石榴的Suppliers.memoizeWithExpiration(供应商代表,持续时间长,TimeUnit单位)

public class JdkVersionService {

    @Inject
    private JdkVersionWebService jdkVersionWebService;

    // No need to check too often. Once a year will be good :) 
    private final Supplier<JdkVersion> latestJdkVersionCache
            = Suppliers.memoizeWithExpiration(jdkVersionSupplier(), 365, TimeUnit.DAYS);


    public JdkVersion getLatestJdkVersion() {
        return latestJdkVersionCache.get();
    }

    private Supplier<JdkVersion> jdkVersionSupplier() {
        return new Supplier<JdkVersion>() {
            public JdkVersion get() {
                return jdkVersionWebService.checkLatestJdkVersion();
            }
        };
    }
}

用JDK 8更新

今天,我将使用JDK 8方法参考和构造函数注入来编写更清晰的代码,以不同的方式编写此代码:

import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.google.common.base.Suppliers;

@Service
public class JdkVersionService {

    private final Supplier<JdkVersion> latestJdkVersionCache;

    @Inject
    public JdkVersionService(JdkVersionWebService jdkVersionWebService) {
        this.latestJdkVersionCache = Suppliers.memoizeWithExpiration(
                jdkVersionWebService::checkLatestJdkVersion,
                365, TimeUnit.DAYS
        );
    }

    public JdkVersion getLatestJdkVersion() {
        return latestJdkVersionCache.get();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在给定的超时时间内等待条件

Spring Integration Java DSL HTTP超时时间内未收到回复

无法在超时时间内连接到Zookeeper服务器:10000

Azure BlobWriteStream客户端无法在指定的超时时间内完成操作

TimeoutException:Angular CLI进程未在0秒的超时时间内开始侦听请求

如何确定哪个Jest测试在超时时间内无法运行?

为什么要在固定时间内完成对数组中任何单个元素的访问(O(1))?

以后在准确的持续时间内安排许多任务的正确方法是什么?

在一定时间内运行循环的最佳方法

量角器/ Jasmine2-在指定的超时时间内未调用异步回调

如果程序在给定的超时时间内未产生任何输出,该如何终止该程序?

Karma Jasmine-在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时时间内未调用异步回调

Raspberry Gammu在指定的超时时间内没有响应。手机可能未连接

“未能在超时时间内找到libpython。” 尝试在不带有pyflame的容器中分析.py文件时

在Rails中设置固定对象关系的最佳方法是什么

Spring Security中会话超时时,处理请求中发现的无效CSRF令牌的最佳方法是什么

Java中实现需要花费固定时间才能完成的可调用对象的最佳方法是什么

什么是时间内存分配?

无法在超时时间内发送实例化事务和获取通知。未定义[fabric1.0 k8s]

在一段时间内显示UIView并在一段时间内隐藏它的最佳方法

如何在固定的时间内使用javascript函数?

在固定时间内接收多个输入

如何在固定时间内返回下标?

在固定的时间内找到元素的索引 O(1)

如何在固定时间内更改按钮的backColor?

什么是“信号灯超时时间”?

机器学习:合理时间内的最佳参数值

返回计算时间的最佳方法是什么?

支持在O(1)时间内执行Min,Max操作的队列的正确数据结构是什么?