对于我正在研究的应用程序,我正在使用Redis中的有序集来存储时间戳作为分数和任意消息作为成员的项目。我当时正计划使用zscan来按顺序从排序的中检索项目。顺序对应用程序很重要,这就是我想使用有序集的原因。
在我尝试使用zscan检索项目并且它们似乎无序之前,事情似乎进展顺利。例如,我设置了一个测试,我将1000个项目添加到有序集合中,使用整数值作为分数,将字符串表示作为成员(为简洁起见省略了初始化):
for( int i = 0; i < 1000; i++){
jedis.zadd(CHANNEL, i, Integer.toString(i));
}
ScanResult<Tuple> result = jedis.zscan("TEST_CHANNEL", "0", new ScanParams().count(10));
我收到的物品似乎是随机的。使用redis-cli运行zscan确认了测试结果相同的结果:
127.0.0.1:6379> zscan "TEST_CHANNEL" 0
返回结果125,588,568,144 .....
从0到10执行zrange正确返回&#34; 0&#34;到&#34; 10&#34;。
我已经尝试查看文档(http://redis.io/commands/zscan),但我找不到任何确认zscan是否应该按照分数顺序返回结果的内容,并希望有人可以清理我是否看到了一个错误,预期的行为,或者只是做错了。
我正在使用Redis 3.0.1
答案 0 :(得分:5)
[HSZ]SCAN
系列命令的回复顺序基于Redis使用的内部数据结构,其顺序由多个因素决定,但最重要的是由对数据的更新决定。不包括工程测试和随机巧合 - 无序回复是预期的行为。