22

我正在给 memcached 写很多键/值 -> PREFIX_KEY1、PREFIX_KEY2、PREFIX_KEY3

我需要获取所有以 PREFIX_ 开头的键

可能吗?

4

4 回答 4

26

对不起,不行。Memcached 使用散列算法将密钥分布在明显随机的位置,因此这些密钥分散在各处。您必须扫描所有内容才能找到它们。

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

如果这些限制是一个问题,我建议您改用 Redis。它的行为很像 memcached,除了它将持久化数据并允许您存储复杂的数据结构。因此,对于您的用例,您可以将哈希存储在 Redis 中,然后稍后将整个哈希提取出来。

于 2011-02-03T17:58:21.803 回答
7

用于搜索特定键是否存在的快速命令(键名可以是“grep regex”)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done
于 2016-04-20T08:16:06.930 回答
6

虽然@btilly 说 memcached 本身并没有这样做是正确的,但您可以通过维护共享前缀的键索引来模拟它(非常有效),然后允许您获取与某个前缀匹配的所有条目。

显然,这仅适用于您预先选择的特定键,而不适用于任意数据,但如果您能忍受这种限制,它是非常可行的。一位 memcache 开发人员有一篇关于这个主题的好文章。

于 2014-02-14T18:16:44.207 回答
4

您可以使用命名空间并执行您需要的操作。这是一个执行相同功能的 PHP 库。您可以为多个应用程序使用相同的 Memcached。

https://github.com/vijayabose/n_memcached

于 2012-10-18T08:12:45.687 回答