Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

KEYS vs SCAN în Redis & In-Memory Data Store

KEYS listează toate cheile după un tipar dintr-odată și blochează serverul; SCAN le parcurge treptat, cu un cursor.

Sintaxă comandă
KEYS pattern
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

Ce face KEYS vs SCAN

KEYS (Redis 1.0.0) întoarce toate cheile care se potrivesc unui tipar glob: * orice, ? un caracter, [ae] un caracter din listă. Parcurge toată baza într-un singur pas, așa că pe milioane de chei blochează serverul. Folosește-l doar la depanare, pe baze mici.

SCAN (Redis 2.8.0) întoarce cheile în loturi. Pornești cu cursorul 0, primești un cursor nou și un lot de chei, apoi repeți cu cursorul primit până când acesta devine din nou 0. MATCH filtrează după tipar, COUNT sugerează câte chei să verifice pe pas, iar TYPE (Redis 6.0+) filtrează după tip.

Parametri

Parametru Descriere
pattern Tipar glob, de exemplu utilizator:*.
cursor Poziția de unde continuă parcurgerea; începe cu 0.
COUNT count Câte chei să verifice aproximativ la fiecare pas (implicit 10).
TYPE type Doar chei de tipul dat: string, hash, list etc.

Ce returnează

KEYS: lista cheilor găsite. SCAN: o listă cu două elemente – cursorul următor și cheile din acest lot.

Exemple

Exemplul 1: KEYS pe o bază mică de test

Ordinea cheilor nu este garantată.

MSET utilizator:1 Ana utilizator:2 Dan produs:1 caiet
KEYS utilizator:*

Ieșire în redis-cli

127.0.0.1:6379> MSET utilizator:1 Ana utilizator:2 Dan produs:1 caiet
OK
127.0.0.1:6379> KEYS utilizator:*
1) "utilizator:2"
2) "utilizator:1"

Exemplul 2: Parcurgere completă cu SCAN

Primul apel întoarce cursorul 17 și câteva chei; al doilea pornește de la 17 și întoarce cursorul 0, adică parcurgerea s-a terminat. Un lot poate fi și gol, deci continuă până la cursorul 0.

SCAN 0 MATCH utilizator:* COUNT 100
SCAN 17 MATCH utilizator:* COUNT 100

Ieșire în redis-cli

127.0.0.1:6379> SCAN 0 MATCH utilizator:* COUNT 100
1) "17"
2) 1) "utilizator:2"
   2) "utilizator:1"
127.0.0.1:6379> SCAN 17 MATCH utilizator:* COUNT 100
1) "0"
2) 1) "utilizator:3"

Exemplul 3: Doar cheile de tip hash

Opțiunea TYPE filtrează după tipul valorii.

SCAN 0 TYPE hash

Ieșire în redis-cli

127.0.0.1:6379> SCAN 0 TYPE hash
1) "0"
2) 1) "profil:ana"
   2) "profil:dan"

Greșeli frecvente

  • Nu folosi KEYS * în producție: pe o bază mare blochează toți clienții până termină.
  • SCAN poate întoarce aceeași cheie de mai multe ori, iar cheile adăugate în timpul parcurgerii pot lipsi. Aplicația trebuie să tolereze asta.
  • Nu te opri când un lot e gol: parcurgerea se termină doar când cursorul întors este 0.

Comenzi înrudite

  • DEL / UNLINK: Șterge una sau mai multe chei; UNLINK eliberează memoria în fundal, fără să blocheze serverul.
  • TYPE: Arată tipul valorii unei chei: string, list, set, zset, hash, stream sau none dacă nu există.
  • HSCAN: Parcurge treptat câmpurile unui hash mare, cu un cursor, fără să blocheze serverul.
  • DBSIZE: Întoarce numărul de chei din baza de date selectată în acel moment.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: KEYS vs SCAN

Ai o nelămurire despre utilizarea comenzii KEYS vs SCAN sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.