在“Memcache Viewer”中,有没有办法转储现有密钥的列表?当然,仅用于调试,不用于任何脚本!
我问是因为 GAE SDK 似乎没有使用“真正的”memcache 服务器,所以我猜它是用 Python 模拟的(为简单起见,因为它只是一个开发服务器)。这意味着有一个 dict有键/值的地方..
在“Memcache Viewer”中,有没有办法转储现有密钥的列表?当然,仅用于调试,不用于任何脚本!
我问是因为 GAE SDK 似乎没有使用“真正的”memcache 服务器,所以我猜它是用 Python 模拟的(为简单起见,因为它只是一个开发服务器)。这意味着有一个 dict有键/值的地方..
人们经常在 memcached 列表上要求这个,有时会带有相同类型的“以防万一我想环顾四周以调试某些东西”的情绪。
处理这个问题的最好方法是知道你是如何生成你的密钥的,当你想知道为给定值存储了什么时,就去查找资料。
如果您在调试会话范围内使用 memcached 做的事情太多,那么请开始记录访问。
但请记住——memcached 速度很快,因为它通常不允许这样的事情。社区服务器确实具有有限的功能来获取给定平板类中可用的密钥子集,但这可能不是您真正想要的,希望谷歌不会在他们的中实现它。:)
不,我也没有在 memcached 中找到这样的功能。
考虑到这个问题,我发现这个限制是可以理解的——它需要保留一个包含所有相关问题的密钥注册表,例如密钥过期、失效,当然还有锁定。这样的系统不会像 memcache 预期的那样快。
Memcache 的设计目的是快速,并且此功能没有令人信服的用例,这将证明与 memcached 的其余部分如此不一致的命令所需的开销是合理的。
GAE SDK 正在模拟 memcached,因此它也不提供此功能。
我能想到的最简单的方法是在已知 ID 处维护一个 memcache 密钥,然后在每次插入新密钥时附加到它。这样,您只需查询单个键即可获取现有键的列表。
这是一个可能的解决方法。我不熟悉 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 的博客文章,提供了这个不错的小食谱。