我正在使用CacheBuilder和LoadingCache来实现数据库数据的内存缓存。
假设客户端在缓存中查询后备存储中不存在的项目。我希望客户端知道没有找到指定密钥的数据。处理此问题的最佳方法是什么?
答案 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引用。