我正在使用CacheBuilder和LoadingCache来实现数据库数据的内存缓存。
假设客户端在缓存中查询后备存储中不存在的项目。我希望客户知道没有找到指定键的数据。处理此问题的最佳方法是什么?
- 在缓存中存储表示“无数据”的特殊值。
- 在缓存中不存储任何内容并引发异常。
- 其他想法?
我正在使用CacheBuilder和LoadingCache来实现数据库数据的内存缓存。
假设客户端在缓存中查询后备存储中不存在的项目。我希望客户知道没有找到指定键的数据。处理此问题的最佳方法是什么?
我总是通过以下方式解决这个问题。
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 引用。