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