【问题标题】:Add Redis expire to whole bunch of namespaced key?将 Redis 过期添加到整个命名空间键?
【发布时间】:2014-04-26 00:16:48
【问题描述】:

假设我有一个user + id命名空间键

  • 最后一条消息
  • isNice 属性

所以 - 它是这样的:

>lpush user:111:lastMessages a
>lpush user:111:lastMessages b
>lpush user:111:lastMessages c

好的

让我们添加 isNice 属性:

>set user:111:isNice 1

所以:让我们看看111 的所有键:

> keys user:111*

结果:

1) "user:111:isNice"
2) "user:111:lastMessages"

好的,但是

我想expire整个命名空间条目! (所以当超时时 - all 键应该立即使用。我不想开始管理每个命名空间键和剩余时间,因为并非所有道具都同时添加 - 但我希望所有道具同时死去……)

问题:

这是否意味着我必须为每个命名空间键条目设置过期时间?

如果不是,正确的做法是什么?

【问题讨论】:

  • 解决问题的常见方法是使用 hashes 而不是命名空间键。但是哈希不支持列表,所以它不适合你。

标签: redis


【解决方案1】:

是的,按照您的设置方式,这些都是单独的键。您可以将命名空间视为您对所有将访问 Redis 存储的人的理解

好的,伙计们,这就是交易。我们都将使用如下所示的键:

user:{user_id}:lastMessages

这样,我们都知道从哪里获取用户号 325 的最后一条消息。

但实际上,user:111:lastMessagesuser:111:isNice 之间没有任何共享。

修复

您可以做您所描述的事情的一种方法是使用哈希。您将创建一个其键为user:111 的哈希,然后添加字段lastMessagesisNice

> hset user:111 lastMessages "you are my friend!"
> hset user:111 isNice true
> expire user:111 1000

或者,一次,

> hmset user:111 lastMessages "you are my friend!" isNice true
> expire user:111 1000

这是page describing redis' data types。向下滚动到显示“哈希”的位置以了解更多信息。

编辑

啊,我没注意到你在使用列表。

如果您没有太多消息(例如 20 条以下),您可以将它们序列化为 JSON 并将它们存储为一个字符串。不过,这不是一个很好的解决方案。

最简洁的方法可能就是设置两个过期时间。

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多