是否可以通过前缀获取/搜索Memcached密钥?

时间:2011-02-03 17:44:39

标签: memcached enyim

我正在写memcached很多关键/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3

我需要获取所有以PREFIX _

开头的键

有可能吗?

4 个答案:

答案 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。

https://github.com/vijayabose/n_memcached