Использование команд scan в Redis в Linux
Redis, хранилище структур данных in-memory с открытым исходным кодом, известно своей скоростью и универсальностью в качестве базы данных ключ-значение. Одной из его мощных особенностей является возможность инкрементного итерационного просмотра наборов данных с помощью команд scan. Это особенно полезно при работе с большими массивами данных, так как позволяет эффективно извлекать данные, не перегружая сервер. Для пользователей выделенных серверов Linux использование команд scan в Redis может повысить производительность работы с данными, обеспечивая точную, оптимизированную по ресурсам обработку наборов данных. В этой статье мы рассмотрим, как эффективно использовать команды scan в Redis в среде Linux, предложим подробные примеры и лучшие практики для управления и получения данных в масштабе.
Что такое команды scan?
Команды scan в Redis позволяют выполнять неблокируемый итерационный поиск по ключам, наборам, хэшам и отсортированным наборам. В отличие от команды KEYS, которая может быть опасна для больших наборов данных, поскольку возвращает все совпадающие ключи сразу, команды scan возвращают небольшое количество элементов за один раз. Это минимизирует влияние на производительность и позволяет выполнять инкрементную итерацию.
Команды scan ключей
- SCAN: Итерация по ключам в пространстве ключей.
- SSCAN: итерация по элементам в наборе.
- HSCAN: итерация по полям и значениям в хэше.
- ZSCAN: итерация по членам и оценкам в отсортированном множестве.
Основной синтаксис команд scan
Каждая команда scan имеет схожий синтаксис:
- курсор: Целое число, обозначающее позицию, с которой нужно начать сканирование. Чтобы начать новое сканирование, используйте 0.
- MATCH pattern: (необязательно) Шаблон для фильтрации возвращаемых ключей. Поддерживаются шаблоны в стиле glob.
- COUNT count: (необязательно) Подсказка для Redis о том, сколько элементов возвращать в каждой итерации.
Установка Redis в Linux
Для CentOS/RHEL используйте:
После установки запустите сервер Redis:
Подключение к Redis
Откройте терминал и подключитесь к экземпляру Redis с помощью Redis CLI:
Теперь вы можете выполнять команды Redis в CLI.
Использование команды SCAN
Пример 1: Базовый SCAN
Чтобы получить все ключи в базе данных Redis, вы можете использовать:
Эта команда вернет курсор и список ключей.
Пример 2: Использование команды MATCH для фильтрации клавиш
Если вы хотите найти ключи, которые соответствуют определенному шаблону, например, ключи, начинающиеся с “user:”, вы можете использовать:
Эта команда возвращает только те ключи, которые начинаются с “user:”.
Пример 3: Указание COUNT
Чтобы указать, сколько ключей Redis должен возвращать в каждой итерации, вы можете задать счетчик:
При этом будет сделана попытка вернуть примерно 10 ключей. Обратите внимание, что реальное число возвращаемых ключей может быть меньше этого.
Пример 4: Итерация по всем ключам
Чтобы перебрать все ключи за несколько итераций, необходимо отслеживать возвращаемый курсор. Вот пример простого сценария оболочки:
cursor=0
while true; do
result=$(redis-cli SSCAN myset $cursor MATCH apple:*)
echo "$result" # Обработать результат по мере необходимости
cursor=$(echo "$result" | awk 'NR==1{print $1}') # Обновление курсора
if [[ "$cursor" == "0" ]]; then
break # Остановитесь, когда курсор вернется к 0
fi
done
Использование команды SSCAN
Команда SSCAN используется для итерационного перебора элементов в наборе. Ее синтаксис аналогичен синтаксису команды SCAN:
Пример SSCAN
Шаг 1: Создание набора и добавление элементов
Давайте создадим набор под названием myset и добавим в него несколько элементов: