Я использую guava для кэширования горячих данных. Когда данных не существует в кеше, я должен получить его из базы данных следующим образом.
public final static LoadingCache<ObjectId, User> UID2UCache = CacheBuilder.newBuilder()
//.maximumSize(2000)
.weakKeys()
.weakValues()
.expireAfterAccess(10, TimeUnit.MINUTES)
.build(
new CacheLoader<ObjectId, User>() {
@Override
public User load(ObjectId k) throws Exception {
User u = DataLoader.datastore.find(User.class).field("_id").equal(k).get();
return u;
}
});
Моя проблема в том, что данные не существуют в базе данных, я бы предпочел вернуть null и не выполнять кеширование. Но guava просто сохраняет нуль с ключом в кеше и бросает исключение, когда я его получаю
com.google.common.cache.CacheLoader $InvalidCacheLoadException: CacheLoader вернул значение null для ключа shisoft.
Итак, как избежать кеширования нулевых значений?