所以我有一组用户和一组网站。对于给定的用户,我知道他访问过哪个网站以及何时访问。我有兴趣使用Redis
构建API来回答表单中的问题:"网站u
的用户w
的浏览历史记录中包含多少个唯一日期时间窗口[t0, t1]
"?我们拨打该号码f(u,w,t0,t1)
。每天由整数d
标识(例如,自EPOCH以来的天数)
我看到了使用Redis
建模浏览数据的两种方法:
sorted set
创建( u, w )
。排序集的每个元素都是( score=d, element=d )
,其中d
是u
访问w
的日期。换句话说,set元素与其得分相同。然后f(u,w,t0,t1)
只是ZCOUNT( u:w, t0, t1 )
set
创建( u, w )
。集合中的每个元素都是d
。然后要获得f(u,w,t0,t1)
,我需要迭代该集并计算t0
和t1
之间的天数我目前的理解是内存使用和速度之间存在折衷(回答查询):第一种解决方案是最快的(我不必遍历整个集合),尽管它是在浪费记忆(相同的数字d
同时用作得分和设定元素。)
我的问题是:
答案 0 :(得分:0)
您的理解是正确的...但是这里对第二种方法的优化可能会更好:提供t0
和t1
来查询,构建一个临时集包含这些之间的所有d
值。然后,在该临时集和(u,w)
之间进行SINTERSTORE。要获得计数,请调整结果集。