【问题标题】:Dump memcache keys from GAE SDK Console?从 GAE SDK 控制台转储内存缓存密钥?
【发布时间】:2009-03-09 07:49:02
【问题描述】:

在“Memcache Viewer”中,有没有办法转储现有键的列表?当然,仅用于调试,不能用于任何脚本!

我问是因为 GAE SDK 似乎没有使用“真正的”memcache 服务器,所以我猜它是用 Python 模拟的(为简单起见,因为它只是一个开发服务器)。这意味着那里是带有键/值的某个地方的字典..

【问题讨论】:

    标签: python google-app-engine memcached


    【解决方案1】:

    人们经常在 memcached 列表中提出这个要求,有时带有相同类型的“以防万一我想环顾四周以调试某些东西”的情绪。

    处理这个问题的最好方法是知道你是如何生成你的密钥的,当你想知道为给定值存储了什么时,就去查找资料。

    如果您在调试会话范围内使用 memcached 执行的操作太多,请开始记录访问。

    但请记住——memcached 速度很快,因为它通常不允许这样的事情。社区服务器确实具有有限的功能来获取给定平板类中可用的密钥子集,但这可能不是您真正想要的,希望谷歌不会在他们的服务器中实现它。 :)

    【讨论】:

      【解决方案2】:

      没有。我也没有在 memcached 中找到这样的功能。

      考虑到这个问题,我发现这个限制是可以理解的——它需要保留一个包含所有相关问题的密钥注册表,例如密钥过期、失效,当然还有锁定。这样的系统不会像 memcache 预期的那样快。

      【讨论】:

      • GAE dev-server 中的 memcache 客户端是否真的连接到 memcache 服务器?快速查看代码,它几乎看起来像是用 Python 模拟的......?
      • 据我所知,它确实是 Google 自己的实现,可能基于,但肯定不是内存缓存。它使用了 memcache api,因为它很简单,而且做得很好。
      【解决方案3】:

      Memcache 的设计速度很快,并且没有令人信服的用例来支持此功能 这将证明与 memcached 的其余部分如此不一致的命令所需的开销是合理的。

      GAE SDK 正在模拟 memcached,因此它也不提供此功能。

      【讨论】:

      • 这是不正确的。 memcached 肯定会在内存中保存您所有的密钥、标志、过期、cas 标识符和其他一些东西。它不会执行任何无法在已知时间内执行的选项(O(1) - 例如列出所有键)。
      • 你说的很对,密钥被散列以确定使用哪个服务器,但原始密钥被传递给服务器,而不是像我最初那样的散列。
      【解决方案4】:

      我能想到的最简单的方法是在已知 ID 处维护一个 memcache 键,然后在每次插入新键时附加到它。这样,您只需查询单个键即可获取现有键的列表。

      【讨论】:

        【解决方案5】:

        这是一个可能的解决方法。我对 Google App Engine 不熟悉,但在常规的内存缓存服务器上,您可以通过 telnet 列出所有密钥,如下所示:

        telnet 127.0.0.1 11211
        stats items
        STAT items:7:number 5
        STAT items:7:age 88779
        STAT items:7:evicted 0
        STAT items:7:evicted_time 0
        STAT items:7:outofmemory 0
        STAT items:7:tailrepairs 0
        ... etc
        END
        stats cachedump 7 100
        ITEM __builtin__.str_is_browser_supported·user_agent_hash=5706b885fdad3f7049dfb39455dfa7ab10086d97 [269 b; 1298926467 s]
        END
        

        感谢Graham King's blog post 提供了这么好的小食谱。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-05
          • 2011-09-23
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-04
          相关资源
          最近更新 更多