-1

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

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

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

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

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

谢谢!

4

2 回答 2

0

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

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

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

于 2013-04-16T21:59:00.653 回答
0

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

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

有多少人在尝试使用应用程序 #1之间TIMESTAMP1的关键字错误”TIMESTAMP2

为简单起见;我使用小数字作为时间戳(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时,您可以使用时间戳间隔来获取用户总数,如此处所述

于 2020-06-21T23:03:07.803 回答