ホットデータをキャッシュするために 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
て、キャッシュを行わないようにしたいのです。しかし、グアバnull
はキーをキャッシュに保存し、取得すると例外をスローします。
com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader がキー shisoft に対して null を返しました。
null
値のキャッシュを回避するにはどうすればよいですか?