Memcached vs Redis

1. Pregled

U ovom ćemo članku ispitati sličnosti i razlike dviju popularnih baza podataka u memoriji, Memcached i Redis.

2. Memcached i Redis

Često razmišljamo o tome predmemoriranje radi poboljšanja performansi tijekom obrade velike količine podataka.

Memcached je distribuirani memorijski sustav za predmemoriranje dizajniran za jednostavnost upotrebe i jednostavnost pogodan za predmemoriju ili za pohranu sesija.

Redis je spremište podataka u memoriji koje nudi bogat skup značajki. to je korisno kao predmemorija, baza podataka, posrednik poruka i red.

3. Instalacija

3.1. Instaliranje Memcached-a

Preuzimanje najnovijeg poslužitelja Memcached možemo preuzeti preuzimanjem paketa i pokretanjem napraviti:

$ wget //memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install

3.2. Instaliranje Redisa

Slično tome, možemo instalirati najnoviji Redis poslužitelj:

$ wget //download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $ make

4. Sličnosti

4.1. Sub-milisekundna latencija

I Memcached i Redis nude vrijeme odziva od milisekundi držeći podatke u memoriji.

4.2. Dijeljenje podataka

Slično tome, obje baze podataka u memoriji omogućuju distribuciju podataka na više čvorova.

4.3. Podrška programskim jezicima

Isto tako, oba podržavaju sve glavne programske jezike, uključujući Java, Python, JavaScript, C i Ruby.

Uz to, za obje baze podataka u memoriji dostupno je nekoliko Java klijenata. Na primjer, Xmemcached i Memcached-java-client dostupni su za Memcached, dok su Jedis, Zelena salata i Redisson dostupni za Redis.

4.4. Brisanje predmemorije

Memcached omogućuje brisanje predmemorije pomoću isprati_sve naredba. Slično tome, Redis nam omogućuje brisanje svega iz predmemorije pomoću naredbi poput FLUSHDB i FLUSHALL.

4.5. Skaliranje

Oba rješenja za predmemoriranje nude veliku skalabilnost za rukovanje velikim podacima kada potražnja eksponencijalno raste.

5. Razlike

5.1. Naredbeni redak

Memcached nam omogućuje pokretanje naredbi povezivanjem na poslužitelj pomoću telnet:

$ telnet 10.2.3.4 5678 Pokušaj 10.2.3.4 ... Povezano s 10.2.3.4. 
$ stats STAT pid 14868 STAT neprekidno rad 175931 STAT vrijeme 1220540125 // ...

Za razliku od Memcacheda, Redis dolazi s namjenskim sučeljem naredbenog retka, redis-cli, omogućujući nam izvršavanje naredbi:

$ redis-cli ZAPOVIJED 1) 1) "save" 2) (integer) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (integer) 1 3) 1) "noscript" 2) "fast" // ... 3) 1) "geodist" 2) (integer) -4 3) 1) "readonly" // ... // ...

Evo, pogubili smo NAREDBA za popis svih naredbi koje pruža Redis.

5.2. Dumping I / O diska

Memcached obrađuje bacanje diska samo s alatima nezavisnih proizvođača poput libmemcached-tools ili rašljama poput memcached-dd.

Međutim, Redis nudi visoko konfigurabilne zadane mehanizme poput RDB (datoteka baze podataka Redis) ili AOF (datoteke samo s dodatkom) za odbacivanje diska. To može biti korisno za arhiviranje i oporavak.

Korištenjem redis-cli možemo izvršiti sinkrono UŠTEDJETI naredba za snimanje podataka u memoriji:

$ redis-cli SPREMI U redu

Ovdje naredba sprema snimku u odlagalište.rdb binarna datoteka i vraća status u redu kad je dovršen.

Međutim, izvršenje asinkronog BGSAVE započinje pozadinski postupak snimanja snimke:

$ redis-cli BGSAVE OK

Uz to možemo koristiti i POSLJEDNJE UŠTEDITE naredba za provjeru vremena Unixa posljednje uspješne snimke DB-a.

$ redis-cli LASTSAVE (cijeli broj) 1410853592

5.3. Strukture podataka

Memcached pohranjuje parove ključ / vrijednost kao niz i ima ograničenje veličine od 1 MB po vrijednosti. Međutim, Redis također podržava ostale strukture podataka poput popisa, skupa i raspršivanja, a može pohraniti vrijednosti do 512 MB.

5.4. Replikacija

Memcached podržava replikaciju vilicama treće strane poput repcached.

Za razliku od Memcacheda, Redis nam pruža funkciju umnožavanja klastera repliciranjem primarne pohrane radi veće skalabilnosti i velike dostupnosti.

Prvo, možemo koristiti ZAMJENA naredba za stvaranje replike glavnog poslužitelja Redis. Dalje, izvršavamo PSYNC naredba na replici za pokretanje replikacije od glavnog.

5.5. Transakcije

Memcached ne podržava transakcije, iako su njegove operacije atomske.

Redis pruža gotovu podršku za transakcije za izvršavanje naredbi.

Transakciju možemo započeti pomoću MULTI naredba. Tada možemo koristiti EXEC naredba za izvršavanje sljedećih narednih naredbi. Napokon, Redis nudi GLEDATI naredba za uvjetno izvršenje transakcije.

5.6. Objavite i pretplatite se na razmjenu poruka

Memcached ne podržava objavljivanje / pretplatu na razmjenu poruka.

Redis, s druge strane, pruža funkcionalnost za objavljivanje i pretplatu na poruke pomoću redova pub / sub poruka.

To može biti korisno pri dizajniranju aplikacija koje zahtijevaju komunikaciju u stvarnom vremenu, poput chat soba, feedova društvenih mreža i međusobne komunikacije poslužitelja.

Redis dolazi s namjenskim naredbama poput OBJAVITI,PRETPLATITE SE, i OTPUSTITE SE za objavljivanje poruke na kanalu, pretplata i otkazivanje pretplate klijenta na navedene kanale.

5.7. Geoprostorna potpora

Geoprostorna podrška korisna je za implementaciju značajki temeljenih na lokaciji za naše aplikacije. Za razliku od Memcacheda, Redis dolazi s posebnim naredbama za upravljanje geoprostornim podacima u stvarnom vremenu.

Na primjer, GEODIST naredba izračunava udaljenost između dva geoprostorna unosa. Isto tako, GEORADIJE naredba vraća sve unose u navedenom radijusu.

Uz to, Spring Data Redis možemo koristiti za omogućavanje geoprostorne podrške Redisa u Java aplikaciji.

5.8. Arhitektura

Redis koristi jednu jezgru i pokazuje bolje performanse od Memcacheda u pohrani malih skupova podataka kada se mjeri u jezgri.

Memcached implementira višenitnu arhitekturu korištenjem više jezgri. Stoga za pohranu većih skupova podataka Memcached može raditi bolje od Redisa.

Još jedna prednost Memcachedove višenitne arhitekture je velika skalabilnost postignuta korištenjem višestrukih računalnih resursa.

Redis se može vodoravno skalirati grupisanjem, koje je relativno složenije za postavljanje i rad. Također, možemo koristiti Jedis ili Zelenu salatu da omogućimo Redis klaster pomoću Java aplikacije.

5.9. LUA skriptiranje

Za razliku od Memcachea, LUA skripte možemo izvršavati protiv Redisa. Pruža naredbe poput EVALNO i OPTEREĆENJE SKRIPTA, korisno za izvršavanje LUA skripti.

Na primjer, možemo izvršiti EVALNO naredba za procjenu skripte:

$ redis-cli eval "return redis.call ('set', KEY [1], 'baeldung')" 1 web stranica OK

Evo, postavili smo ključ web stranica na vrijednost baeldung ocjenjivanjem skripte.

5.10. Korištenje memorije

Memcached ima veću stopu iskorištenosti memorije od Redisa kada uspoređuje strukturu podataka String.

Unatoč tome, kada Redis koristi strukturu raspršivanja, pruža veću stopu iskorištenja memorije od Memcached-a.

6. Zaključak

U ovom smo članku istražili Memcached i Redis. Prvo smo pogledali sličnosti obje baze podataka u memoriji. Zatim smo pogledali razlike u značajkama koje pružaju oba rješenja za predmemoriranje.

Dostupno je mnogo rješenja za predmemoriranje u memoriji. Stoga bismo trebali razmotriti značajke mehanizma za predmemoriranje i uskladiti ih s našim slučajevima korištenja.

Svakako možemo zaključiti da je Memcached solidan izbor za rješavanje jednostavnih problema s predmemoriranjem. Međutim, općenito govoreći, Redis nadmašuje Memcached nudeći bogatiju funkcionalnost i razne značajke koje obećavaju za složene slučajeve korištenja.