Перейти к содержимому

Операции с множествами

В Managed Valkey все управление множествами выполняется командами Valkey. С полным списком команд Valkey вы можете ознакомиться в официальной документации Valkey.

Обратите внимание, что в Managed Valkey некоторые команды Valkey недоступны.

Чтобы получить всех участников множества, используйте команду SMEMBERS.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Выполните команду:

    text
    SMEMBERS <имя ключа>

    Команда вернет всех участников множества. Если ключ не существует, команда вернет пустой результат. Порядок участников не будет гарантирован. Данные множества сохранятся.

    Для чтения большого множества по частям используйте итеративный обход.

Чтобы получить количество участников множества, используйте команду SCARD.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Выполните команду:

    text
    SCARD <имя ключа>

    Команда вернет количество участников множества. Если ключ не существует, команда вернет 0.

Чтобы получить случайных участников множества, используйте команду SRANDMEMBER.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Выполните команду:

    text
    SRANDMEMBER <имя ключа> [<количество>]

    В команде:

    • Положительное <количество> — получить не более указанного числа разных участников.
    • Отрицательное <количество> — получить число участников, равное модулю значения, с возможными повторениями.
    • Если <количество> не указано, будет выведен один случайный участник.
    • 0 — получить пустой список.

    Команда вернет значение одного участника или список участников. Если ключ не существует, без количества вернется nil, а с количеством — пустой список. Участники сохранятся в множестве.

Чтобы добавить участников в множество, используйте команду SADD.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Для работы с существующим ключом узнайте его имя с помощью итеративного обхода. Для нового ключа выберите имя и убедитесь, что оно не занято.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Выполните команду:

    text
    SADD <имя ключа> <участник 1> [<участник 2> ...]

    Команда добавит участников и вернет количество добавленных участников. Значения, которые уже есть в множестве, не будут добавлены повторно и не будут учтены в ответе. Если ключ не существует, команда создаст множество.

Чтобы проверить принадлежность участника множеству, используйте команду SISMEMBER.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Узнайте имя участника из списка или через итеративный обход.

  6. Выполните команду:

    text
    SISMEMBER <имя ключа> <участник>

    Команда вернет 1, если участник есть в множестве, и 0, если участника или ключа не существует.

Переместить участника в другое множество

Заголовок раздела «Переместить участника в другое множество»

Чтобы переместить участника в другое множество, используйте команду SMOVE.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя исходного ключа с помощью итеративного обхода.

  4. Узнайте имя существующего целевого ключа с помощью итеративного обхода.

  5. Выберите имя для нового целевого ключа и убедитесь, что оно не занято.

  6. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  7. Узнайте имя участника из списка или через итеративный обход.

  8. Выполните команду:

    text
    SMOVE <имя исходного ключа> <имя целевого ключа> <участник>

    Команда за одну операцию удалит участника из исходного множества, добавит в целевое и вернет 1. Если участник уже есть в целевом множестве, он будет только удален из исходного. Если целевой ключ отсутствует, при переносе будет создано множество.

    Если исходный ключ или участник не существует, команда вернет 0. После переноса последнего участника исходный ключ будет удален.

Получить пересечение, объединение или разность множеств

Заголовок раздела «Получить пересечение, объединение или разность множеств»

Чтобы получить пересечение, объединение или разность множеств, используйте одну из команд:

  • SINTER — получить участников, которые есть во всех указанных множествах;
  • SUNION — получить участников, которые есть хотя бы в одном множестве;
  • SDIFF — получить участников первого множества, которых нет ни в одном из остальных.
  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Выполните нужную команду:

    • SINTER
    • SUNION
    • SDIFF
    text
    SINTER <имя ключа 1> <имя ключа 2> [<имя ключа 3> ...]

    Команда вернет участников результата без повторений. Порядок участников не гарантирован. Исходные множества сохранятся. Несуществующие ключи будут учтены как пустые множества.

Получить пересечение, объединение или разность множеств и сохранить в ключ

Заголовок раздела «Получить пересечение, объединение или разность множеств и сохранить в ключ»

Чтобы получить пересечение, объединение или разность множеств и сохранить в ключ, используйте одну из команд:

  • SINTERSTORE — получить участников, которые есть во всех указанных множествах, и сохранить в ключ;
  • SUNIONSTORE — получить участников, которые есть хотя бы в одном множестве, и сохранить в ключ;
  • SDIFFSTORE — получить участников первого множества, которых нет ни в одном из остальных, и сохранить в ключ.
  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Для работы с существующими ключами узнайте их имена с помощью итеративного обхода.

  4. Выберите отдельное имя целевого ключа. Проверьте, существует ли он. Прежнее значение будет заменено результатом.

  5. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  6. Выполните нужную команду:

    • SINTERSTORE
    • SUNIONSTORE
    • SDIFFSTORE
    text
    SINTERSTORE <имя целевого ключа> <имя ключа 1> <имя ключа 2> [<имя ключа 3> ...]

    Команда сохранит результат как множество и вернет количество его участников. Существующий целевой ключ будет перезаписан независимо от типа значения. При пустом результате целевой ключ будет удален. Если нужно сохранить все исходные множества, укажите отдельное имя целевого ключа.

Чтобы итеративно обойти участников множества, используйте команду SSCAN.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Начните обход с курсора 0:

    text
    SSCAN <имя ключа> 0 [MATCH <шаблон>] [COUNT <количество>]

    В команде MATCH <шаблон> — отобрать участников по шаблону, а COUNT <количество> — задать положительное целое число как ориентир объема работы за вызов. Количество результатов может отличаться от указанного.

    Команда вернет следующий курсор и список участников.

  6. Подставляйте полученный курсор в следующий вызов. Используйте тот же ключ и условия отбора:

    text
    SSCAN <имя ключа> <курсор> [MATCH <шаблон>] [COUNT <количество>]

    Обход завершится, когда команда вернет курсор 0. Если ключ не существует, сразу вернутся курсор 0 и пустой список.

Чтобы удалить участников множества, используйте команду SREM.

  1. Подключитесь к кластеру.

  2. Переключитесь на нужную базу данных.

  3. Узнайте имя ключа с помощью итеративного обхода.

  4. Убедитесь, что значение ключа — множество. Должно вернуться значение set.

  5. Узнайте имена участников.

  6. Выполните команду:

    text
    SREM <имя ключа> <участник 1> [<участник 2> ...]

    Команда удалит указанных участников и вернет количество удаленных участников. Несуществующие участники будут пропущены. Если ключ не существует, команда вернет 0. После удаления последнего участника ключ множества будет удален.