Spec-Zone.ru › Redis

ZRANGEBYLEX

ZRANGEBYLEX (deprecated)

Начиная с версии Redis 6.2.0, эта команда считается устаревшей.

Её можно заменить на ZRANGE с аргументом BYLEX при миграции или написании нового кода.

Синтаксис
ZRANGEBYLEX key min max [LIMIT offset count]
Доступно с версии:
2.8.9
Сложность по времени:
O(log(N)+M), где N — количество элементов в упорядоченном множестве, а M — количество возвращаемых элементов. Если M является константой (например, всегда запрашиваются первые 10 элементов с помощью LIMIT), можно считать её O(log(N)).
Категории ACL:
@read, @sortedset, @slow,

Когда все элементы в упорядоченном множестве вставлены с одинаковым значением, для принудительного лексикографического упорядочения эта команда возвращает все элементы в упорядоченном множестве с key значением между min и max.

Если элементы в упорядоченном множестве имеют разные значения, возвращаемые элементы не определены.

Элементы считаются от меньшего к большему в строковом порядке, сравнивая их байт за байтом с использованием функции memcmp() языка C. Более длинные строки считаются больше, чем более короткие, если общая часть идентична.

Необязательный аргумент LIMIT может быть использован для получения только диапазона совпадающих элементов (подобно SELECT LIMIT offset, count в SQL). Отрицательное значение count возвращает все элементы начиная с offset. Обратите внимание, что если значение offset велико, необходимо пройтись по упорядоченному множеству для offset элементов, прежде чем получить возвращаемые элементы, что может увеличить сложность до O(N).

Как указать интервалы

Допустимые start и stop должны начинаться с ( или [, чтобы указать, является ли элемент диапазона исключающим или включающим. Специальные значения + или - для start и stop имеют специальное значение положительной и отрицательной бесконечности для строк, поэтому, например, команда ZRANGEBYLEX myzset - + гарантированно вернёт все элементы в упорядоченном множестве, если все элементы имеют одинаковое значение.

Подробности сравнения строк

Строки сравниваются как бинарные массивы байтов. Из-за того, как задан набор символов ASCII, это означает, что обычно это также имеет эффект сравнения обычных ASCII-символов в очевидном лексикографическом порядке. Однако это не так, если используются строки, не являющиеся обычным ASCII (например, utf8-строки).

Однако пользователь может применить преобразование к закодированной строке, чтобы первая часть вставленного элемента в упорядоченном множестве сравнивалась так, как требуется для конкретного приложения. Например, если нужно добавлять строки, которые будут сравниваться без учёта регистра, но при запросе всё ещё нужно получить реальный регистр, можно добавлять строки следующим образом:

ZADD autocomplete 0 foo:Foo 0 bar:BAR 0 zap:zap

Из-за первой нормализованной части в каждом элементе (перед символом двоеточия) мы принудительно задаём определённое сравнение, однако после запроса диапазона с помощью ZRANGEBYLEX приложение может отобразить пользователю вторую часть строки после двоеточия.

Бинарная природа сравнения позволяет использовать упорядоченные множества как универсальный индекс, например, первая часть элемента может быть 64-битным числом в формате big endian: поскольку числа big endian имеют самые значимые байты в начальных позициях, бинарное сравнение будет соответствовать численному сравнению чисел. Это можно использовать для реализации запросов диапазона на 64-битных значениях. Как показано в примере ниже, после первых 8 байтов можно хранить значение элемента, который мы фактически индексируем.

Возврат

Массивная реакция: список элементов в заданном диапазоне значений.

Примеры

ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
ZRANGEBYLEX myzset - [c
ZRANGEBYLEX myzset - (c
ZRANGEBYLEX myzset [aaa (g

© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/zrangebylex/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API