【问题标题】:Read an entity(saved by Objectify) from memcache only, not from the disk仅从内存缓存中读取实体(由 Objectify 保存),而不是从磁盘中读取
【发布时间】:2018-02-05 14:26:13
【问题描述】:

我只想从 Memcache 中读取一个实体。我知道它被驱逐的可能性很高,但这对于这种情况并不重要,即使在执行此代码后它仍然存在于 Memcache 中。

这个实体是用 Objectify 保存的。当使用 namespace=ObjectifyCache, key=URL-safe-key, key-type=Java-String 进行搜索时,我可以在 Appengine 控制台的 Memcache 中看到它。

当我尝试使用本机方法获取它时,它返回 null。

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);

我在这里有referred 几个问题,但它并没有帮助,尽管它看起来很直截了当。我在这里遗漏了一些明显的东西吗?

【问题讨论】:

    标签: google-app-engine objectify


    【解决方案1】:

    我确实缺少明显的东西。正如@stickfigure 在此answersave()delete() 中指出的那样,Objectify 正在从缓存中清除条目,而load() 正在再次填充它。保存后我试图get()它。

    我可以用MemcacheService.Contains()的方法看看最近有没有保存,然后就可以正常加载了。

    这可能不会总是给出预期的结果,因为条目可以随时从缓存中删除,但在我的情况下,它将节省数百万次读取操作,其中Entity 出现在数据存储中的机会小于 1%。即使我因驱逐而错过它,也不会产生太大影响。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 1970-01-01
      • 2015-07-19
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多