【问题标题】:Delete keys using regex in memcache在内存缓存中使用正则表达式删除键
【发布时间】:2017-12-06 12:57:35
【问题描述】:

我可以使用正则表达式一次性删除内存缓存中具有相似键名的多个键吗?

例如关键是:

key1
key2
key3

command [key.]

应该使用什么“命令”删除所有 key1、key2 和 key3?

【问题讨论】:

    标签: memcached


    【解决方案1】:

    Memcached 没有使用正则表达式删除键的选项。您可以删除每个键的缓存数据,或刷新整个缓存。

    如果您有类似的密钥,您可以查看官方 wiki 以获取 Memcached namspacing。

    例如而不是像这样保存 Memcached 中的密钥:

    key1
    key2
    key3
    

    您可以在命名空间中组织键,它们现在看起来像这样:

    key:<namespace_value>:1
    key:<namespace_value>:2
    key:<namespace_value>:3
    

    其中 namespace_value 是一些随机整数,您也可以将其保存在 Memcached 中,每个缓存区域(带有前缀 "key" )例如,如果您的缓存数据看起来像这样:

    <key>            <value>
    namespace:key       1234
    key:1234:1        value1
    key:1234:2        value2
    key:1234:3        value3
    

    现在,在您访问您的密钥之前,您将首先获取 namespace_value,并将其附加到您的密钥中。

    • 获取 namespace:key 的值(结果为 1234)
    • 在命名空间中获取 key1 的值;你的实际查找键是key:&lt;namespace_value&gt;:1 => key:1234:1

    现在要逐出所有前缀为 "key" 的键,增加 namespace_value 并将其保存回缓存中就足够了。现在您的命名空间值将是 1235,缓存数据将是:

    <key>            <value>
    namespace:key      1235
    key:1234:1        value1
    key:1234:2        value2
    key:1234:3        value3
    

    使用新命名空间值对 key1 的下一次提取将搜索 key:1235:1,这会让您错过。因此,您已经清除了所有密钥的缓存。

    【讨论】:

    • 感谢您的回答,但这似乎不是一个有前途的方法,并且在 memcache 中没有更好的方法来解决这个问题。我可以使用哪些其他缓存服务来轻松完成此类操作并且也没有在速度上不妥协?
    • 使用 Memcached,它只删除每个键或刷新所有数据。然后要实现不同的目标,就是以不同的方式组织缓存数据。您可以查看Redis,它可能更适合您的需求。有 (KEYS pattern)[redis.io/commands/keys] 命令,这可能是您正在寻找的东西,但请阅读 Warning 部分。不建议将其用于生产环境,因为它可能会影响您的性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2014-02-24
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多