我正在设计一个算法,以60分钟的滑动比例计算一组页面上的唯一用户
因此,它需要找到唯一的IP(或令牌)已经击中了一个特定的页面,并合计这些点击在过去60分钟
我需要这是非常快的规模(主要是写,但阅读是一个奖金)。我们可以用每页10000个用户乘以1000个页面。
我的研究表明我将redis与hyperloglog结合使用
我是从memcache背景来redis的新手。谁能给我指点一下吗?
谢谢
我正在设计一个算法,以60分钟的滑动比例计算一组页面上的唯一用户
因此,它需要找到唯一的IP(或令牌)已经击中了一个特定的页面,并合计这些点击在过去60分钟
我需要这是非常快的规模(主要是写,但阅读是一个奖金)。我们可以用每页10000个用户乘以1000个页面。
我的研究表明我将redis与hyperloglog结合使用
我是从memcache背景来redis的新手。谁能给我指点一下吗?
谢谢
2条答案
按热度按时间ny6fqffe1#
你不能在一个单一的时间间隔
HyperLogLog
钥匙。排序集可以是一个选项;
您可以将用户添加到排序集,作为他们的进入日期作为分数,将他们的用户id作为值
ZADD
.你可以用
ZCOUNT
获取该时间间隔内唯一用户的总数。例如,我使用小数字作为时间戳。当你使用
ZCOUNT
,您将定义MIN
as(当前时间-(60*60))和MAX
作为inf
,因此需要(现在-3600秒)到(现在)。这种方法的缺点之一是,需要使用
ZREMRANGEBYSCORE
```127.0.0.1:6379> ZREMRANGEBYSCORE activeusers:page:1 -inf 59
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE activeusers:page:1 -inf inf
127.0.0.1:6379> ZRANGEBYSCORE activeusers:page:1 -inf inf WITHSCORES
y0u0uwnf2#
一种方法是为每个页面/页面集保留一个hll键,分辨率为分钟。例如,如果我们正在跟踪“index.html”,而当前时间戳为0,则id为“”的访问者可以通过以下方式跟踪:
一旦一分钟过去了(为了简单起见,时间戳1),一个访问者(如“def”)将被添加到下一个键:
等等。要计算过去60分钟内的唯一访客数,假设当前时间戳为100,则需要调用
PFCOUNT
命令并提供所有这60个键的名称,例如:注:如果你想“旧”计数被逐出,请致电
EXPIRE
每次呼叫后PFADD
.