我正在写memcached很多关键/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3
我需要获取所有以PREFIX _
开头的键有可能吗?
答案 0 :(得分:22)
抱歉,但没有。 Memcached使用散列算法,在明显随机的位置分配密钥,因此这些密钥遍布各处。你必须扫描一切才能找到它们。
此外,您应该知道,根据设计,memcached可以随时以任何理由删除任何密钥。如果你把东西放进去,你应该知道你不能依赖它回来。这对于它的原始用例来说是绝对正常的,缓存可以减少数据库上的命中。但如果你想做一些更复杂的事情,这可能是一个严重的问题。
如果这些限制是个问题,我建议你改用Redis。它的行为与memcached非常相似,只不过它会保留数据并允许您存储复杂的数据结构。因此,对于您的用例,您可以在Redis中存储哈希值,然后稍后将整个哈希值拉出来。
答案 1 :(得分:5)
快速命令搜索是否存在特定密钥(密钥名称可以是" grep regex")
for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done
答案 2 :(得分:4)
虽然@btilly说memcached本身不这样做是正确的,你可以通过维护共享你的前缀的键索引来模拟它(非常有效),然后你可以获取匹配某个前缀的所有条目。
显然,这只适用于您提前选择的特定键,而不适用于任意数据,但如果您能够忍受这种限制,那么它非常适用。其中一个memcache开发人员有a good article on this subject。
答案 3 :(得分:3)
您可以使用命名空间并执行所需的操作。这是一个执行相同操作的PHP库。您可以为多个应用程序使用相同的Memcached。