Redis ZRANGEBYSCORE返回空集
这可能有点愚蠢 在redis控制台中执行此操作Redis ZRANGEBYSCORE返回空集,redis,Redis,这可能有点愚蠢 在redis控制台中执行此操作 zincrby model 1 20140101 zincrby model 1 20141010 zincrby model 1 20141010 为什么这样做有效 zrangebyscore model 00000000 99999999 withscores 1) "20140101" 2) "1" 3) "20141010" 4) "2" 但事实并非如此 zrangebyscore model 20140000 20149999 wit
zincrby model 1 20140101
zincrby model 1 20141010
zincrby model 1 20141010
为什么这样做有效
zrangebyscore model 00000000 99999999 withscores
1) "20140101"
2) "1"
3) "20141010"
4) "2"
但事实并非如此
zrangebyscore model 20140000 20149999 withscores
#> (empty list or set)
ZRANGEBYSCORE用于分数范围查找,您使用的是您的成员(在第3段中)。自1月2日起 获得约会的点击率:
ZSCORE <model>:daily <date timestamp at 12AM UTC>
ZSCORE:每日
注:
Sorted set key name pattern: <model>:daily
|
+- Member value: <day timestamp at 12AM UTC>:<count>
+- Member score: 0
排序设置键名模式::每日
|
+-成员值::
+-会员分数:0
在这里,您可以使用ZRANGEBYLEX获取一系列日期,但由于时间戳和计数是串联的,因此您必须在客户端或使用Lua进行一些处理,以获取计数(ZSCORE将始终返回0)或增加计数(您不能再使用ZINCRBY)。对于时间序列数据使用redis排序集,使用(如果我错了,请纠正我)时间戳作为分数不是更好吗?我在任何地方都读到过,人们推荐使用ZRANGEBYSCORE并在需要的时间范围内检索数据。这里有些东西对我来说是向后的…排序集中的每个元素都有两个属性-一个唯一的成员值和一个分数。Timeseries通常使用分数来保持时间戳(历元),并且成员就是被钉住的对象(通常,成员是由以下内容构建的:使其唯一)。您所做的是使用时间戳作为成员,并且分数递增。这意味着您正在使用的ZSET正在为时间戳保留分数(1,2,…)-如果您尝试解释您正在尝试做什么,可能会更好:)基本上是应用程序中每个模型的分析。我想统计每个模型id的访问/事件,并能够在每个日期获取该数据。因此,这里()我被建议使用排序集,正如在其他地方所建议的那样,但似乎只有当当前日期的计数将使用不同的计数器时才有用,然后每天使用ZADD,总计数作为成员,时间作为分数。您建议如何实施此功能?谢谢!排序集方法是否更倾向于使用具有年度键和365个值(每天)的散列,这样我就可以为计数器HINCRBY,而要在范围之间获取数据,我可以执行HMGET(也是O(N),但我可以通过服务器端生成日期范围一次性完成)。根据它的大小大致相同(别担心,我是redislabs的,因为你是garantia;)一点也不担心,而且在任何情况下都会有所帮助:)散列可能在RAM方面更有效,但在使用计数分数时使用排序集,您将立即获得top-k功能。在一天结束的时候,一切都是关于你想做什么。。。
ZSCORE <model>:daily <date timestamp at 12AM UTC>
Sorted set key name pattern: <model>:daily
|
+- Member value: <day timestamp at 12AM UTC>:<count>
+- Member score: 0