如果redis zscan在排序集上返回我的结果按分数顺序排序吗?

时间:2015-05-06 20:29:49

标签: redis sortedset

对于我正在研究的应用程序,我正在使用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

1 个答案:

答案 0 :(得分:5)

[HSZ]SCAN系列命令的回复顺序基于Redis使用的内部数据结构,其顺序由多个因素决定,但最重要的是由对数据的更新决定。不包括工程测试和随机巧合 - 无序回复是预期的行为。