您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

我会用番石榴的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方法参考和构造函数注入来编写更清晰的代码,以不同的方式编写此代码

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();
    }
}
其他 2022/1/1 18:41:02 有511人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶