【问题标题】:Is it possible to get/search Memcached keys by a prefix?是否可以通过前缀获取/搜索 Memcached 键?
【发布时间】:2011-06-20 20:25:26
【问题描述】:

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

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

有可能吗?

【问题讨论】:

    标签: memcached enyim


    【解决方案1】:

    搜索特定键是否存在的快速命令(键名可以是“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】:

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

      https://github.com/vijayabose/n_memcached

      【讨论】:

        【解决方案3】:

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

        显然,这仅适用于您预先选择的特定键,而不适用于任意数据,但如果您能忍受该限制,它是非常可行的。有一位内存缓存开发人员a good article on this subject

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2014-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-02
            • 2017-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多