Ce face SET
SET este comanda de bază din Redis: pune valoarea value la cheia key. Dacă cheia există deja, valoarea veche este înlocuită, indiferent de tipul ei, iar expirarea (TTL) veche se pierde.
Opțiunile transformă SET într-o comandă foarte utilă pentru cache și blocaje: EX setează expirarea în secunde, NX scrie doar dacă cheia nu există, iar GET întoarce valoarea veche. EX, PX, NX și XX există din Redis 2.6.12, KEEPTTL din 6.0, iar GET, EXAT și PXAT din 6.2.
Redis 8.4 a adăugat și condițiile IFEQ / IFNE (scrie doar dacă valoarea curentă este sau nu este egală cu una dată), utile pentru actualizări de tip compare-and-set.
Parametri
| Parametru | Descriere |
|---|---|
key |
Numele cheii. |
value |
Valoarea, salvată ca șir de octeți (text, număr sau date binare). |
EX seconds / PX milliseconds |
Cheia expiră după numărul dat de secunde / milisecunde. |
EXAT / PXAT |
Cheia expiră la un moment Unix exact (secunde / milisecunde). |
NX |
Scrie doar dacă cheia NU există. |
XX |
Scrie doar dacă cheia există deja. |
KEEPTTL |
Păstrează expirarea pe care o avea cheia. |
GET |
Returnează valoarea veche a cheii (sau nil) în loc de OK. |
Ce returnează
OK dacă valoarea a fost scrisă, (nil) dacă NX/XX au împiedicat scrierea. Cu GET: valoarea veche sau (nil) dacă cheia nu exista.
Exemple
Exemplul 1: Cache cu expirare de 60 de secunde
Salvăm prețul unui produs pentru 60 de secunde, apoi verificăm cât mai are de trăit cheia.
SET pret:laptop "3499" EX 60
GET pret:laptop
TTL pret:laptop
Ieșire în redis-cli
127.0.0.1:6379> SET pret:laptop "3499" EX 60
OK
127.0.0.1:6379> GET pret:laptop
"3499"
127.0.0.1:6379> TTL pret:laptop
(integer) 60
Exemplul 2: NX: scrie doar prima dată
Al doilea SET ... NX nu suprascrie valoarea, pentru că cheia există deja. Așa se face un blocaj simplu.
SET blocaj:raport ana NX EX 30
SET blocaj:raport dan NX EX 30
GET blocaj:raport
Ieșire în redis-cli
127.0.0.1:6379> SET blocaj:raport ana NX EX 30
OK
127.0.0.1:6379> SET blocaj:raport dan NX EX 30
(nil)
127.0.0.1:6379> GET blocaj:raport
"ana"
Exemplul 3: GET: înlocuiește și află valoarea veche
Cu opțiunea GET, comanda întoarce valoarea de dinainte, într-un singur pas atomic.
SET stare:comanda:1042 noua
SET stare:comanda:1042 expediata GET
GET stare:comanda:1042
Ieșire în redis-cli
127.0.0.1:6379> SET stare:comanda:1042 noua
OK
127.0.0.1:6379> SET stare:comanda:1042 expediata GET
"noua"
127.0.0.1:6379> GET stare:comanda:1042
"expediata"
Greșeli frecvente
- Un
SETsimplu pe o cheie cu expirare șterge expirarea: cheia devine permanentă. FoloseșteKEEPTTLdacă vrei să păstrezi TTL-ul. EXprimește secunde, iarPXmilisecunde:PX 60înseamnă 0,06 secunde, nu un minut.SETsuprascrie și chei de alt tip (hash, listă): datele vechi se pierd fără avertisment.
Comenzi înrudite
GET: Citește valoarea text salvată la o cheie; întoarce nil dacă cheia nu există.MSET / MGET: Scrie (MSET) sau citește (MGET) mai multe chei string într-o singură comandă atomică.EXPIRE / PEXPIRE: Setează după câte secunde (EXPIRE) sau milisecunde (PEXPIRE) se șterge automat o cheie.TTL / PTTL: Arată cât timp mai are o cheie până expiră: în secunde (TTL) sau milisecunde (PTTL); -1 fără expirare, -2 dacă nu există.GETDEL / GETEX: GETDEL citește și șterge o cheie într-un singur pas; GETEX citește și schimbă expirarea cheii.