使用 Redis 获取网站最近的访问者

Using Redis to get recent visitors at website

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

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

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

删除旧访问者