Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!

Используйте код при регистрации:

Skills
04.11.2024

Использование команд сканирования в Redis в Linux

Redis, хранилище структур данных in-memory с открытым исходным кодом, известно своей скоростью и универсальностью в качестве базы данных ключ-значение. Одной из его мощных особенностей является возможность инкрементного итерационного просмотра наборов данных с помощью команд сканирования. Это особенно полезно при работе с большими массивами данных, так как позволяет эффективно извлекать данные, не перегружая сервер. Для пользователей выделенных серверов Linux использование команд сканирования в Redis может повысить производительность работы с данными, обеспечивая точную, оптимизированную по ресурсам обработку наборов данных. В этой статье мы рассмотрим, как эффективно использовать команды сканирования в Redis в среде Linux, предложим подробные примеры и лучшие практики для управления и получения данных в масштабе

Что такое команды сканирования?

Команды сканирования в Redis позволяют выполнять неблокируемый итерационный поиск по ключам, наборам, хэшам и отсортированным наборам. В отличие от команды KEYS, которая может быть опасна для больших наборов данных, поскольку возвращает все совпадающие ключи сразу, команды сканирования возвращают небольшое количество элементов за один раз. Это минимизирует влияние на производительность и позволяет выполнять инкрементную итерацию

Команды сканирования ключей

  1. SCAN: Итерация по ключам в пространстве ключей.
  2. SSCAN: Итерация по элементам в наборе.
  3. HSCAN: итерация по полям и значениям в хэше.
  4. ZSCAN: итерация по членам и оценкам в отсортированном множестве.

Основной синтаксис команд сканирования

Каждая команда сканирования имеет схожий синтаксис

SCAN cursor [MATCH pattern] [COUNT count]
  • курсор: Целое число, обозначающее позицию, с которой нужно начать сканирование. Чтобы начать новое сканирование, используйте 0.
  • MATCH pattern: (необязательно) Шаблон для фильтрации возвращаемых ключей. Поддерживаются шаблоны в стиле glob.
  • COUNT count: (необязательно) Подсказка для Redis о том, сколько элементов возвращать в каждой итерации.

Установка Redis в Linux

Прежде чем мы перейдем к использованию команд сканирования, убедитесь, что Redis установлен в вашей системе Linux. Для тех, кто использует Debian Dedicated Server, установка Redis очень проста и может расширить возможности сервера для эффективной обработки данных в памяти. Вот как установить Redis на систему на базе Debian, обеспечив стабильную среду, оптимизированную для высокопроизводительной работы.

Следуя этим шагам, вы установите Redis таким образом, чтобы использовать ресурсы и стабильность вашего выделенного сервера Debian, что идеально подходит для выполнения задач по обработке данных

###ATP_PRO_NOTR_2_CODE_TAG_NOTR_ATP_PRO##

Для CentOS/RHEL используйте

sudo yum install redis

После установки запустите сервер Redis

sudo systemctl start redis

Подключение к Redis

Откройте терминал и подключитесь к экземпляру Redis с помощью Redis CLI

redis-cli

Теперь вы можете выполнять команды Redis в CLI

Использование команды SCAN

Пример 1: Базовый SCAN

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

SCAN 0

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

Пример 2: Использование MATCH для фильтрации ключей

Если вы хотите найти ключи, соответствующие определенному шаблону, например ключи, начинающиеся с “user:”, вы можете использовать

SCAN 0 MATCH username:*

Эта команда возвращает только те ключи, которые начинаются с “user:”

Пример 3: Указание COUNT

Чтобы указать, сколько ключей Redis должен возвращать в каждой итерации, вы можете указать count

SCAN 0 COUNT 10

Это позволит вернуть примерно 10 ключей. Обратите внимание, что реальное число может быть меньше этого

Пример 4: Итерация по всем ключам

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

cursor=0
while true; do
result=$(redis-cli SSCAN myset $cursor MATCH apple:*)
echo "$result" # Process the result as needed
cursor=$(echo "$result" | awk 'NR==1{print $1}') # Update the cursor
if [[ "$cursor" == "0" ]]; then
break  # Stop when the cursor is back to 0
fi
done

Использование команды SSCAN

Команда SSCAN используется для перебора элементов в наборе. Ее синтаксис аналогичен синтаксису SCAN

SSCAN key cursor [MATCH pattern] [COUNT count]

Пример SSCAN

Шаг 1: Создание набора и добавление элементов

Давайте создадим набор под названием myset и добавим в него несколько элементов

SADD myset "apple"
SADD myset "banana"
SADD myset "cherry"
SADD myset "date"
SADD myset "elderberry"

Шаг 2: Использование команды SSCAN

Теперь, когда у нас есть набор с именем myset, мы можем использовать команду SSCAN для перебора его элементов

  1. Основная команда SSCAN:Предположим, у вас есть набор с именем “myset”. Чтобы просканировать его элементы
    SSCAN myset 0
  2. Использование MATCH:Чтобы отфильтровать элементы набора на основе шаблона и добавить некоторые элементы, включающие слово “манго” и другие вариации:
    SSCAN myset 0 MATCH mango:*
  3. Итерация по множеству:Вы можете использовать цикл для итерации по множеству:

#!/bin/bash
cursor=0
echo "Scanning through myset:"
while true; do
# Scan the set
result=$(redis-cli SSCAN myset $cursor)
# Print the elements returned by SSCAN
echo "$result"
# Update the cursor for the next iteration
cursor=$(echo "$result" | awk 'NR==1{print $1}')
# Break the loop if cursor is back to 0
if [[ "$cursor" == "0" ]]; then
break
fi
done

Запуск скрипта

  1. Сохраните скрипт под именем scan_myset.sh.
  2. Сделайте его исполняемым
    chmod +x scan_myset.sh
  3. Запустите скрипт
    ./scan_myset.sh

Использование команд HSCAN и ZSCAN

Команда HSCAN

Команда HSCAN выполняет итерацию по полям и значениям в хэше

HSCAN key cursor [MATCH pattern] [COUNT count]

Команда HSCAN используется для итерации полей и значений в хэше

Шаг 1: Создание хэша и добавление полей

  1. Создайте хэш с именем myhash и добавьте в него несколько полей:
HSET myhash name "John Doe"
HSET myhash age "30"
HSET myhash occupation "Software Developer"
HSET myhash city "San Francisco"
HSET myhash country "USA"

Шаг 2: Используйте HSCAN для итерации по хэшу

  1. Используйте команду HSCAN для итерации по полям в myhash:
HSCAN myhash 0

Команда ZSCAN

ZSCAN – это команда Redis, используемая для поэтапного перебора членов отсортированного набора. Она позволяет эффективно и неблокируемо извлекать члены набора вместе с их ассоциированными оценками. Эта команда особенно полезна при работе с большими отсортированными наборами, когда получение всех членов сразу может быть нецелесообразным. Команда ZSCAN выполняет итерацию по членам и оценкам в отсортированном наборе

ZSCAN key cursor [MATCH pattern] [COUNT count]

Шаг 1: Создание отсортированного множества и добавление членов

Давайте создадим отсортированный набор mysortedset и добавим в него несколько членов с оценками

ZADD mysortedset 1 "apple"
ZADD mysortedset 2 "banana"
ZADD mysortedset 3 "cherry"

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

ZSCAN mysortedset 0

Шаг 2: Использование MATCH для фильтрации членов (необязательно)

Если вы хотите отфильтровать члены, возвращаемые ZSCAN, вы можете использовать опцию MATCH. Например, чтобы найти членов, содержащих букву “e”, можно выполнить команду

ZSCAN mysortedset 0 MATCH *e*

Лучшие практики использования команд сканирования

  1. Используйте SCAN вместо KEYS: избегайте использования команды KEYS в производстве, так как она может заблокировать сервер. Используйте SCAN для неблокирующей итерации.
  2. Комбинируйте с MATCH и COUNT: Используйте опции MATCH и COUNT для повышения производительности и ограничения набора результатов.
  3. Работайте с большими массивами данных: При работе с большими наборами данных обрабатывайте ключи партиями с помощью курсоров, чтобы эффективно использовать память.
  4. Тестируйте в процессе разработки: Всегда тестируйте логику сканирования в среде разработки, чтобы убедиться, что она ведет себя так, как ожидается, перед развертыванием в производстве.

Заключение

Использование команд сканирования в Redis позволяет эффективно итерировать большие наборы данных в среде Linux, не перегружая сервер. Поняв, как использовать SCAN, SSCAN, HSCAN и ZSCAN, вы сможете эффективно управлять и извлекать данные из Redis. Эти команды необходимы для создания масштабируемых приложений, требующих обработки данных в реальном времени. Для получения дополнительной информации и подробного описания использования обратитесь к официальной документации Redis и поэкспериментируйте с этими командами в своей среде Redis

Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!

Используйте код при регистрации:

Skills