Сортированные наборы — один из самых ценных и продвинутых типов данных в Redis. Сортированные наборы очень похожи на наборы, потому что они оба содержат неповторяющиеся строковые последовательности. Однако, в отличие от стандартных наборов, отсортированные наборы включают значение оценки, связанное с каждым членом.
Оценка позволяет отсортировать их в определенном порядке. Каждый член отсортированного набора должен быть уникальным, но может иметь общее значение оценки с несколькими членами.
В этом руководстве вы узнаете все о сортированных наборах в Redis и о том, как их можно использовать в своих базах данных.
Убедитесь, что у вас установлен и запущен существующий сервер Redis, чтобы следовать этому руководству.
Создание отсортированных наборов
Чтобы создать отсортированный набор в Redis, используйте команду ZADD в Redis CLI. Команда ZADD принимает три основных аргумента.
Первый — это имя ключа, содержащего отсортированный набор.
Второй аргумент содержит оценку члена, добавляемого к отсортированному набору.
Последний и третий аргумент — это фактическое значение члена в отсортированном наборе.
ПРИМЕЧАНИЕ. Порядок аргументов имеет значение, поскольку каждый представляет значения, как указано выше.
Взгляните на пример, показанный ниже.
127.0.0.1:6379> ZADD captains 1 «Jonathan Archer»
Приведенная выше команда создает отсортированный набор, содержащий имена капитанов Star Trek. В приведенном выше примере значение «Джонатан Арчер» равно 1.
Команда возвращает целочисленное значение, которое указывает общее количество элементов, добавленных к отсортированному набору.
Redis не ограничивает вас добавлением одного члена в набор. Вы можете добавить несколько значений. Например:
ZADD captains 2 «Carol Freeman» 4 «Christopher Pike» 1 «Jean-Luc Picard» 3 «Kathryn Janeway.»
В приведенной выше команде вы заметите две основные вещи:
- Во-первых, оценка каждого члена в отсортированном не обязательно должна быть последовательной. Вы можете присвоить участнику 100 баллов, даже если для других баллов не задано какое-либо значение.
- Во-вторых, член может иметь такой же балл, что и другой член в отсортированном наборе.
Параметры команды ZADD
Команда ZADD принимает несколько опций для изменения своего поведения и функциональности. Эти варианты включают:
- NX — опция NX указывает команде ZADD только добавлять новых участников. Этот параметр запрещает команде обновлять существующие элементы в указанном наборе.
- С другой стороны, XX — опция XX обновит только существующие элементы и не добавит новых элементов в набор.
ПРИМЕЧАНИЕ. Параметры NX и XX противоречат друг другу. Следовательно, вы можете использовать только один параметр в одной команде.
- CH — опция CH указывает ZADD включать количество измененных элементов. По умолчанию ZADD возвращает только количество вновь добавленных элементов. Команда ZADD вернет количество добавленных и обновленных элементов с помощью опции CH.
- INCR — опция INCR указывает команде ZADD увеличивать счет участника. Если указанный член не существует в отсортированном наборе, Redis создаст его автоматически и установит приращение в качестве оценки.
ПРИМЕЧАНИЕ. Рекомендуется использовать команду ZINCRBY вместо ZADD с опцией INCR. Оба они выполняют одну и ту же функцию.
Получение членов из отсортированного набора
Чтобы получить элементы отсортированного набора в Redis, используйте команду ZRANGE. Команда берет имя ключа и определенный диапазон членов, которые вы хотите получить. Значения диапазона элементов сортированного набора являются индексами с отсчетом от нуля. Следовательно, первый член в наборе имеет индекс 0.
Например, чтобы получить элементы из индекса от 0 до 10, введите команду:
127.0.0.1:6379> ZRANGE captains 0 10
Команда вернет элементы в указанном диапазоне. Пример вывода показан ниже:
1) «Jonathan Archer»
2) «Carol Freeman»
3) «Kathryn Janeway»
4) «Christopher Pike»
5) «Jean-Luc Picard»
В тех случаях, когда отсортированный набор содержит элементы с аналогичным значением оценки, элементы будут отсортированы в лексикографическом порядке.
Если вы хотите получить участников в наборе и связанные с ними оценки, вы можете использовать опцию WITHSCORES.
127.0.0.1:6379> ZRANGE captains 0 10 WITHSCORES
Пример вывода приведенной выше команды выглядит следующим образом.
1) «Jonathan Archer»
2) «1»
3) «Carol Freeman»
4) «2»
5) «Kathryn Janeway»
6) «3»
7) «Christopher Pike»
8) «4»
9) «Jean-Luc Picard»
10) «5»
Предположим, вы хотите получить элементы в обратном порядке. Помните, что команда ZRANGE возвращает элементы только в порядке возрастания. Чтобы получить обратный порядок, используйте команду ZREVRANGE.
127.0.0.1:6379> ZREVRANGE captains 0 10
Команда будет работать в обратном порядке.
1) «Jean-Luc Picard»
2) «Christopher Pike»
3) «Kathryn Janeway»
4) «Carol Freeman»
5) «Jonathan Archer»
Вы также можете включить опцию WITHOPTIONS в команду ZREVRANGE.
1) «Jean-Luc Picard»
2) «5»
3) «Christopher Pike»
4) «4»
5) «Kathryn Janeway»
6) «3»
7) «Carol Freeman»
8) «2»
9) «Jonathan Archer»
10) «1»
Полученное значение будет содержать оценки в обратном порядке.
Удалить участников из отсортированного набора
Чтобы удалить элементы из отсортированного набора, используйте команду ZREM.
127.0.0.1:6379> ZREM captains «Jonathan Archer»
Команда вернет целочисленное значение, показывающее количество элементов, удаленных из отсортированного набора.
Чтобы удалить элементы по диапазону, используйте команду ZREMBYRANGE.
127.0.0.1:6379> ZREMRANGEBYLEX captains [A [Z
Команда удалит значения в зависимости от их лексического диапазона.
Чтобы удалить участников из их диапазона оценок, используйте команду ZREMRANGEBYSCORE.
127.0.0.1:6379> ZREMRANGEBYSCORE captains 0 5
Получить информацию о отсортированных наборах
Используйте команду ZCARD, чтобы получить количество элементов в данном отсортированном наборе.
127.0.0.1:6379> ZCARD captains
Возвращаемое значение — целое число, показывающее количество элементов в наборе.
Если вы хотите получить количество членов в пределах определенного диапазона, используйте команду ZCOUNT.
127.0.0.1:6379> ZCOUNT captains 0 10
Аналогичным образом команда возвращает целочисленное значение.
Чтобы получить оценку определенного члена в отсортированном наборе, используйте команду ZSCORE:
127.0.0.1:6379> ZSCORE captains «Carol Freeman»
«2»
Команда вернет счет участника, если он существует.
Вывод
В этой статье рассказывается, как начать работу и использовать сортированные наборы в Ruby. Имейте в виду, что отсортированных наборов больше, чем описано в этом руководстве. Прочтите документацию, чтобы узнать больше.