【问题标题】:Using Redis to get recent visitors at website使用 Redis 获取网站的最近访问者
【发布时间】:2023-03-16 20:41:01
【问题描述】:

我需要网站上的最近访问者列表(在过去 N 分钟内打开页面的授权用户)。为此,我实现了一个处理所有页面调用并将一对(user_id,timestamp)发送到存储的代码。我不想每次都为它更新数据库表,所以我想为它使用缓存。我可以将python字典作为一个对象存储在缓存中,获取并更新它,但效率不高。我试图查看 Redis 数据结构,从一侧看 Hash 看起来不错(user_id -> 时间戳),但看起来我无法有效地使用 Redis 根据时间戳范围获取所有 uid。所以我需要获取所有键和值,迭代键并检查相关值。看起来 Redis 中没有从哈希中删除多个键的命令。是否可以使用 Redis 内置结构处理这种数据结构?谢谢!

【问题讨论】:

    标签: redis


    【解决方案1】:

    考虑使用排序集,而不是哈希。

    将您的 ID 保留为集合的成员,并使用时间戳(纪元)作为分数。使用Z[REV]RANGEBYSCORE 根据时间戳检索最近访问者,使用ZREMBYSCORE 删除旧访问者。

    【讨论】:

    • 谢谢,伊塔玛!我看到的唯一问题是时间戳的更新现在是 O(log(N)) 而不是 O(1) (HSET),但它对我的数据量并不是绝对关键,而代码现在更干净了。
    • 太棒了 :)(请记住,即使对于大型集合,日志仍然非常好)
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2013-11-29
    • 2020-09-14
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多