Guava LoadingCache - 如何处理后备存储中不存在的键

时间:2012-06-13 15:39:54

标签: java caching guava

我正在使用CacheBuilderLoadingCache来实现数据库数据的内存缓存。

假设客户端在缓存中查询后备存储中不存在的项目。我希望客户端知道没有找到指定密钥的数据。处理此问题的最佳方法是什么?

  • 在缓存中存储特殊值,表示“无数据”。
  • 不在缓存中存储任何内容并引发异常。
  • 其他想法?

1 个答案:

答案 0 :(得分:9)

我总是通过以下方式解决这个问题。

interface KeyValueService<K,V> {
    V get(K key);
}

class CachingKeyValueService<K,V> {
    Cache<K,Optional<V>> cache;
    V get(K key) {
        return cache.get(key).orNull();
    }

}

理想情况下,您可以将KeyValueService的界面更改为始终返回Optional,但有时这是不可能的。

您可以使用加权来快速驱逐所有Optional.ABSENT引用。