我写信给memcached的很多键/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3是否可以通过前缀获取/搜索Memcached密钥?
我需要得到所有以PREFIX_开始
是否有可能的钥匙?
我写信给memcached的很多键/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3是否可以通过前缀获取/搜索Memcached密钥?
我需要得到所有以PREFIX_开始
是否有可能的钥匙?
对不起,但没有。 Memcached使用散列算法,将密钥分布在明显随机的地方,因此这些密钥分散在各处。你必须扫描一切才能找到它们。
另外,您应该意识到,按设计,memcached可以随时因任何原因删除任何任何密钥。如果你把东西放进去,你应该意识到你不能依靠它回来。这对于它的原始用例来说是绝对正确的,一个缓存可以减少数据库中的命中。但如果你想要做一些更复杂的事情,这可能是一个严重的问题。
如果这些限制是一个问题,我建议您使用Redis代替。它的行为与memcached非常相似,只不过它会保留数据,并允许存储复杂的数据结构。因此,对于您的用例,您可以在Redis中存储散列,然后再将整个散列拖出。
您可以使用命名空间并执行您所需的操作。这是一个执行相同的PHP库。您可以为多个应用程序使用相同的Memcached。
虽然@btilly是说memcached的正确并没有这样做本身,您可以通过维护分享您的前缀键的索引,让您再取所有条目效仿(相当有效)匹配某个前缀。
很明显,这只适用于您事先选择的特定密钥,而不是任意数据,但如果您可以忍受这种限制,则这是非常可行的。其中一位memcache开发人员有a good article on this subject。
快速命令来搜索如果一个特定的键存在时(键名称可以是“grep的正则表达式”)
for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done