Я пытаюсь выполнить поиск по лексикографическому диапазону в отсортированном наборе Redis, но получаю противоречивые результаты на основе моих понимание того, как работает эта функция. Результаты аналогичны при использовании ZRANGECOUNT
, ZRANGEBYLEX
и ZREMRANGEBYLEX
.
Рабочие запросы
Это пример моего набора из 3 элементов, использующих только ZRANGE
.
redis> ZRANGE myset 0 -1
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
Я также могу получить все элементы лексикографически.
redis> ZRANGEBYLEX myset - +
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
Выполнение поиска по диапазону, опуская последние 3 символа, также работает, как и ожидалось.
redis> ZRANGEBYLEX myset [00000000022xm26hax [00000000022xm26hax\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
Регулируя аргументы диапазона, я также могу выбрать только первые два элемента.
redis> ZRANGEBYLEX myset [00000000022xm26hax001 [00000000022xm26hax002\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
Короткий старт кажется приемлемым:
redis> ZRANGEBYLEX myset [00000000022x [00000000022xm26hax001\xff
0 00000000022xm26hax001
Проблемные запросы
Однако я сталкиваюсь с проблемами, когда пытаюсь выбрать более короткую версию строки - все они возвращают результаты 0, хотя я ожидал, что они вернут 3.
ZRANGEBYLEX myset [00000000022xm26h [00000000022xm26h\xff
ZRANGEBYLEX myset [00000000022x [00000000022x\xff
Но затем добавление обратно только «m» заставляет снова вернуть все три элемента.
redis> ZRANGEBYLEX myset [00000000022xm [00000000022xm\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
Может кто-нибудь объяснить такое поведение? Каков правильный способ вернуть все элементы, начинающиеся с "00000000022x"
, учитывая мой пример набора данных?
Почему ZRANGEBYLEX myset [00000000022x [00000000022x\xff
не возвращает никаких результатов, а ZRANGEBYLEX myset [00000000022xm [00000000022xm\xff
возвращает все результаты - кажется, что просто добавление «m» заставляет его работать так, как ожидалось?