Redis – moć brzine i jednostavnosti

Šta je REDIS?

Za Redis (REmote DIctionary Server) se uopšteno može reći da je napredna key value baza koja se u poslednje vreme sve više koristi. Budući da kod nas nema  tekstova na ovu temu želja mi je da kolegama programerima predstavim ovaj zaista moćan alat. O njegovoj rastućoj popularnosti dovoljno govori to da se Redis gotovo uvek koristi kao jedno od rešenja kada se radi reinženjering sajtova sa velikom posetama. Danas ga srećemo u aplikacijama kao što je Instagram, Pinterest, Youporn, Tumblr, StackOverflow, Disqus, Guardian, Github, Blizzard i mnogi mnogi drugi. Potpuno je besplatan,  napisan u jeziku ANSI C u svega dvadesetak hiljada redova. Napisao ga je italijan Salvatore Sanfilippo (@antirez). Od 2010 godine Redis sponzoriše ga VMVare alli je i dalje ostao besplatan. Podržava master-slave replikaciju a ono čemu je autor posvetio punu pažnju u novoj verziji je clustering i podrška izvršenju Lua skripti nad Redis serverom.

Glavne prednosti Redisa:

  • Brzina izvršenja (najbrži key value store),
  • Izutno je lagan za učenje (jednostavna konfiguracija i pokretanje)
  • Aktivan razvoj (svakodnevno se razvija i nadogradjuje)
  • Omogućava master-slave replikaciju što doprinosi skalabilnosti
  • Atomske operacije

REDIS – server struktura podataka

Redis ne treba shvatiti kao običan key value skladište podataka kao što je Memcache. Redis jeste to ali je i mnogo, mnogo više – to je zapravo server struktura podataka. Struktura podataka je način na koji se podatak zapisuje u računar. Razumevajući strukture u Redisu, kako rade, koje komande su nad njima moguće i koje podatke možemo čuvati u njima ključno je za razumevanje samog Redisa. Redis je server sledećih struktura podataka:

  1. Stringovi (Strings ) – predstavljaju osnovnu strukturu key value pristupa. Ključevi mogu sadržati bilo šta (budući da su binary safe) od podataka veličine do 512 MB. Dakle ključ ili vrednost može može da bude npr. sadržaj nekog JPG fajla, json, običan tekst itd…
  2. Skupovi (Sets) – predstavljaju neuredjenu kolekciju jedinstvenih elemenata. Dakle Redis ne dozvoljava ponavljanje elemenata u skupovima što znači da programeri ne moraju da vode računa o tome da li neki element već postoji u skupu ili ne – Redis to odradjuje umesto njih. Programeri pozivaju osnovne komande za dodavanje, izbacivanje, presek, uniju i razliku elemenata u skupovima. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po skupu. Skupovi predstavljaju idealnu strukturu za društvene mreže upravo zbog osnovnih komandi nad elementima.
  3. Sortirani skupovi (Sorted sets) – predstavljaju uredjenu kolekciju jedinstvenih elemenata. Da bi postigla uređenost koristi se rezultat (score) tj. svakom elementu se priključuje kao podatak rezultat na osnovu kojeg se rangiraju elementi. Budući da su elementi jedinstveni svaki element će imati jedan i samo jedan rezultat. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po skupu. Podržane su komande nad skupovima kao i kod običnih skupova i uz to, omogućene su komande pomoću kojih lako dolazimo do podataka kao što su prvih deset elemenata po rezultatu, rang elementa na osnovu rezultata, elementi koji imaju rezultat između određenih vrednosti itd.
  4. Heševi (Hashes) – predstavljaju zapravo asocijativni niz. Ruby programerima je dobro poznat ovaj termin budući da su već sreli sa pojmom heševa u svom jeziku. Dakle heševi barataju sa nizovima stringova tj postoji više parova ključ-vrednost u okviru heša. Heš se koristi kada nam je potrebna struktura slična tabelama u bazama podataka. Potrebno je naglasiti da heševi ne zauzimaju puno mesta tako da se milioni objekata mogu sačuvati na relativno malom prostoru.
  5. Liste (Lists) – predstavljaju listu stringova. Elementi su sortirani po redosledu ubacivanja u listu. U suštini liste se mogu posmatrati kao nizovi. Elementi se mogu dodavati na početak (glavu) i na kraj (rep) liste. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po listi. Elementi se ubacuju u listu u konstantnom vremenu tj isto je vremena potrebno kada ubacujemo element u listu od 10 i u listu od 10 miliona elemenata. Liste vrlo brzo vraćaju rezultate kao što su prvih n elemenata sa glave, tj sa početka dok su malo sporije kada tražimo elemente u sredini liste.

Read More