Должен ли redis zscan на сортированном наборе возвращать мои результаты, отсортированные по порядку баллов?


Для приложения, над которым я работаю, я рассматриваю использование отсортированного набора в 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.....

Выполнение zrange от 0 до 10 правильно возвращает элементы от "0"до " 10".

Я пробовал смотреть на документация (http://redis.io/commands/zscan ) но я не могу найти ничего подтверждающего, должен или не должен zscan возвращать результаты в порядке баллов и надеялся, что кто-то может прояснить, вижу ли я ошибку, ожидаемое поведение или просто делаю это неправильно.

Я использую Redis 3.0.1

1 2

1 ответ:

Порядок ответа от семейства команд [HSZ]SCAN основан на внутренней структуре данных, используемой Redis, порядок которой определяется несколькими факторами, но наиболее важным является обновление данных. Исключая искусственные тесты и случайные совпадения-неупорядоченный ответ является ожидаемым поведением.