我正在给 memcached 写很多键/值 -> PREFIX_KEY1、PREFIX_KEY2、PREFIX_KEY3
我需要获取所有以 PREFIX_ 开头的键
可能吗?
对不起,不行。Memcached 使用散列算法将密钥分布在明显随机的位置,因此这些密钥分散在各处。您必须扫描所有内容才能找到它们。
此外,您应该知道,按照设计,memcached 可以出于任何原因随时删除任何任何键。如果你把东西放进去,你应该意识到你不能依赖它回来。这对于它的原始用例来说绝对没问题,一个缓存来减少对数据库的命中。但如果你想用它做一些更复杂的事情,这可能是一个严重的问题。
如果这些限制是一个问题,我建议您改用 Redis。它的行为很像 memcached,除了它将持久化数据并允许您存储复杂的数据结构。因此,对于您的用例,您可以将哈希存储在 Redis 中,然后稍后将整个哈希提取出来。
用于搜索特定键是否存在的快速命令(键名可以是“grep regex”)
for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done
虽然@btilly 说 memcached 本身并没有这样做是正确的,但您可以通过维护共享前缀的键索引来模拟它(非常有效),然后允许您获取与某个前缀匹配的所有条目。
显然,这仅适用于您预先选择的特定键,而不适用于任意数据,但如果您能忍受这种限制,它是非常可行的。一位 memcache 开发人员有一篇关于这个主题的好文章。
您可以使用命名空间并执行您需要的操作。这是一个执行相同功能的 PHP 库。您可以为多个应用程序使用相同的 Memcached。