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

Операции с хешами

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

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

Чтобы проверить существование поля в хеше, используйте команду HEXISTS.

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

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

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

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

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

    text
    HEXISTS <имя ключа> <поле>

    Команда вернет 1, если поле существует, или 0, если ключ или поле не существует. Поле с пустой строкой в качестве значения будет считаться существующим.

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

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

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

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

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

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

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

    Команда вернет список имен полей. Если ключ не существует, команда вернет пустой список. Порядок элементов не гарантирован.

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

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

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

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

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

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

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

    Команда вернет список значений полей. Если ключ не существует, команда вернет пустой список. Порядок элементов не гарантирован.

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

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

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

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

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

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

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

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

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

  • HGET — прочитать значение одного поля;
  • HMGET — прочитать значения нескольких полей;
  • HGETALL — прочитать все поля и значения.
  1. Подключитесь к кластеру.

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

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

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

  5. Узнайте имя поля.

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

    • HGET
    • HMGET
    • HGETALL
    text
    HGET <имя ключа> <поле>

    Команда вернет значение поля. Если ключ или поле не существует, команда вернет nil.

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

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

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

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

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

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

    text
    HSET <имя ключа> <поле 1> <значение 1> [<поле 2> <значение 2> ...]

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

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

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

  • HINCRBY — увеличить целое число;
  • HINCRBYFLOAT — увеличить число с плавающей точкой.
  1. Подключитесь к кластеру.

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

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

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

  5. Узнайте имя поля.

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

    • HINCRBY
    • HINCRBYFLOAT
    text
    HINCRBY <имя ключа> <поле> <шаг>

    Значение поля, шаг и результат должны быть целыми числами в диапазоне от -9223372036854775808 до 9223372036854775807.

    В командах <шаг> — число, на которое нужно изменить значение. Для уменьшения укажите отрицательный шаг.

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

Чтобы получить длину значения поля хеша, используйте команду HSTRLEN.

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

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

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

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

  5. Узнайте имя поля.

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

    text
    HSTRLEN <имя ключа> <поле>

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

Чтобы получить случайные поля хеша, используйте команду HRANDFIELD.

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

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

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

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

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

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

    В команде:

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

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

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

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

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

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

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

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

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

    В команде:

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

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

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

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

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

Чтобы удалить поля хеша, используйте команду HDEL.

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

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

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

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

  5. Узнайте имена полей.

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

    text
    HDEL <имя ключа> <поле 1> [<поле 2> ...]

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