有时(当我执行压力测试时)存储在 memcache 中的对象已损坏(它缺少属性,当我尝试访问它时给我“NullPointerException”)。是否与不同 memcache 写入之间的错误同步有关?事实上,在我的代码的不同部分,我只是以这种方式更新存储在 Memcache 中的 UserAccount:
cache.put(tempUser.getKey(), tempUser);
..我尝试以这种方式检索:
if (cache.contains(key)) {
readObject = (T) cache.get(key);
return readObject;
}
与此检索相关,当我尝试(例如)检索时,我得到 NullPointerException:
readObject.getMyProperty()
我试图了解此功能(https://developers.google.com/appengine/docs/java/memcache/overview#Safely_Handling_Concurrent_Memcache_Updates),但它似乎没有很好的记录。我还在stackoverflow上查看了这些答案:
..但它似乎并不符合我的需求。最后,我只需要确保一个值很好地存储在缓存中,没有竞争条件可能影响其完整性的风险。
==================================================== ============================== 更新:我尝试更好地指定行为:我在这一行中得到“NullPointerException”:
if(readObject!=null && readObject.getMyProperty.equals("test"))
所以它不是(仅)完全为空,而只是一个属性。看来真的是坏掉了。除此之外,我知道我必须改进检索阶段!
==================================================== ===============================
新更新:我在 memcache 中找到了所有属性都等于 null 的对象,除了键之一