6

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

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

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

1 回答 1

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 引用。

于 2012-06-14T07:44:31.680 回答