Mai jos vă prezint un articol ce l-am scris pentru o temă de la cursul de BD(Baze de Date). Este scris într-o manieră mai formală, dar poate o să vă fie de ajutor. Pentru eventuale sugestii nu ezitați să îmi lăsați un comentariu.

Cuprins

  1. Introducere.
  2. Caracteristici generale.
    1. Chei
    2. String-uri
    3. Liste
    4. Hash-uri
    5. Seturi
  3. Redis vs. MySQL
  4. Concluzie

1. Introducere

Redis reprezintă o paradigmă diferită de stocare a datelor. Dezvoltatorii îl numesc server de structuri de date, motiv întemeiat, deoarece filozofia Redis pornește de la ideea că datele ar trebui stocate în memoria RAM. În felul acesta Redis poate efectua în principiu operațiile cu o viteză ridicată, eliminând procesul laborios pe care îl întâlnim de exemplu la SQL, unde datele sunt scrise pe disc.

Este considerat a fi cel mai important model NoSQL, fiind bazat pe entități de tip cheie-valoare. Se dovedește a fi net superior în aplicațiile scalabile, îndeosebi în clusterele de mașini, unde este mult mai flexibil decât tabelele unei baze de date relaționale.

 

2. Caracteristici generale

Redis are trei particularități ce îl diferențiază de o mare parte din competiție:

  • Redis păstrează toată baza de date în memorie, dar folosește discul pentru persitență
  • Dispune de un set foarte larg de tipuri de date: string-uri, hash-uri, liste, seturi etc.
  • Redis poate să replice datele la orice număr de sclavi

Deoarece se utilizează structuri de date, cu valori ce pot conține tipuri de date complexe, operațiile atomice pot fi definite chiar pe aceste tipuri.

În ciuda faptului că datele se stochează în memoria volatilă, ele sunt persistente pe disc. Ideea este ca operațiile asincrone de scriere și citire să fie făcute din memorie, fiind realizate mult mai rapid și cu avantaje evidente, iar persistența să fie un proces de fundal, distinct de cele doua operații elementare.

De asemenea, este important de menționat că Redis funcționează doar pe sistemele bazate pe UNIX. Instalarea este nativă în aceste sisteme de operare și necesită câțiva pași simpli:

:: Instalarea Redis pe Ubuntu

$ sudo apt-get update
$ sudo apt-get install redis-server
$ redis-server
$ redis-cliredis 127.0.0.1:6379> pingPONG

 

2.1. Chei

Fiind un sistem de tip cheie valoare, acestea ocupă un loc central în arhitectura sistemului. Cheile sunt sigure binar, asta însemnând că poate fi folosită orice secvență binară ca și cheie, de la un string precum “foo” până la conținutul unei file JPEG. Un string gol este de asemenea o cheie validă.

Există totuși o serie de recomandări în privința cheilor:

  • Nu ar trebui să fie foarte lungi, deoarece găsirea acestora în setul de date necesită o serie de comparații costisitoare.
  • Cheile foarte scurte nu sunt de ajutor, deoarece sunt greu de manipulat, iar la nivelul memoriei câștigul nu este semnificativ.
  • Se recomandă urmărirea unei scheme, pentru a putea exista un set de reguli prin care s-ar putea găsi cu ușurință o cheie(din punctul de vedere al utilizatorului).

 

2.2. String-uri

Tipul String este cel mai simplu tip de valoare ce poate fi asociat cu o cheie Redis. Deoarece cheile Redis sunt de fapt string-uri, când folosim tipul string ca și valoare nu se realizează altceva decât maparea unui string la alt string. Tipul string este util în cazuri multiple, de exemplu pentru memorarea rapidă a unor fragmente HTML.

În exemplul de mai sus am folosit redis-cli(command line interface) pentru a scrie comanda ping. În aceeași manieră se poate seta un string.

redis>  SET mykey "Hello"
OK
redis>  GET mykey
"Hello"
redis>

 

2.3. Liste

Redis folosește liste înlănțuite pentru managementul elementelor dintr-o mulțime. Avantajul este că adăugarea de noi elemente se face în timp constant. Un nou element se adaugă la o listă cu 10 elemente în același timp în care se adaugă la o listă cu un milion. Principalul dezavantaj apare la accesarea elementelor unde timpul de accesare este proporțional cu numărul de noduri din listă.

Motivul principal pentru care Redis utilizează liste înlănțuite este că pentru o bază de date este crucial să se poată adăuga înregistrări noi foarte rapid.

  • LPUSH adaugă un nou element la începutul listei
  • RPUSH adaugă un nou element la coada listei
  • LRANGE extrage gama elementelor dintr-o listă(0 primul element, -1 ultimul)
redis>  LPUSH mylist "world"
(integer) 1
redis>  LPUSH mylist "hello"
(integer) 2
redis>  LRANGE mylist 0 -1
1) "hello"
2) "world"
redis>
redis>  RPUSH mylist "hello"
(integer) 1
redis>  RPUSH mylist "world"
(integer) 2
redis>  LRANGE mylist 0 -1
1) "hello"
2) "world"
redis>

 

2.4. Hash-uri

Hash-urile Redis reprezintă doar perechi câmp-valoare:

redis>  HMSET myhash field1 "Hello" field2 "World"
OK
redis>  HGET myhash field1
"Hello"
redis>  HGET myhash field2
"World"
redis>

Hash-urile sunt foarte utile pentru reprezentarea obiectelor unde avem proprietăți și valori. Este bine de știut că un hash nu are o limită în privința numărului de câmpuri(cu excepția considerentelor fizice – spațiul de memorie volatilă ș.a.).

> hmset user:1000 username antirez birthyear 1977 verified 1
OK
> hget user:1000 username
"antirez"
> hget user:1000 birthyear
"1977"
> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "1"

 

2.5. Seturi

Seturile sunt colecții neordonate de string-uri. Comanda SADD pemite adăugarea unor noi elemente la set. Sunt permise o serie de alte operații asupra seturilor precum testarea dacă un element deja există, realizarea unei intersecții, uniuni sau diferență între seturi multiple ș.a.

 

3. Redis vs. MySQL

Întrebarea naturală este dacă Redis poate înlocui un sistem relațional precum MySQL. Răspunsul este mai complicat și depinde foarte mult de context. Filozofia Redis pornește de la idea stocării datelor în memorie pentru managementul foarte rapid și ușor prin intermediul relațiilor de tip cheie valoare. MySQL pe de altă parte este mult mai rigid, dar are avantajul scalabilității.

Majoritatea sistemelor actuale au o memorie volatilă redusă în comparație cu mediile de stocare externe, iar pentru multe aplicații această limitare ar putea duce la probleme esențiale pe parcurs neexistând mecanisme complexe prin care să se poată stoca corespunzător datele.

Redis este un mecanism ideal pentru aplicații sau task-uri mici, ce trebuie să fie foarte rapide. De exemplu, stocarea unor Cookie-uri sau Sesiuni, sau alte operații calculabile sunt mai ușor de controlat din memoria internă.

4. Concluzie

Redis este un sistem inovator NoSQL ce oferă o viteză neegalabilă în raport cu alte sisteme relaționale bazate pe modelul lui Codd. Această viteză provine în principal datorită  modului de stocare a informației, dar și datorită simplității apelării acesteia. În Redis, toate operațiile se reduc la modelări a perechilor cheie – valoare din memoria volatilă.

Lasă un comentariu

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Send this to a friend