仅从内存缓存中读取实体(由 Objectify 保存),而不是从磁盘中读取
Read an entity(saved by Objectify) from memcache only, not from the disk
我只想从 Memcache 中读取一个实体。我知道它被驱逐的可能性很高,但对于这种情况来说并不那么重要,即使在执行此代码后它仍存在于 Memcache 中。
这个实体是用 Objectify 保存的。当使用 namespace=ObjectifyCache, key=URL-safe-key, key-type=Java-String.
搜索时,我可以在 Appengine 控制台的 Memcache 中看到它
当我尝试使用本机方法获取它时,它 returns 为空。
MemcacheService cache = MemcacheServiceFactory.getMemcacheService(ObjectifyFactory.MEMCACHE_NAMESPACE);
cache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));
Object object = cache.get(KeyFactory.createKeyString("key", "name"));
if(object == null) {
log(Level.WARNING, "null returned from memcache, " + KeyFactory.createKeyString("key", "name"));
return;
}
MyPojo pojo = ofy().load().fromEntity((Entity) object);
我在这里有 几个问题,但它没有帮助,尽管它看起来很直截了当。我在这里遗漏了一些明显的东西吗?
我确实遗漏了明显的东西。正如@stickfigure 在此 中指出的那样,save()
和 delete()
通过 Objectify 正在清除缓存中的条目,而 load()
正在再次填充它。我试图在保存后立即 get()
它。
我可以用MemcacheService.Contains()
的方法看看是不是最近保存的,然后就可以正常加载了。
这可能不会总是给出预期的结果,因为可以随时从缓存中删除条目,但在我的例子中,它将节省数百万次读取操作,其中 Entity
出现在数据存储中的机会小于 1%。即使我因驱逐而错过它,也不会有太大影响。
我只想从 Memcache 中读取一个实体。我知道它被驱逐的可能性很高,但对于这种情况来说并不那么重要,即使在执行此代码后它仍存在于 Memcache 中。
这个实体是用 Objectify 保存的。当使用 namespace=ObjectifyCache, key=URL-safe-key, key-type=Java-String.
搜索时,我可以在 Appengine 控制台的 Memcache 中看到它当我尝试使用本机方法获取它时,它 returns 为空。
MemcacheService cache = MemcacheServiceFactory.getMemcacheService(ObjectifyFactory.MEMCACHE_NAMESPACE);
cache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));
Object object = cache.get(KeyFactory.createKeyString("key", "name"));
if(object == null) {
log(Level.WARNING, "null returned from memcache, " + KeyFactory.createKeyString("key", "name"));
return;
}
MyPojo pojo = ofy().load().fromEntity((Entity) object);
我在这里有
我确实遗漏了明显的东西。正如@stickfigure 在此 save()
和 delete()
通过 Objectify 正在清除缓存中的条目,而 load()
正在再次填充它。我试图在保存后立即 get()
它。
我可以用MemcacheService.Contains()
的方法看看是不是最近保存的,然后就可以正常加载了。
这可能不会总是给出预期的结果,因为可以随时从缓存中删除条目,但在我的例子中,它将节省数百万次读取操作,其中 Entity
出现在数据存储中的机会小于 1%。即使我因驱逐而错过它,也不会有太大影响。