1

我正在编写一个烧瓶应用程序,它将计算来自多个网站的页面浏览量。我决定使用 Redis 和 Redispy,但我很难决定如何构建。最初我试图有这样的东西

redis.set("date:YYYYMMDD:site:sitename", 1)

我希望能够按日期或站点名称查询并显示计数值。我尝试使用 .keys 按日期或站点名称进行查询,但 REDIS 文档说要避免使用密钥。
所以我想也许我可以使用redis哈希:

redis.hset("date:YYYYMMDD", "site", "sitename")
redis.hset("counter", 1)

最终,我希望能够按站点名称、日期或显示所有日期的所有值在站点计数器上运行报告。我似乎找不到合适的结构来让我得到我想要的。

任何建议将不胜感激!我以前没有使用过 REDIS。

4

2 回答 2

1

对于如上所述的整体递增计数器,按照此答案的结构构建将是一种行之有效的方法。给出的答案更详细地说明了对诸如此类的时间序列数据使用排序集。它甚至具有汇总数据的方法(也许您还想报告月度数据)。

如果,正如您的示例所表明的那样,您的解决方案是每天的,那么一个结构将数据存储在一个排序集中,其中的站点/域名在键中,并使用每日时间戳,并且[ZINCRBY][2]会很好地为您服务。

关于keys……不要。干脆不要。

作为替代方案,您可以在使用域/站点名称作为标识符时设置存储密钥。每当您ZINCRBY为站点/域名运行时,也要SADD对“索引键”进行操作,例如 sites-with-traffic:YYYY:MM:DD. 这样,您可以提取当天的一组独特站点,并从那里为每个站点构建查询。

在您的描述中,您说您可能希望在特定日期进行报告。使用 Redis 执行此操作的方法是简单地查询关键数据是否存在。如果您一无所获,则该期间的流量为 0。当您有一组参数时不要查询 - 使用它们。您列出的唯一一个可能未知的查询模式是上述站点/域名,并将它们添加到集合中可以解决该需求。

于 2014-03-01T23:44:38.050 回答
0

对于计数,您可以使用incr/decr命令

http://redis.io/commands/incr

当您收到访问权限时,像这样增加计数器:

  > 增量计数器:site2:20131101
  (整数) 1
  > 增量计数器:site1:20131103
  (整数) 1
  > 增量计数器:site1:20131103
  (整数) 2
  > 增量计数器:site2:20131103
  (整数) 1

查询计数器时,首先获取所有键,然后汇总应用中的所有计数器。

  > keys counter:site2:* # 按站点查询
  1)“计数器:site2:20131101”
  2)“计数器:site2:20131103”
  > 获取“计数器:site2:20131101”
  “1”
  > 获取“计数器:site2:20131103”
  “1”
  > keys counter:*:20131103 # 按日期查询
  1)“计数器:site1:20131103”
  2)“计数器:site2:20131103”
  ...
于 2013-11-03T07:49:33.037 回答