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

Zan*_*oni 15 memcached enyim

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

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

可能吗?

bti*_*lly 22

对不起,不行.Memcached使用散列算法,在明显随机的位置分配密钥,因此这些密钥遍布各处.你必须扫描一切才能找到它们.

此外,您应该知道,根据设计,memcached可以随时以任何理由删除任何密钥.如果你把东西放进去,你应该知道你不能依赖它回来.这对于它的原始用例来说是绝对正常的,缓存可以减少数据库上的命中.但如果你想做一些更复杂的事情,这可能是一个严重的问题.

如果这些限制是一个问题,我建议您使用Redis.它的行为与memcached非常相似,只不过它会保留数据并允许您存储复杂的数据结构.因此,对于您的用例,您可以在Redis中存储哈希值,然后将整个哈希值拉出来.


Syn*_*hro 6

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

显然,这仅适用于您预先选择的特定键,而不适用于任意数据,但如果您能忍受该限制,它就非常可行。有关于这个问题的好文章通过的内存缓存开发商之一。


Adi*_*tol 6

快速命令,用于搜索是否存在特定密钥(密钥名称可以是“ grep regex”)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done
Run Code Online (Sandbox Code Playgroud)