我正在尝试存储以下内容......
我的系统有关键字,这些关键字可以是对还是错。我希望每次有人输入错误的关键字(以及他们所在的特定应用程序和时间戳)时存储。
timestamp - application#1
我希望它在自己的密钥内。
然后我需要能够“有多少人在尝试使用应用程序#1的TIMESTAMP1和TIMESTAMP2之间获得了关键字错误”
还有其他方法吗?如果最后一部分(尝试使用应用程序#1)将无法工作,我怀疑这不是SQL。然后它可以返回应用程序#1的值,所以我可以在PHP中完成最后一部分。
谢谢!
答案 0 :(得分:0)
Redis不支持密钥通配符,因此您必须选择客户端密钥。
这意味着您必须获得批量密钥并将结果组合在一起;如果那并不总是可能的(例如,大范围,ms键命名解析......)你应该考虑保留聚合(每小时关键字/关键字每天...)
如果您使用集合/有序集来存储关键字,请查看特定的集合命令(特定于UNION / UNIONSTORE),因为它们可能会派上用场:)
答案 1 :(得分:0)
我知道这是一个老问题,但是我有sorted sets
这个问题的解决方案。
sorted sets
和appName
的组合,您将拥有不同的wrong keyword
,例如myapp1:wrongword
,myapp2:anotherwrongword
,myanotherapp:yetanotherwrongword
...是关键。ZADD
与unique identifier
(在应用程序层中创建,例如UUID)用作值,并将timestamp
(输入时间)用作值与score
相同。标识符必须唯一,因为如果您输入用户ID,那么只要同一用户在不同时间在同一应用程序中输入错误的关键字,就会覆盖已排序集合的score
。ZCOUNT
进行计算有多少人在
TIMESTAMP1
和TIMESTAMP2
之间输入了错误的关键字,并尝试使用应用程序#1“
为简单起见;我使用小数字作为时间戳记(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所述。