2011-02-03 78 views

回答

18

对不起,但没有。 Memcached使用散列算法,将密钥分布在明显随机的地方,因此这些密钥分散在各处。你必须扫描一切才能找到它们。

另外,您应该意识到,按设计,memcached可以随时因任何原因删除任何任何密钥。如果你把东西放进去,你应该意识到你不能依靠它回来。这对于它的原始用例来说是绝对正确的,一个缓存可以减少数据库中的命中。但如果你想要做一些更复杂的事情,这可能是一个严重的问题。

如果这些限制是一个问题,我建议您使用Redis代替。它的行为与memcached非常相似,只不过它会保留数据,并允许存储复杂的数据结构。因此,对于您的用例,您可以在Redis中存储散列,然后再将整个散列拖出。

4

虽然@btilly是说memcached的正确并没有这样做本身,您可以通过维护分享您的前缀键的索引,让您再取所有条目效仿(相当有效)匹配某个前缀。

很明显,这只适用于您事先选择的特定密钥,而不是任意数据,但如果您可以忍受这种限制,则这是非常可行的。其中一位memcache开发人员有a good article on this subject

3

快速命令来搜索如果一个特定的键存在时(键名称可以是“grep的正则表达式”)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done 
  • 基础上,讨论; | 'ANOTHERPREFIX * APREFIX * \' 从1板坯40
  • 不要错过grep的一部分
  • 相关问题