📒 

Використання команд scan в Redis на Linux

Redis, сховище структур даних у пам’яті з відкритим вихідним кодом, відоме своєю швидкістю та універсальністю як база даних типу “ключ-значення”. Однією з його потужних функцій є можливість інкрементального ітераційного перегляду наборів даних за допомогою команд scan. Це особливо корисно при роботі з великими наборами даних, оскільки дозволяє ефективно шукати дані, не перевантажуючи сервер. Для користувачів на виділеному сервері Linux використання команд scan в Redis може підвищити продуктивність роботи з даними за рахунок точної, оптимізованої для ресурсів обробки наборів даних. У цій статті ми розглянемо, як ефективно використовувати команди scan в Redis в середовищі Linux, пропонуючи детальні приклади і кращі практики для управління і пошуку даних в масштабі…

Що таке команди scan?

Команди scan у Redis надають можливість ітеративно переглядати ключі, набори, хеші та відсортовані набори у неблокуючий спосіб. На відміну від команди KEYS, яка може бути небезпечною для великих наборів даних, оскільки повертає всі відповідні ключі одразу, команди scan повертають невелику кількість елементів за раз. Це мінімізує вплив на продуктивність і дозволяє виконувати інкрементні ітерації.

Команди scan ключів

  1. SCAN: Перебирає клавіші у просторі клавіш.
  2. SSCAN: Перебирає елементи у наборі.
  3. HSCAN: Перебирає поля та значення у хеші.
  4. ZSCAN: Перебирає члени та оцінки у відсортованому наборі.

Базовий синтаксис команд scan

Кожна команда scan має схожий синтаксис:

СКАНУВАТИ курсор [ЗВ'ЯЗОК шаблон] [ВІДЛІК відлік]

  • курсор: Ціле число, яке представляє позицію, з якої слід почати scan. Щоб почати нове scan, використовуйте 0.
  • Шаблон збігу: (необов’язково) Шаблон для фільтрації повернених ключів. Підтримує шаблони у стилі glob.
  • COUNT кількість: (необов’язково) Підказка Redis про те, скільки елементів повертати на кожній ітерації.

Встановлення Redis у Linux

Перш ніж ми зануримося у використання команд scan, переконайтеся, що Redis встановлено у вашій системі Linux. Для тих, хто використовує виділений сервер Debian, встановлення Redis є простим і може покращити можливості сервера для ефективної обробки даних у пам’яті. Тут описано, як встановити Redis у системі на основі Debian, щоб забезпечити стабільне середовище, оптимізоване для високопродуктивних операцій.

Виконуючи ці кроки, ви налаштуєте Redis таким чином, щоб використовувати ресурси і стабільність вашого виділеного сервера Debian, що ідеально підходить для надійної роботи з даними.

sudo apt update

sudo apt install redis-server

Для 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 ім'я користувача:* * SCAN 0 MATCH ім'я користувача:* * SCAN 0 MATCH ім'я користувача:*

Ця команда повертає лише ключі, які починаються з “user:”.

Приклад 3: Вказівка COUNT

Щоб підказати, скільки ключів Redis має повертати на кожній ітерації, ви можете вказати кількість:

SCAN 0 COUNT 10

Це буде спроба повернути приблизно 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
виконано

Використання команди SSCAN

Команда SSCAN використовується для ітераційного перебору елементів у множині. Її синтаксис подібний до синтаксису команди SCAN:

SSCAN клавіша-курсор [Збіг шаблон] [COUNT кількість]

Приклад SSCAN

Крок 1: Створення набору та додавання елементів

Створимо множину з назвою myset і додамо до неї кілька елементів:

SADD myset "apple"
SADD myset "banana"
SADD myset "cherry"
SADD myset "date"
SADD myset "бузина"

Крок 2: Використання команди SSCAN

Тепер, коли у нас є множина з назвою myset, ми можемо використовувати команду SSCAN для ітераційного перегляду її елементів.

  1. Базова команда SSCAN:Припустимо, у вас є множина з назвою “myset”. Щоб просканувати її елементи:
    SSCAN myset 0
  2. Використання MATCH:Щоб відфільтрувати елементи набору на основі шаблону і додати деякі елементи, які містять слово “манго” та інші варіації::
    SSCAN myset 0 MATCH mango:* * SSCAN myset 0 MATCH mango:* * SSCAN myset 0 MATCH mango:*
  3. Перебірмножини:Ви можете використовувати цикл для перебору множини :

#!/bin/bash
cursor=0
echo "Scanning through myset:"
while true; do
# Скануємо множину
result=$(redis-cli SSCAN myset $cursor)
# Вивести елементи, повернуті SSCAN
echo "$result"
# Оновити курсор для наступної ітерації
cursor=$(echo "$result" | awk 'NR==1{print $1}')
# Перервати цикл, якщо курсор повернувся до 0
if [[ "$cursor" == "0" ]]; then
перерва
fi
виконано

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

  1. Збережіть скрипт як scan_myset.sh.
  2. Зробіть його виконуваним:
    chmod x scan_myset.sh
  3. Запустіть скрипт:
    ./scan_myset.sh

Використання команд HSCAN і ZSCAN

Команда HSCAN

Команда HSCAN перебирає поля і значення в хеші:

HSCAN ключовий курсор [MATCH шаблон] [COUNT кількість]

Команда HSCAN використовується для перебору полів і значень у хеші.

Крок 1: Створення хешу і додавання полів

  1. Створіть хеш з ім’ям myhash і додайте до нього кілька полів:
HSET myhash ім'я "John Doe"
HSET myhash вік "30"
HSET myhash професія "Software Developer"
HSET myhash місто "San Francisco"
HSET myhash країна "USA"

Крок 2: Використовуємо HSCAN для ітерації через хеш

  1. Використовуйте команду HSCAN для перебору полів в myhash:
HSCAN myhash 0

Команда ZSCAN

ZSCAN – це команда Redis, яка використовується для інкрементного перебору елементів відсортованої множини. Вона дозволяє отримувати елементи разом з їхніми оцінками у ефективний і неблокуючий спосіб. Ця команда особливо корисна для роботи з великими відсортованими множинами, де отримання всіх елементів за один раз може бути недоцільним.

Команда ZSCAN виконує ітераційний перебір елементів і оцінок у відсортованому наборі:

ZSCAN клавіша-курсор [Збіг за зразком] [COUNT кількість]

Крок 1: Створіть відсортовану множину та додайте членів

Створимо відсортовану множину з назвою mysortedset і додамо кілька елементів з оцінками:

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

Базова команда ZSCAN:

Щоб почати scan відсортованої множини, використовуйте:

ZSCAN mysortedset 0

Крок 2: Використання MATCH для фільтрації елементів (необов’язково)

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

ZSCAN mysortedset 0 MATCH *e*

Найкращі практики використання команд scan

  1. Використовуйте SCAN замість KEYS: Уникайте використання команди KEYS у виробництві, оскільки вона може заблокувати сервер. Використовуйте SCAN для неблокуючих ітерацій.
  2. Комбінуйте з MATCH і COUNT: Використовуйте опції MATCH і COUNT, щоб підвищити продуктивність і обмежити набір результатів.
  3. Обробка великих наборів даних: При роботі з великими наборами даних обробляйте ключі пакетами за допомогою курсорів для ефективного керування пам’яттю.
  4. Тестування під час розробки: Завжди тестуйте логіку scan в середовищі розробки, щоб переконатися, що вона працює належним чином перед розгортанням у виробництві.

Висновок

Використання команд scan в Redis дозволяє ефективно ітераційно переглядати великі набори даних в середовищі Linux, не перевантажуючи ваш сервер. Розуміючи, як використовувати SCAN, SSCAN, HSCAN і ZSCAN, ви зможете ефективно керувати і отримувати дані з Redis. Ці команди необхідні для створення масштабованих додатків, які потребують обробки даних у реальному часі. Для отримання додаткової інформації та детальних інструкцій зверніться до офіційної документації Redis і поекспериментуйте з цими командами у вашому середовищі Redis.