HEXPIRE / HTTL / HPERSIST în Redis & In-Memory Data Store

Setează expirarea pe câmpuri individuale dintr-un hash (Redis 7.4+), le verifică TTL-ul sau o elimină.

Sintaxă comandă
HEXPIRE key seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]
HTTL key FIELDS numfields field [field ...]
HPERSIST key FIELDS numfields field [field ...]

Ce face HEXPIRE / HTTL / HPERSIST

Până la Redis 7.4 se putea seta expirarea doar pe o cheie întreagă. HEXPIRE pune un TTL pe unul sau mai multe câmpuri ale unui hash: câmpul dispare singur, restul hash-ului rămâne. Variantele HPEXPIRE, HEXPIREAT și HPEXPIREAT lucrează în milisecunde sau cu momente Unix.

După cuvântul FIELDS scrii numărul de câmpuri și apoi câmpurile. HTTL arată cât mai are fiecare câmp, iar HPERSIST elimină expirarea. Răspunsul e o listă cu un cod pentru fiecare câmp.

Parametri

Parametru Descriere
seconds Durata până la ștergerea câmpurilor.
NX | XX | GT | LT Aceleași condiții ca la EXPIRE.
FIELDS numfields field ... Numărul de câmpuri, urmat de numele lor.

Ce returnează

O listă cu un cod pe câmp. HEXPIRE: 1 setat, 0 condiție neîndeplinită, 2 câmp șters imediat (durată 0), -2 câmp inexistent. HTTL: secundele rămase, -1 fără expirare, -2 câmp inexistent. HPERSIST: 1 eliminat, -1 nu avea expirare, -2 inexistent.

Exemple

Exemplul 1: Un cod temporar într-un profil

Doar câmpul cod_sms expiră după 5 minute; email nu există, deci primește -2.

HSET utilizator:7 nume Ana cod_sms 482913
HEXPIRE utilizator:7 300 FIELDS 2 cod_sms email
HTTL utilizator:7 FIELDS 2 cod_sms nume

Ieșire în redis-cli

127.0.0.1:6379> HSET utilizator:7 nume Ana cod_sms 482913
(integer) 2
127.0.0.1:6379> HEXPIRE utilizator:7 300 FIELDS 2 cod_sms email
1) (integer) 1
2) (integer) -2
127.0.0.1:6379> HTTL utilizator:7 FIELDS 2 cod_sms nume
1) (integer) 300
2) (integer) -1

Exemplul 2: Anularea expirării unui câmp

HPERSIST face câmpul din nou permanent.

HPERSIST utilizator:7 FIELDS 1 cod_sms
HTTL utilizator:7 FIELDS 1 cod_sms

Ieșire în redis-cli

127.0.0.1:6379> HPERSIST utilizator:7 FIELDS 1 cod_sms
1) (integer) 1
127.0.0.1:6379> HTTL utilizator:7 FIELDS 1 cod_sms
1) (integer) -1

Greșeli frecvente

  • Nu uita numărul de după FIELDS: HEXPIRE k 60 FIELDS cod dă eroare, corect este FIELDS 1 cod.
  • Comenzile nu există pe servere mai vechi de Redis 7.4 și nici în unele servicii compatibile Redis.
  • Un HSET pe un câmp cu expirare îi elimină expirarea, la fel ca SET pe o cheie.

Comenzi înrudite

  • 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ă.
  • HSET: Scrie unul sau mai multe câmpuri într-un hash (un obiect cu perechi câmp–valoare), creând hash-ul dacă lipsește.