A fost lansată versiunea 7.0 a SGBD-ului Redis, care aparține clasei sistemelor NoSQL. Redis oferă funcționalități pentru stocarea datelor în format cheie/valoare, extinse prin suportul pentru formate structurate de date, cum ar fi liste, hash-uri și集合uri, precum și posibilitatea de a executa scripturi procesatoare pe server în limbajul Lua. Codul proiectului este furnizat sub licența BSD. Module suplimentare care oferă funcționalități extinse pentru utilizatorii de afaceri, cum ar fi RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, sunt furnizate din 2019 sub licența proprietară RSAL. Dezvoltarea variantelor deschise ale acestor module sub licența AGPLv3 a fost încercată de proiectul GoodFORM, care recent se află în stagnare.
Spre deosebire de sistemele de stocare în memorie, cum ar fi Memcached, Redis asigură stocarea persistentă a datelor pe disc și garantează integritatea bazei de date în caz de închidere neașteptată. Codurile sursă ale proiectului sunt distribuite sub licența BSD. Bibliotecile client sunt disponibile pentru cele mai populare limbaje, inclusiv Perl, Python, PHP, Java, Ruby și Tcl. Redis suportă tranzacții, care permit executarea unui grup de comenzi într-un singur pas, garantând coerența și consecvența (comenzile din alte cereri nu pot interveni) execuției unui set dat de comenzi și, în cazul problemelor, permitând revenirea schimbărilor. Toate datele sunt complet stocate în memorie.
Pentru gestionarea datelor, sunt disponibile comenzi precum incrementare/decrementare, operații standard asupra listelor și mulțimilor (unire, intersecție), redenumirea cheilor, selecții multiple și funcții de sortare. Sunt suportate două moduri de stocare: sincronizarea periodică a datelor pe disc și păstrarea unui jurnal de modificări pe disc. În cel de-al doilea caz, se garantează integritatea completă a tuturor modificărilor. Este posibilă organizarea replicării master-slave a datelor pe mai multe servere, efectuată într-un mod non-blocant. Este disponibil și un mod de schimb de mesaje "publicare/subscriere", în care se creează un canal, iar mesajele din acesta sunt distribuite clienților prin subscriere.
Schimbări cheie în Redis 7.0:
- A fost adăugat suport pentru funcții executate pe server server. Spre deosebire de scripturile care erau anterior acceptate în limbajul Lua, funcțiile nu sunt legate de aplicație și sunt destinate implementării unei logici suplimentare care să extindă funcționalitatea serverului. Funcțiile sunt procesate în mod integrat cu datele și legate de baza de date, nu de aplicație, incluzând replicarea și salvarea lor în stocarea permanentă.
- A fost propusă a doua ediție ACL, care permite gestionarea accesului la date pe baza cheilor și permite definirea diferitelor seturi de reguli de acces pentru comenzi, având posibilitatea de a lega mai multe selecții (seturi de privilegii) fiecărui utilizator. Fiecare cheie poate fi asociată cu anumite privilegii; de exemplu, se poate restricționa accesul doar în citire sau scriere pentru un anumit subset de chei.
- A fost oferită o implementare funcțională în cluster a paradigmei de distribuție a mesajelor pe baza abonamentului (Publish-Subscribe), în care mesajul este trimis unui anumit nod, la care este asociat canalul de mesaje, iar acest mesaj este redirecționat către celelalte noduri aflate în secțiune (shard). Clienții pot primi mesaje prin abonare la canal, conectându-se atât la nodul principal, cât și la nodurile secundare ale secțiunii. Managementul se face prin comenzi precum SSUBSCRIBE, SUNSUBSCRIBE și SPUBLISH.
- A fost adăugat suport pentru procesarea subcomenzilor în majoritatea contextelor.
- Au fost adăugate noi comenzi:
- ZMPOP, BZMPOP.
- LMPOP, BLMPOP.
- SINTERCARD, ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- EXPIRETIME, PEXPIRETIME.
- EVAL_RO, EVALSHA_RO, SORT_RO.
- FUNCTION *, FCALL, FCALL_RO.
- COMMAND DOCS, COMMAND LIST.
- LATENCY HISTOGRAM.
- CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
- CLIENT NO-EVICT.
- ACL DRYRUN.
- A fost oferită posibilitatea de a procesa mai multe configurații într-un singur apel CONFIG SET/GET.
- Utilitarii redis-cli au fost adăugate opțiunile „—json”, „-2”, „—scan”, „—functions-rdb”.
- Implicit, accesul clienților la setările și comenzile care afectează securitatea este dezactivat (de exemplu, comenzile DEBUG și MODULE sunt dezactivate, iar modificările configurațiilor cu flagul PROTECTED_CONFIG sunt interzise). În redis-cli, s-a oprit output-ul în fișier cu istoricul comenzilor conținând date confidențiale.
- Au fost implementate o serie semnificativă de optimizări menite să îmbunătățească performanța și să reducă consumul de memorie. De exemplu, consumul de memorie a fost semnificativ redus atunci când este activat modul cluster, în timpul operațiunilor copy-on-write și atunci când se lucrează cu hash-uri și chei zset. Logica de resetare a datelor la disc (apelul fsync) a fost îmbunătățită. Numărul de pachete de rețea și apelurile la apelurile sistemului au fost reduse atunci când se trimite răspunsuri clienților. Eficiența replicării a fost crescută.
- S-a remediat vulnerabilitatea CVE-2022-24735 în mediul de execuție a scripturilor Lua, care permitea substituirea codului Lua propriu și executarea acestuia în contextul altui utilizator, inclusiv al celor cu privilegii superioare.
- S-a remediat vulnerabilitatea CVE-2022-24736, care permitea oprirea bruscă a procesului redis-server din cauza dereferării unui pointer nul. Atacul se realizează prin încărcarea unor scripturi Lua special concepute.
Sursa: opennet.ro
