Google App Engine で memcache を使用したいのですが、次のように実装しました。
public static UserDictionary userDictionary = null;
private MemcacheService syncCache;
public static final Logger log = Logger.getLogger(UserDictionary.class.getName());
@SuppressWarnings(value = { "unchecked" })
private UserDictionary() {
syncCache = MemcacheServiceFactory.getMemcacheService();
syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));
}
public static UserDictionary getInstance() {
if(userDictionary == null) {
userDictionary = new UserDictionary();
}
return userDictionary;
}
public Entity getFromCache(String userId) {
return (Entity) syncCache.get(userId);
}
public void putInCache(String userId, Entity userEntity) {
syncCache.put(userId, userEntity,Expiration.byDeltaSeconds(999999999), MemcacheService.SetPolicy.SET_ALWAYS);
}
public boolean isCacheEmpty() {
long itemCount = syncCache.getStatistics().getItemCount();
return itemCount == 0L;
}
問題は、オブジェクトをキャッシュに入れてから取得しようとすると、get メソッドが null を返すことです。Google アプリ エンジンを調べたところ、memcache 内のオブジェクトであることがわかりました。キーは Java 文字列です。キーと値の両方が Serializable を実装します。
ヒット数: 0 ミス数: 31522 ヒット率: 0% アイテム数: 15 アイテム