使用 Redis HyperLogLog 对每页过去 60 分钟内的唯一用户进行计数

Ben*_*Ben 2 algorithm redis hyperloglog

I\xe2\x80\x99m 设计一种算法,基于 60 分钟的滑动比例来计算一组页面上的唯一用户数

\n

因此,它需要找到访问特定页面的唯一 IP(或令牌),并将过去 60 分钟内的点击次数总计起来

\n

我需要它在规模上非常快(主要是为了写作,但阅读是一个额外的好处)。每个页面可以有 10,000 个用户乘以 1000 个页面。

\n

我的研究表明我将 Redis 与 HyperLogLog 结合使用

\n

我\xe2\x80\x99m 来自 Memcache 背景,刚接触 Redis。有人能给我任何指点吗?

\n

谢谢

\n

Ita*_*ber 6

实现此目的的一种方法是为每个页面/页面集保留一个具有微小分辨率的 HLL 密钥。例如,如果我们正在跟踪“index.html”并且当前时间戳为 0,则可以通过以下方式跟踪 ID 为“abc”的访问者:

PFADD index.html:0 abc
Run Code Online (Sandbox Code Playgroud)

一旦一分钟过去 - 即时间戳 1 为简单起见 - 诸如“def”之类的访问者将被添加到下一个键:

PFADD index.html:1 def
Run Code Online (Sandbox Code Playgroud)

等等。要计算过去 60 分钟内的唯一访问者数量,假设当前时间戳为 100,您需要调用该PFCOUNT命令并向其提供所有这 60 个键的名称,例如:

PFCOUNT index.html:100 index.html:99 ... index.html:41
Run Code Online (Sandbox Code Playgroud)

注意:如果您希望驱逐“旧”计数,请EXPIRE在每次调用 后调用PFADD