【问题标题】:deleting and entity through google app engine's datastore viewer does not remove the entity from the memcache通过谷歌应用引擎的数据存储查看器删除和实体不会从内存缓存中删除实体
【发布时间】:2012-01-04 16:51:38
【问题描述】:

我注意到这种导致连续获取成功的行为。

其他人见过吗?

【问题讨论】:

  • 为什么数据存储操作会影响内存缓存?
  • 你为什么不手动做 memcache.flush_all() ?
  • 当有人从管理控制台删除条目时,谷歌管理界面也应该执行 memcache 删除。这会导致不一致的状态。将提交错误...
  • 旧控制台有一个方便的复选框,可让您清除某些实体的内存缓存。我还没有通过 memcache 控制台进行管理。真的很烦人,我同意,重建整个内存缓存要花钱,我有将近 2GB 的命中率或更高的命中率
  • 你应该添加一些细节。第一个假设是实体在内存缓存中,例如这是最近要求的。接下来,您将其从数据存储查看器中在线删除。现在,该对象仍在内存缓存中,因此应用程序代码将获取它。对我来说,我在通过数据存储查看器更新实体时遇到了这个问题。等待几分钟也没有解决它!解决方案是使用 memcache 查看器在线刷新缓存,但我仍然对需要这样做有点不舒服......

标签: google-app-engine memcached


【解决方案1】:

我找到了一种从内存缓存中删除单个实体的方法,虽然很痛苦,但它确实有效。 现在,我使用 Java 和 Objectify,但我希望你会发现这对你有用,无论你使用什么环境和语言。

  1. 转到您的项目的页面https://console.cloud.google.com/appengine/memcache
  2. 在命名空间下输入值“ObjectifyCache”,或您使用的任何命名空间。
  3. 在键类型下,选择 Java 字符串
  4. 这是一个棘手的问题。在密钥下,您必须输入“URL 安全密钥”,您可以在实体的数据存储区编辑页面中找到 (https://console.cloud.google.com/datastore/entities/edit)
  5. 单击查找,希望实体会出现。
  6. 选中该框,然后单击“删除”

现在你再次点击查找,什么都不会出现。

【讨论】:

    【解决方案2】:

    如果您使用的是高复制数据存储,删除后立即获取可能会成功并提取过时的结果。每个操作的结果最多需要几秒钟才能出现在其他操作的结果中。

    Memcache 独立于数据存储运行。 Objectify 等一些库将它们连接起来。如果您使用 Objectify 缓存实体并从 Objectify 外部删除某些内容(例如数据查看器),则您必须自己更新缓存。这种情况偶尔会发生在我身上,我只是擦除了整个内存缓存。

    您必须找到一种方法来处理这种行为。例如,最简单(昂贵且非常慢)的方法就是在执行每个数据存储操作后等待十秒钟。更好的方法可能会使用缓存来返回新存储或删除的实体。

    【讨论】:

    • 我说的是管理控制台中的数据存储查看器,请阅读问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2022-01-26
    相关资源
    最近更新 更多