MSET / MGET în Redis & In-Memory Data Store

Scrie (MSET) sau citește (MGET) mai multe chei string într-o singură comandă atomică.

Sintaxă comandă
MSET key value [key value ...]
MGET key [key ...]
MSETNX key value [key value ...]

Ce face MSET / MGET

MSET scrie mai multe perechi cheie–valoare deodată, atomic: niciun client nu vede doar o parte dintre ele scrise. MGET citește mai multe chei și întoarce valorile în aceeași ordine în care le-ai cerut.

MSETNX scrie toate cheile doar dacă NICIUNA nu există; dacă măcar una există, nu scrie nimic. MGET există din Redis 1.0.0, MSET și MSETNX din 1.0.1.

Parametri

Parametru Descriere
key value ... Perechile de scris (pentru MSET / MSETNX).
key ... Cheile de citit (pentru MGET).

Ce returnează

MSET: mereu OK. MGET: o listă cu valorile, cu (nil) pentru cheile care lipsesc sau nu sunt string. MSETNX: 1 dacă a scris, 0 dacă nu.

Exemple

Exemplul 1: Setări de aplicație scrise și citite deodată

Cheia setari:tema nu există, deci locul ei din răspuns este (nil).

MSET setari:limba ro setari:moneda lei setari:oras Iasi
MGET setari:limba setari:moneda setari:tema

Ieșire în redis-cli

127.0.0.1:6379> MSET setari:limba ro setari:moneda lei setari:oras Iasi
OK
127.0.0.1:6379> MGET setari:limba setari:moneda setari:tema
1) "ro"
2) "lei"
3) (nil)

Exemplul 2: MSETNX: totul sau nimic

Prima comandă reușește. A doua nu scrie nimic, pentru că stoc:mouse există deja, deci nici stoc:monitor nu este creată.

MSETNX stoc:tastatura 12 stoc:mouse 30
MSETNX stoc:mouse 5 stoc:monitor 4
MGET stoc:mouse stoc:monitor

Ieșire în redis-cli

127.0.0.1:6379> MSETNX stoc:tastatura 12 stoc:mouse 30
(integer) 1
127.0.0.1:6379> MSETNX stoc:mouse 5 stoc:monitor 4
(integer) 0
127.0.0.1:6379> MGET stoc:mouse stoc:monitor
1) "30"
2) (nil)

Greșeli frecvente

  • În Redis Cluster, cheile dintr-un MSET/MGET trebuie să fie în același hash slot (de exemplu cu hash tag-uri: {user:7}:nume, {user:7}:oras), altfel primești eroarea CROSSSLOT.
  • MSET nu acceptă expirare. Pentru chei cu TTL folosește SET ... EX pentru fiecare sau un pipeline.

Comenzi înrudite

  • SET: Salvează o valoare text la o cheie, opțional cu expirare (EX/PX), doar dacă nu există (NX) sau doar dacă există (XX).
  • GET: Citește valoarea text salvată la o cheie; întoarce nil dacă cheia nu există.
  • HMGET: Citește mai multe câmpuri dintr-un hash într-o singură comandă, în ordinea cerută.