Economisiți 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul: Skills Începeți
Secțiuni
Linux Servere dedicate

Utilizarea Comenzilor Redis Scan pe Linux: Un Ghid Complet

Redis este un depozit de structuri de date în memorie, open-source, de înaltă performanță, utilizat pe scară largă ca bază de date cheie-valoare, cache și broker de mesaje. Printre caracteristicile sale cele mai puternice — dar adesea subutilizate — se numără comenzile scan, care vă permit să iterați incremental prin seturi de date mari fără a bloca serverul sau a degrada performanța.

Dacă rulați Redis pe un server bazat pe Linux, stăpânirea comenzilor scan este esențială pentru construirea de aplicații scalabile, gata pentru producție. Spre deosebire de comanda periculoasă KEYS, care recuperează toate cheile potrivite într-o singură operație de blocare, comenzile scan returnează date în loturi mici și ușor de gestionat — ceea ce le face instrumentul corect pentru orice mediu care gestionează volume semnificative de date.

În acest ghid cuprinzător, veți învăța exact cum să utilizați SCAN, SSCAN, HSCAN și ZSCAN în Redis pe Linux, complet cu exemple din lumea reală, scripturi shell și cele mai bune practici pentru implementări în producție.

Ce sunt comenzile Redis Scan?

Comenzile Redis scan oferă un mecanism bazat pe cursor, non-blocking pentru iterarea peste chei, seturi, hash-uri și seturi sortate. Fiecare comandă returnează un subset mic de elemente per apel împreună cu o valoare cursor, pe care o utilizezi pentru a continua iterația în apelurile ulterioare. Când cursorul revine la 0, setul de date complet a fost parcurs.

Această abordare este fundamental mai sigură și mai eficientă decât KEYS, care blochează întregul server Redis până când termină scanarea — o problemă critică în mediile de producție cu milioane de chei.

Cele patru comenzi Scan de bază

ComandăScop
SCANIterează peste chei în întregul spațiu de chei
SSCANIterează peste elemente într-un Set
HSCANIterează peste câmpuri și valori într-un Hash
ZSCANIterează peste membri și scoruri într-un Sorted Set

Sintaxa de bază a comenzilor Scan

Toate patru comenzi scan au o structură de sintaxă consistentă:

SCAN cursor [MATCH pattern] [COUNT count]
SSCAN key cursor [MATCH pattern] [COUNT count]
HSCAN key cursor [MATCH pattern] [COUNT count]
ZSCAN key cursor [MATCH pattern] [COUNT count]

Parametri explicați

  • cursor — Un întreg reprezentând poziția curentă în iterație. Întotdeauna începeți cu 0 pentru a începe o nouă scanare. Redis returnează un nou cursor cu fiecare răspuns; utilizați-l în următorul apel pentru a continua.
  • MATCH pattern *(opțional)* — Filtrează rezultatele folosind potrivirea modelelor în stil glob (de exemplu, user:*, *session*). Notă: filtrarea se întâmplă *după* recuperare, deci potrivirile cu densitate scăzută pot necesita multe iterații.
  • COUNT count *(opțional)* — Un indiciu pentru Redis sugerând câte elemente să returneze per iterație. Aceasta nu este o limită strictă; Redis poate returna mai mult sau mai puțin. Valoarea implicită este 10.

Instalarea Redis pe Linux

Înainte de a utiliza comenzi scan, trebuie să aveți Redis instalat și rulând pe serverul dvs. Linux. Indiferent dacă sunteți într-un mediu de producție cu trafic ridicat sau pe o mașină de dezvoltare, procesul de instalare este simplu.

> Sfat: Pentru sarcinile de producție care necesită Redis la scară, luați în considerare implementarea pe un plan VPS Hosting sau pe un Server Dedicat pentru a vă asigura că aveți resursele de memorie, CPU și I/O pe care le cere Redis.

Instalarea Redis pe Debian/Ubuntu

sudo apt update
sudo apt install redis-server -y

Instalarea Redis pe CentOS/RHEL

sudo yum install redis -y

Pornirea serviciului Redis

sudo systemctl start redis
sudo systemctl enable redis

Verificarea instalării

sudo systemctl status redis

Ar trebui să vedeți active (running) în rezultat. Acum conectați-vă la Redis CLI:

redis-cli

Odată în CLI, testați conexiunea:

127.0.0.1:6379> PING
PONG

Sunteți gata să începeți să utilizați comenzi scan.

Utilizarea Comenzii SCAN

Comanda SCAN iterează peste toate cheile din spațiul de chei Redis. Este înlocuitorul general pentru comanda KEYS în mediile de producție.

Exemplul 1: SCAN de bază

Pentru a începe scanarea tuturor cheilor din bază de date, începeți cu cursorul 0:

SCAN 0

Exemplu de ieșire:

1) "14"
2) 1) "session:abc123"
   2) "user:1001"
   3) "product:55"

Primul element (14) este cursorul următor. Utilizați-l în apelul dvs. următor SCAN. Când cursorul returnat este 0, iterația completă este finalizată.

Exemplul 2: Filtrarea cheilor cu MATCH

Pentru a prelua doar cheile care se potrivesc cu un anumit model — de exemplu, toate cheile prefixate cu user::

SCAN 0 MATCH user:*

Aceasta returnează doar cheile ale căror nume încep cu user:. Continuați iterația până când cursorul returnează 0 pentru a vă asigura că ați scanat întregul spațiu de chei.

Exemplul 3: Controlarea dimensiunii lotului cu COUNT

Pentru a sugera Redis-ului să returneze aproximativ 100 de chei per iterație:

SCAN 0 COUNT 100

Rețineți: COUNT este o *sugestie*, nu o garanție. Redis poate returna rezultate ușor mai multe sau mai puține în funcție de structurile de date interne.

Exemplul 4: Iterația completă a spațiului de chei cu un script Shell

În scenariile din lumea reală, va trebui să parcurgeți întregul spațiu de chei programatic. Iată un script Bash gata pentru producție care iterează prin toate cheile care se potrivesc cu un model:

#!/bin/bash

cursor=0
echo "Starting full keyspace scan..."

while true; do
    # Execute SCAN and capture the result
    result=$(redis-cli SCAN $cursor MATCH user:* COUNT 100)

    # Extract the new cursor (first line of output)
    cursor=$(echo "$result" | head -n 1)

    # Extract and display the keys (remaining lines)
    keys=$(echo "$result" | tail -n +2)
    echo "Keys found:"
    echo "$keys"

    # Break the loop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Scan complete."
        break
    fi
done

Pentru a rula acest script:

chmod +x scan_keys.sh
./scan_keys.sh

Utilizarea Comenzii SSCAN

SSCAN este utilizată pentru a itera incremental prin membrii unui Redis Set. Urmează același model bazat pe cursor ca SCAN.

Pasul 1: Creați un Set și Adăugați Membri

SADD myset "apple"
SADD myset "banana"
SADD myset "cherry"
SADD myset "date"
SADD myset "elderberry"
SADD myset "mango"
SADD myset "mango:tropical"
SADD myset "mango:dried"

Pasul 2: SSCAN de Bază

Scanați toate elementele din myset începând de la cursor 0:

SSCAN myset 0

Pasul 3: Filtrați Elementele cu MATCH

Pentru a recupera doar elementele care se potrivesc cu modelul mango:*:

SSCAN myset 0 MATCH mango:*

Pasul 4: Iterarea Prin Set cu un Script Shell

#!/bin/bash

cursor=0
echo "Scanning through myset:"

while true; do
    # Scan the set
    result=$(redis-cli SSCAN myset $cursor COUNT 10)

    # Update cursor
    cursor=$(echo "$result" | head -n 1)

    # Print elements returned
    elements=$(echo "$result" | tail -n +2)
    echo "Elements: $elements"

    # Stop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Set scan complete."
        break
    fi
done

Salvați ca scan_myset.sh, faceți-l executabil și rulați:

chmod +x scan_myset.sh
./scan_myset.sh

Utilizarea Comenzii HSCAN

HSCAN iterează prin câmpurile și valorile unui Hash Redis. Aceasta este deosebit de utilă atunci când un hash conține sute sau mii de câmpuri și trebuie să le procesezi fără a încărca totul în memorie deodată.

Pasul 1: Creează un Hash și Adaugă Câmpuri

HSET myhash name "John Doe"
HSET myhash age "30"
HSET myhash occupation "Software Developer"
HSET myhash city "San Francisco"
HSET myhash country "USA"
HSET myhash email "john@example.com"

Pasul 2: HSCAN de Bază

HSCAN myhash 0

Exemplu de ieșire:

1) "0"
2) 1) "name"
   2) "John Doe"
   3) "age"
   4) "30"
   5) "occupation"
   6) "Software Developer"
   ...

Rezultatele sunt returnate ca perechi alternante de câmp-valoare.

Pasul 3: Filtrează Câmpurile Hash cu MATCH

Pentru a recupera doar câmpurile ale căror nume conțin "city" sau se potrivesc unui șablon:

HSCAN myhash 0 MATCH *city*

Pasul 4: Iterarea Prin un Hash cu un Script Shell

#!/bin/bash

cursor=0
echo "Scanning hash: myhash"

while true; do
    result=$(redis-cli HSCAN myhash $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    fields=$(echo "$result" | tail -n +2)

    echo "Fields and values:"
    echo "$fields"

    if [[ "$cursor" == "0" ]]; then
        echo "Hash scan complete."
        break
    fi
done

Utilizarea Comenzii ZSCAN

ZSCAN iterează prin membrii și scorurile unui Redis Sorted Set. Seturile sortate sunt utilizate în mod obișnuit pentru clasamente, cozi de prioritate și date de serii temporale — toate scenariile în care scanarea eficientă a colecțiilor mari este critică.

Pasul 1: Creați un Sorted Set și Adăugați Membri

ZADD mysortedset 1 "apple"
ZADD mysortedset 2 "banana"
ZADD mysortedset 3 "cherry"
ZADD mysortedset 4 "date"
ZADD mysortedset 5 "elderberry"

Pasul 2: ZSCAN de Bază

ZSCAN mysortedset 0

Exemplu de rezultat:

1) "0"
2) 1) "apple"
   2) "1"
   3) "banana"
   4) "2"
   5) "cherry"
   6) "3"

Rezultatele sunt returnate ca perechi alternante de membru-scor.

Pasul 3: Filtrați Membrii cu MATCH

Pentru a găsi toți membrii ai căror nume conțin litera "e":

ZSCAN mysortedset 0 MATCH *e*

Pasul 4: Script Complet de Iterație Sorted Set

#!/bin/bash

cursor=0
echo "Scanning sorted set: mysortedset"

while true; do
    result=$(redis-cli ZSCAN mysortedset $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    members=$(echo "$result" | tail -n +2)

    echo "Members and scores:"
    echo "$members"

    if [[ "$cursor" == "0" ]]; then
        echo "Sorted set scan complete."
        break
    fi
done

Comparație Comenzi Scan: Referință Rapidă

Caracteristică`SCAN``SSCAN``HSCAN``ZSCAN`
ȚintăToate cheileMembri setCâmpuri/valori hashMembri/scoruri set sortat
Necesită nume cheieNuDaDaDa
Suportă MATCHDaDaDaDa
Suportă COUNTDaDaDaDa
Format ieșireNume cheiȘiruri membruPerechi câmp-valoarePerechi membru-scor
BlocareNuNuNuNu

Cele mai bune practici pentru utilizarea comenzilor Redis Scan în producție

1. Utilizați întotdeauna SCAN în loc de KEYS în producție

Comanda KEYS este single-threaded și blochează toate celelalte operații Redis până la finalizare. Pe o bază de date cu milioane de chei, aceasta poate cauza creșteri severe de latență. Nu utilizați niciodată KEYS în producție. SCAN este alternativa corectă, non-blocantă.

2. Ajustați COUNT în funcție de dimensiunea setului de date

Pentru seturi de date mici (< 1.000 chei), valoarea implicită COUNT 10 este acceptabilă. Pentru seturi de date mari, măriți COUNT la 1001000 pentru a reduce numărul de round trips, menținând răspunsurile individuale gestionabile.

3. Nu vă bazați doar pe MATCH pentru eficiență

Filtrul MATCH este aplicat *după* ce Redis recuperează elementele intern. Dacă modelul dvs. se potrivește doar cu o mică fracțiune din chei, Redis scanează în continuare setul de date complet intern. Utilizați convenții de denumire a cheilor (de exemplu, prefixe consistente) pentru a face MATCH mai eficient.

4. Procesați rezultatele în loturi

Nu acumulați niciodată toate rezultatele scanării în memorie înainte de procesare. În schimb, procesați fiecare lot imediat după ce este returnat. Aceasta este deosebit de importantă pe servere cu memorie limitată.

5. Gestionați starea cursorului cu atenție

Inițializați întotdeauna cursorul la 0 și actualizați-l cu fiecare răspuns. Dacă aplicația dvs. se blochează în mijlocul unei scanări, reporniți de la 0. Cursorii Redis nu sunt persistenți între restarturi de server.

6. Testați temeinic în dezvoltare mai întâi

Înainte de a implementa logica bazată pe scan în producție, validați-o într-un mediu de staging cu un set de date reprezentativ. Verificați că bucla dvs. se termină corect atunci când cursorul revine la 0.

7. Securizați instanța Redis

Redis nu ar trebui niciodată expus pe internetul public fără autentificare. Utilizați requirepass în configurația Redis, conectați-vă la localhost sau la o interfață de rețea privată, și utilizați reguli de firewall pentru a restricționa accesul.

Alegerea mediului de hosting potrivit pentru Redis

Performanța Redis este direct legată de RAM disponibil, viteza CPU și latența rețelei. Alegerea infrastructurii de hosting potrivite este la fel de importantă ca scrierea unor comenzi Redis eficiente.

  • Proiecte de dezvoltare și mici: Shared Web Hosting poate fi suficient pentru utilizarea ușoară a Redis, deși instanțele Redis dedicate sunt întotdeauna preferate.
  • Aplicații în creștere: Un plan VPS Hosting vă oferă resurse dedicate, acces root și capacitatea de a ajusta configurația Redis (maxmemory, setări de persistență, etc.) exact după nevoile dumneavoastră.
  • Sisteme de producție cu trafic ridicat: Dedicated Servers oferă RAM și resurse CPU maxime pe care Redis le poate utiliza, eliminând complet contenția de resurse.
  • Sarcini AI și ML care utilizează Redis ca vector store: GPU Hosting oferă puterea de calcul necesară pentru generarea de embedding și căutarea de similaritate alături de Redis.

Pentru aplicațiile care necesită, de asemenea, un panou de control web pentru o gestionare mai ușoară, VPS cu cPanel oferă o interfață ușor de utilizat alături de controlul complet al serverului.

Depanare Probleme Comune

SCAN Returnează 0 Elemente Repetat

Aceasta înseamnă de obicei că modelul dvs. MATCH nu se potrivește cu nicio cheie, sau setul de date este gol. Verificați denumirea cheilor cu DBSIZE pentru a verifica numărul total de chei.

127.0.0.1:6379> DBSIZE
(integer) 15420

Cursor Nu Se Întoarce Niciodată la 0

Aceasta nu ar trebui să se întâmple într-o instanță Redis stabilă. Dacă se întâmplă, verificați compatibilitatea versiunii Redis (comenzile scan necesită Redis 2.8+) sau întreruperile de conexiune care vă resetează urmărirea cursorului.

Script Se Blochează Indefinit

Asigurați-vă că bucla dvs. citește corect cursorul din prima linie a ieșirii redis-cli. O eroare de analiză care produce întotdeauna un cursor diferit de zero va cauza o buclă infinită.

Concluzie

Comenzile Redis scan — SCAN, SSCAN, HSCAN și ZSCAN — sunt instrumente indispensabile pentru orice dezvoltator sau administrator de sistem care lucrează cu Redis la scară pe Linux. Ele oferă un mecanism sigur, non-blocking, bazat pe cursor pentru iterarea prin seturi mari de date fără riscurile de performanță asociate comenzilor precum KEYS.

Prin combinarea comenzilor scan cu modele MATCH, indicii COUNT corespunzători și scripturi shell bine structurate, puteți construi conducte eficiente de procesare a datelor care se scalează elegant odată cu dimensiunea setului de date. Urmând cele mai bune practici prezentate în acest ghid — în special în ceea ce privește siguranța producției, gestionarea memoriei și selectarea infrastructurii — vă veți asigura că implementările Redis rămân performante și fiabile.

Pentru cele mai recente opțiuni de comenzi și detalii avansate de configurare, consultați întotdeauna documentația oficială Redis. Și când sunteți gata să implementați Redis într-un mediu Linux de calitate producție, explorați VPS Hosting și Dedicated Servers AlexHost pentru infrastructură construită pentru a gestiona sarcini exigente, cu consum intensiv de memorie.