【问题标题】:Query random but unread keys the Redis wayRedis方式查询随机但未读的key
【发布时间】:2014-10-27 21:35:19
【问题描述】:

我有数千条消息,每条消息都像属性列表(文本、主题、日期等)一样存储在一个单独的键中:msg:1001msg:1002 等...

还有一个键入为 messages 的列表,其中包含所有现有消息的 ID:1001,1002,1003...

现在我需要得到 10 条随机消息。

但是,我只需要那些未被用户标记的消息(有点未读)。

每个用户都有一个哈希,键入为flags:USERID = 1001=red,1005=blue,1010=red,...

目前,我必须在我的应用程序中保存完整的消息列表以及当前登录的所有用户的所有标志,并手动进行所有数学运算(在 JavaScript 中)。

有没有办法以Redis的方式进行这样的查询,而不复制应用端的所有数据?

【问题讨论】:

    标签: redis


    【解决方案1】:

    您的问题是space–time tradeoff 的一个示例。一方面,您说您不想在系统中保留未标记消息的列表,但我猜您也希望保持应用程序相对较快。因此,我建议放弃一些空间并保留一组未标记的消息。

    在您的系统中创建消息后,将它们添加到messages (SADD messages <messageid>) 和messages_unflagged (SADD messages_unflagged <messageid>)。在用户将标志添加到消息后,从未标记集 (SREM messages_unflagged <messageid>) 中删除该消息。当您需要 10 条随机的、未标记的消息时,您可以在恒定时间内获取它们的 ID (SRANDMEMBER messages_unflagged 10)。

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 2018-05-05
      • 2020-12-19
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多