【问题标题】:How should I structure this logic in Redis?我应该如何在 Redis 中构建这个逻辑?
【发布时间】:2012-08-16 08:38:41
【问题描述】:

我想跟踪用户在过去 24 小时内观看视频的次数。我说“视频”,因为用户可以观看多个视频。

这也意味着密钥将在 24 小时后过期。认为我的钥匙应该是这样的:

users/1/videos/4/count/12

该结构应包含用户 ID、视频 ID 和计数。随意提出更好的密钥结构。

我正在考虑使用set。还是我应该考虑更好的选择?也许是一个列表?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 redis


    【解决方案1】:

    为什么要在 24 小时后使密钥过期?您是只从午夜计算到午夜,还是从现在开始计算 24 小时前的观看次数?在第二种情况下,使密钥过期是错误的,因为如果您在 16:00 查看结果,您将只能获得最近 16 小时的结果,而不是您想要的 24 小时。

    我会用键保存Stringsvideo:ID:user:ID:hour

    示例:video:31245:user:15:16 的值为 2

    这告诉您 ID 为 15 的用户已从 16:00 to 16:59 观看 ID 为 31245 的视频2 次。

    如果您想要 24 小时的结果,您可以获取当前小时并获取前 24 小时的所有键并对值求和。

    那么最后每个密钥都应该在 24 小时内过期。

    ˙

    希望这对您有所帮助! :)

    【讨论】:

    • 我需要在密钥创建后的 24 小时内使用密钥。不是从深夜到午夜
    • 这正是我所描述的。您的解决方案无法捕获整个 24 小时。
    • 为什么不呢?我可以将expire at 设置为24.hours.from_now。不应该这样做吗?
    • 假设您开始计算此数据“users/1/videos/4/count/1”,24 小时后它看起来像这样“users/1/videos/4/count/12”然后它被删除。之后立即创建新条目,因为用户再次观看了视频“users/1/videos/4/count/1”,然后您请求该用户在 24 小时内观看视频的次数为 1。即不对吧?如果你想要你描述的功能,你不能像这样跟踪视图。
    • 顺便说一句,您的密钥“users/1/videos/4/count/12”看起来很奇怪?这里的关键是什么,什么是数据?如果这整件事是关键,那么数据应该是什么样的,你会在那里存储什么?
    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2022-12-14
    • 2021-05-25
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多