【问题标题】:Trying to figure out how to get count in date ranges in Redis试图弄清楚如何在 Redis 中计算日期范围
【发布时间】:2013-04-01 05:41:01
【问题描述】:

我正在尝试存储类似以下内容...

我有一个有关键字的系统,这些关键字可以是对的,也可以是错的。我想存储每次有人输入错误的关键字(以及他们所在的特定应用程序和时间戳)。

timestamp - application#1 我希望它在它自己的钥匙里面。

然后我需要能够去“好吧,有多少人在尝试使用应用程序 #1 的 TIMESTAMP1 和 TIMESTAMP2 之间弄错了关键字”

还有其他方法可以做到这一点吗?如果最后一部分(尝试使用应用程序#1)不起作用,我怀疑这不是 SQL。那么它能否返回应用程序#1 的值,以便我可以在 PHP 中完成最后一部分。

谢谢!

【问题讨论】:

    标签: php database-design redis


    【解决方案1】:

    Redis 不支持密钥通配符,因此您必须选择密钥客户端。

    这意味着您必须获取成批的密钥并将结果组合在一起;如果这并不总是可能的(例如,大范围,ms 键命名解析......)你应该考虑保持聚合(每小时关键字/每天关键字......)

    如果您使用集合/排序集合来存储关键字,请查看集合特定命令(特别是 UNION / UNIONSTORE),因为它们可能会派上用场:)

    【讨论】:

      【解决方案2】:

      我知道这是一个老问题,但我有解决 sorted sets 问题的方法。

      • appNamewrong keyword 的组合将拥有不同的 sorted sets,例如 myapp1:wrongwordmyapp2:anotherwrongwordmyanotherapp:yetanotherwrongword... 将是键。
      • 每当用户在应用程序中输入错误的关键字时,您将使用 ZADDunique identifier(在您的应用程序层中创建,例如 UUID)作为值和 timestamp(输入时间)作为 score 到排序集。标识符必须是唯一的,因为如果您输入用户 ID,那么每当同一用户在不同时间在同一应用程序中输入错误的关键字时,它将覆盖已排序集的 score
      • 那你就可以用ZCOUNT来计算了

      有多少人在尝试使用应用程序 #1 的 TIMESTAMP1TIMESTAMP2 之间弄错了关键字

      为简单起见;我使用小数字作为时间戳(score),您的应用名称是myapp,错误的关键字是wrong1。任意字母是在您的应用层生成的唯一 ID。

      127.0.0.1:6379> ZADD myapp:wrong1 123 abcdef 123 defg 126 xyz 132 qpr 145 ypz
      (integer) 5
      127.0.0.1:6379> ZRANGE myapp:wrong1 0 -1 WITHSCORES
       1) "abcdef"
       2) "123"
       3) "defg"
       4) "123"
       5) "xyz"
       6) "126"
       7) "qpr"
       8) "132"
       9) "ypz"
      10) "145"
      127.0.0.1:6379> ZRANGEBYSCORE myapp:wrong1 123 127
      1) "abcdef"
      2) "defg"
      3) "xyz"
      127.0.0.1:6379> ZCOUNT myapp:wrong1 123 127
      (integer) 3
      127.0.0.1:6379> ZCOUNT myapp:wrong1 123 126
      (integer) 3
      127.0.0.1:6379> ZCOUNT myapp:wrong1 123 125
      (integer) 2
      

      在使用ZCOUNT 时,您可以使用时间戳间隔来获取用户总数,如here 所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 2015-12-26
        相关资源
        最近更新 更多