Java 一个只使用Google Guava的缓存系统的优雅实现,允许空值以不同于非空值的过期时间进行缓存?

Java 一个只使用Google Guava的缓存系统的优雅实现,允许空值以不同于非空值的过期时间进行缓存?,java,caching,guava,Java,Caching,Guava,以下是我的设置: private final LoadingCache<String, Optional<SampleInfo>> infoCache; private final LoadingCache<String, Optional<SampleInfo>> nullInfoCache; this.infoCache = CacheBuilder.newBuilder()

以下是我的设置:


    private final LoadingCache<String, Optional<SampleInfo>> infoCache;
    private final LoadingCache<String, Optional<SampleInfo>> nullInfoCache;

        this.infoCache = CacheBuilder.newBuilder()
                .expireAfterWrite(CACHE_EXPIRY_HOURS, TimeUnit.HOURS)
                .build(new CacheLoader<String, Optional<SampleInfo>>() {

                    @Override
                    public Optional<SampleInfo> load(final String key) throws Exception {
                        return service.api(key);
                    }
                });

        this.nullInfoCache = CacheBuilder.newBuilder()
                .expireAfterWrite(NULL_CACHE_EXPIRY_SECONDS, TimeUnit.SECONDS)
                .build(new CacheLoader<String, Optional<SampleInfo>>() {

                    @Override
                    public Optional<SampleInfo> load(String key) throws Exception {
                        return service.api(key);
                    }
                });


这不是很优雅。我怎样才能让它变得更好?我不希望使用任何特殊的缓存库。我也不能完全不缓存空值。它们只需要缓存更短的时间

也许可以将它们都封装在一个包装中?使用番石榴的继任者,以及一个自定义的
expireAfter(expire)
,根据
可选的
存在/不存在来计算不同的持续时间。你能详细说明一下@xtratic吗?
           optSampleInfo = nullInfoCache.getIfPresent(sampleId);
            if (optSampleInfo == null || !optSampleInfo.isPresent()) {
                optSampleInfo = infoCache.get(sampleId);
                if (!optSampleInfo.isPresent()) {
                    nullInfoCache.put(sampleId, optSampleInfo);
                    infoCache.invalidate(sampleId);
                }
            }