REDIS

Învață Redis: comenzi, structuri de date, pub/sub și caching explicate cu exemple

19 comenzi & structuri 5 categorii

Redis (Remote Dictionary Server), conceput inițial de Salvatore Sanfilippo (antirez), este cel mai rapid și versatil motor open-source de stocare a datelor în memorie (In-Memory Data Store) din lume. Rulând ca bază de date NoSQL cheie-valoare de ultra-înaltă performanță, sistem de caching distribuit și broker de mesagerie, Redis deservește în mod uzual sute de mii sau milioane de operațiuni pe secundă cu latențe sub-milisecundă per comandă.

Spre deosebire de sistemele tradiționale de baze de date pe disc (unde viteza este gâtuită de I/O-ul subsistemului de stocare și caching-ul de buffer pool), datele din Redis rezidă exclusiv în memoria RAM fizică. Redis oferă structuri de date native de nivel înalt (Strings, Hashes, Lists, Sets, Sorted Sets, HyperLogLog, Bitmaps, Streams și documente JSON), combinând viteza memoriei cu persistență pe disc configurabilă și disponibilitate ridicată prin clusterizare.

Arhitectura Internă Redis: Reactor Pattern și I/O Multi-Threaded
# 1. Bucle de Evenimente Non-Blocante (ae Event Loop):
#    - Redis implementează propriul reactor de evenimente 'ae' peste multiplexoarele OS:
#      epoll (Linux), kqueue (macOS/FreeBSD) sau select/poll.
#    - Sute de mii de conexiuni TCP paralele sunt monitorizate fără a aloca un fir per client!

# 2. Execuție Single-Threaded a Comenzilor:
#    - Toate comenzile asupra structurilor de date din memorie rulează STRICT secvențial,
#      pe un singur fir principal de execuție (Main Thread).
#    - AVANTAJE CRUCIALE: Zero blocaje (locks), zero curse critice (race conditions), 
#      fără context-switching CPU și atomicitate absolută pentru orice comandă!

# 3. Multi-Threaded I/O (introdus în Redis 6.0+):
#    - Deși execuția comenzilor rămâne single-threaded, operațiunile de citire a pachetelor de pe socket,
#      parsarea protocolului RESP și scrierea răspunsurilor înapoi în rețea sunt delegate 
#      unui grup de fire I/O paralele (io-threads).
#    - Rezultat: Debitul de rețea se dublează sau triplează pe servere moderne multi-core!

Modelul de Memorie și Structurile de Date Interne

Fiecare cheie și valoare din Redis este încapsulată într-o structură C numită robj (Redis Object). Aceasta conține tipul de date, codificarea internă specifică, contorul de referințe pentru partajare și metadate pentru politicile de evacuare (LRU – Least Recently Used / LFU – Least Frequently Used):

Tip de Date Redis Codificare Internă Compactă Codificare Internă Extinsă Comportament & Eficiență Memorie
String int (valori numerice) / embstr (≤44 octeți alocați contiguu) raw (Simple Dynamic String – SDS) SDS menține lungimea șirului ($O(1)$) și previne buffer overflows specifice C.
List quicklist (liste înlănțuite de buffere listpack) quicklist comprimat cu LZF Combină alocarea contiguă fără fragmentare cu inserții rapide la capete ($O(1)$).
Hash listpack (câmpuri puține și scurte) hashtable (dict cu rehashing incremental) Trecere automată de la stocare compactă fără overhead de pointeri la căutare $O(1)$.
Set intset (numere întregi ordonate) hashtable (chei unice) Consum infim de RAM pentru seturi de ID-uri numerice.
Sorted Set (ZSET) listpack (scoruri mici) skiplist + hashtable Skiplist permite căutări pe intervale și calcul de rang în timp logaritmic $O(\log N)$.

Motorul Dual de Persistență: RDB, AOF și Persistență Hibridă

Deși este un magazin în memorie, Redis oferă opțiuni mature pentru salvarea datelor pe medii durabile de stocare (SSD/NVMe):

  • RDB (Redis Database Snapshots): Realizează o copie binară compactă la intervale configurate. Procesul principal apelează apelul de sistem Linux fork(); procesul copil scrie fișierul dump.rdb profitând de memoria virtuală Copy-on-Write (CoW) a nucleului fără a bloca interogările clienților.
  • AOF (Append-Only File): Înregistrează fiecare comandă de scriere într-un jurnal secvențial. Politicile de sincronizare pe disc (appendfsync) permit echilibrul perfect între performanță și siguranță: always (siguranță maximă), everysec (recomandat în producție, pierdere maximă de 1 secundă de date), no (lăsat în seama buffer-ului sistemului de operare).
  • Persistență Hibridă (Redis 4.0+): Îmbină rapiditatea restaurării dintr-un format compact RDB ca preambul în fișierul AOF, urmat doar de comenzile diferențiale înregistrate de la ultimul snapshot.

Înaltă Disponibilitate (HA) și Scalare Orizontală

Topologii de Producție: Redis Sentinel vs. Redis Cluster
# ARHITECTURA 1: Redis Sentinel (Disponibilitate Ridicată)
# - Topologie: 1 Nod Master (scrieri + citiri) + N Noduri Replica (citiri) + >= 3 Noduri Sentinel.
# - Rolul Sentinel: Monitorizează bătăile inimii (heartbeat), stabilește consens prin Quorum
#   și promovează automat o replică la statutul de Master dacă liderul devine indisponibil.
# - Limită: Întregul volum de date trebuie să încapă în memoria RAM a unui singur server!

# ARHITECTURA 2: Redis Cluster (Scalare Distribuită Orizontală)
# - Partiționare multi-master fără nod central (Shared-Nothing Architecture).
# - Spațiul de chei este împărțit fix în 16.384 Hash Slots:
#   Slot = CRC16(Cheie) MOD 16384
# - Clienții inteligenți stochează harta sloturilor și rutează cererea direct către nodul responsabil.
# - Capacitate: Scalare la zeci de terabyți de RAM și sute de noduri!

Explorează comenzile și tehnicile avansate de mai jos: de la grupuri de consumatori pe fluxuri (Streams), operațiuni pe biți (Bitmaps) și cardinalitate la scară mare cu HyperLogLog, până la blocaje distribuite sigure (Redlock) și optimizări avansate de sistem de operare Linux.

Structuri de Date 5 comenzi & structuri

Gestiunea Memoriei & Caching 4 comenzi & structuri

Mesagerie & Evenimente 2 comenzi & structuri

Consistență & Optimizare Rețea 4 comenzi & structuri

Pattern-uri Enterprise & Securitate 4 comenzi & structuri