我想在谷歌应用引擎中使用内存缓存,我实现如下:
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;
}
问题是,在我将一个Object放入缓存然后我尝试获取它之后,get方法返回null。我查看了我的谷歌应用引擎,它显示这是memcache中的一个对象。键是一个java字符串。 key和value都实现了Serializable。
命中数:0 小姐数:31522 命中率:0% 项目数:15项