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ă. SCANpoate î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.
Întrebări & Exemple de Cod:
KEYS vs SCANAi o nelămurire despre utilizarea comenzii
KEYS vs SCANsau 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.