Запрос ZRANGEBYLEX возвращает другой результат для того же количества символов - PullRequest
0 голосов
/ 19 мая 2018

Я создал набор, подобный этому ZADD myzset 0 baba 0 abab 0 aabb 0 bbaa 0 baab 0 abba

, когда я запрашиваю с помощью ключевых слов "aa" и "bb" результаты, подобные этому

для "aa"

ZRANGEBYLEX myzset "[aa" + 1) "aabb" 2) "abab" 3) "abba" 4) "baab" 5) "baba" 6) "bbaa"

для «bb»

ZRANGEBYLEX myzset "[bb" + 1) "bbaa"

почему «bb» возвращает только 1, а «aa» возвращает6

ZRANGEBYLEX myindex "[banana:" + LIMIT 1 10 1) "banana:123" 2) "banahhh:1" 3) "banned user:49" 4) "banning:89"

Другой с сайта Redis (https://redis.io/commands/zrangebylex)

Как 2) "banahhh:1" может быть указан как второй.не должен отображаться в результате, или я что-то упустил

ZRANGEBYLEX myindex "[banana:" + LIMIT 1 10 1) "banana:123" 2) "banahhh:1" 3) "banned user:49" 4) "banning:89"

Примечание: я заметил, что сортирует добавленные элементы и возвращает на основе отсортированного индекса. Я не знал, что

1 Ответ

0 голосов
/ 19 мая 2018

Это потому, что ваши элементы в отсортированном наборе имеют одинаковую оценку и вы используете команду ZRANGEBYLEX.Как сказано в документах Redis:

Хотя один и тот же элемент не может быть повторен в отсортированном наборе, поскольку каждый элемент уникален, можно добавить несколько разных элементов с одинаковым счетом. Когда несколько элементов имеют одинаковую оценку, они упорядочены лексикографически (они по-прежнему упорядочены по оценке в качестве первого ключа, однако локально все элементы с одинаковой оценкой относительно упорядочены лексикографически).

И вы используете команду ZRANGEBYLEX, она просто сравнивает строку с ограничением одинаковых оценок.

Если элементы в отсортированном наборе имеют разные оценки, возвращаемые элементы не указываются.

Таким образом, если ваш отсортированный набор имеет разные оценки, действие не определено.

И если вы используете команду ZRANGE, она сначала сравнивает счет, а затем сравнивает строку с тем же счетом.

пожалуйста, обратитесь к документу API для получения дополнительной информации https://redis.io/commands/zrangebylex&& https://redis.io/commands/zrange

...