gpt4 book ai didi

redis - 使用 Redis 计算给定时间窗口内的共现次数

转载 作者:IT王子 更新时间:2023-10-29 06:07:49 25 4
gpt4 key购买 nike

所以我有一组用户和一组网站。对于给定的用户,我知道他访问了哪个网站以及访问的时间。我有兴趣使用 Redis 构建一个 API 来回答以下形式的问题:“用户 u 对网站 w 的浏览历史记录中包含多少个唯一天数 在一个时间窗口内 [t0, t1]”?我们称该数字为 f(u,w,t0,t1)。每一天都由一个整数 d 标识(例如,自 EPOCH 以来的天数)

我看到两种使用 Redis 对浏览数据建模的方法:

  • 为每对( u, w ) 创建一个排序集。排序集合的每个元素都是 ( score=d, element=d ) 其中 du 访问 w< 的日期。换句话说,集合元素与其分数相同。那么 f(u,w,t0,t1) 就是 ZCOUNT( u:w, t0, t1 )
  • 为每对( u, w ) 创建一个集合。集合中的每个元素都是 d。然后为了得到 f(u,w,t0,t1),我需要遍历集合并计算 t0t1

我目前的理解是内存使用和速度(回答查询)之间存在折衷:第一个解决方案是最快的(我不必遍历整个集合),尽管它在浪费内存(相同的数字 d 被用作分数和集合元素)。

我的问题是:

  • 我的理解正确吗?
  • 有更好的解决方案吗?

最佳答案

你的理解是正确的...但是这里有一个对第二种方法的优化可能会更好:提供 t0t1 来查询,构建一个临时的包含这些之间的所有 d 值的集合。然后,在该临时集和用于 (u,w) 的集之间执行 SINTERSTORE。要获得计数,SCARD 结果集。

关于redis - 使用 Redis 计算给定时间窗口内的共现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com