Memcached vs Redis

1. Áttekintés

Ebben a cikkben megvizsgáljuk két népszerű memóriában lévő adatbázis, a Memcached és a Redis hasonlóságait és különbségeit.

2. Memcached és Redis

Gyakran arra gondolunk gyorsítótárazás a teljesítmény javítása érdekében nagy mennyiségű adat feldolgozása közben.

A Memcached egy elosztott memória gyorsítótár-rendszer, amelyet a könnyű használat és az egyszerűség érdekében fejlesztettek ki jól használható gyorsítótárként vagy munkamenet-tárolóként.

A Redis egy memóriában található adatstruktúra-tároló, amely gazdag funkciókat kínál. Ez hasznos, mint gyorsítótár, adatbázis, üzenetközvetítő és várólista.

3. Telepítés

3.1. A Memcached telepítése

Telepíthetjük a legújabb Memcached szervert a csomag letöltésével és a futtatással készítsen:

$ 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. A Redis telepítése

Hasonlóképpen telepíthetjük a legújabb Redis szervert:

$ 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. Hasonlóságok

4.1. Milliszekundum alatti késleltetés

A Memcached és a Redis milliszekundum alatti válaszidőket kínál az adatok memóriában tartásával.

4.2. Adatok particionálása

Hasonlóképpen mindkét memóriában lévő adatbázis lehetővé teszi az adatok több csomóponton történő elosztását.

4.3. Programozási nyelvek támogatása

Hasonlóképpen, mindkettő támogatja az összes főbb programozási nyelvet, beleértve a Java, Python, JavaScript, C és Ruby nyelveket.

Ezenkívül mindkét Java-kliens elérhető mindkét memóriában lévő adatbázishoz. Például az Xmemcached és a Memcached-java-client elérhető a Memcached számára, míg a Jedis, a Saláta és a Redisson a Redis számára.

4.4. Gyorsítótár törlése

A Memcached lehetővé teszi a gyorsítótár törlését a flush_all parancs. Hasonlóképpen, a Redis lehetővé teszi számunkra, hogy mindent töröljünk a gyorsítótárból a következő parancsok használatával: FLUSHDB és FLUSHALL.

4.5. Méretezés

Mindkét gyorsítótár-megoldás nagy skálázhatóságot kínál nagy adatok kezeléséhez, amikor a kereslet exponenciálisan növekszik.

5. Különbségek

5.1. Parancs sor

A Memcached segítségével parancsokat futtathatunk úgy, hogy a szerverhez csatlakozunk telnet:

$ telnet 10.2.3.4 5678 A 10.2.3.4 próbálkozása ... Csatlakozva a 10.2.3.4-hez. 
$ stats STAT pid 14868 STAT üzemidő 175931 STAT idő 1220540125 // ...

A Memcacheddel ellentétben a Redis dedikált parancssori felülettel rendelkezik, redis-cli, amely lehetővé teszi számunkra a parancsok végrehajtását:

$ redis-cli PARANCS 1) 1) "mentés" 2) (egész szám) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (egész szám) 1 3) 1) "noscript" 2) "gyors" // ... 3) 1) "geodista" 2) (egész szám) -4 3) 1) "csak olvasható" // ... // ...

Itt kivégeztük PARANCS hogy felsorolja a Redis által nyújtott összes parancsot.

5.2. Lemez I / O dömping

A Memcached csak harmadik féltől származó eszközökkel, például libmemcached-eszközökkel, vagy olyan villákkal kezeli a lemezdömpinget, mint a memcached-dd.

A Redis azonban nagyon konfigurálható alapértelmezett mechanizmusokat kínál, például RDB (Redis adatbázisfájl) vagy AOF (csak függelék fájlok) a lemezdömpinghez. Ez hasznos lehet az archiváláshoz és a helyreállításhoz.

A redis-cli segítségével futtathatjuk a szinkront MENTÉS parancs a memóriában lévő adatok pillanatképének elkészítésére:

$ redis-cli MENTÉS OK

A parancs itt tárolja a pillanatképet a dump.rdb bináris fájl és visszaadja az állapotot rendben ha teljes.

Az aszinkron végrehajtása azonban BGSAVE elindítja a pillanatkép készítésének folyamatát:

$ redis-cli BGSAVE OK

Ezenkívül használhatjuk a LASTSAVE parancs az utolsó sikeres DB pillanatkép Unix idejének ellenőrzésére.

$ redis-cli LASTSAVE (egész szám) 1410853592

5.3. Adatszerkezetek

A Memcached a kulcs-érték párokat karakterláncként tárolja, és értékenként 1 MB méretkorlátot tartalmaz. Azonban, A Redis más adatstruktúrákat is támogat, például a listát, a halmazt és a kivonatot, és legfeljebb 512 MB méretű értékeket képes tárolni..

5.4. Replikáció

A Memcached támogatja a replikációt más gyártók villáival, például az újracsatolt fájlokkal.

A Memcacheddel ellentétben a Redis olyan funkciót biztosít számunkra, hogy a fürtöket megsokszorozzuk az elsődleges tárhely replikálásával a jobb méretezhetőség és a magas rendelkezésre állás érdekében.

Először használhatjuk a REPLICAOF parancsot a Redis master szerver replikájának létrehozására. Ezután végrehajtjuk a PSYNC parancs a replikán, hogy elindítsa a replikációt a master-től.

5.5. Tranzakciók

A Memcached nem támogatja a tranzakciókat, bár műveletei atomi jellegűek.

A Redis dobozon kívüli támogatást nyújt a tranzakciókhoz a parancsok végrehajtásához.

A tranzakciót a TÖBB parancs. Ezután használhatjuk a EXEC parancs a következő parancsok végrehajtására. Végül Redis biztosítja a NÉZ parancs a tranzakció feltételes végrehajtásához.

5.6. Üzenetek közzététele és feliratkozása

A Memcached nem támogatja az üzenetek közzétételét / előfizetését.

A Redis viszont funkcionalitást kínál az üzenetek publikálására és feliratkozására a pub / sub üzenetsorok használatával.

Ez hasznos lehet olyan alkalmazások tervezésénél, amelyek valós idejű kommunikációt igényelnek, például csevegőszobák, közösségi média hírcsatornák és szerverek közötti kommunikáció.

Redis olyan dedikált parancsokkal érkezik, mint a PUBLISH,IRATKOZZ FEL, és FELIRATKOZZON üzenetet közzé tenni a csatornán, feliratkozni, illetve leiratkozni az ügyfélről a megadott csatornákra.

5.7. Térinformatikai támogatás

A térinformatikai támogatás hasznos a helyalapú funkciók alkalmazásainak megvalósításához. A Memcacheddel ellentétben a Redis speciális parancsokkal érkezik a valós idejű térinformatikai adatok kezelésére.

Például a GEODISTA parancs kiszámítja a két térinformatikai bejegyzés közötti távolságot. Hasonlóképpen a GEORADIUS parancs a megadott sugarú körön belül visszaadja az összes bejegyzést.

Ezenkívül használhatjuk a Spring Data Redis-t a Redis földrajzi támogatásának engedélyezéséhez egy Java alkalmazásban.

5.8. Építészet

Redis egyetlen magot használ, és a Memcached-nél jobb teljesítményt mutat a kis adatkészletek tárolásában, ha magokat mérünk.

A Memcached többszálas architektúrát valósít meg több mag felhasználásával. Ezért nagyobb adatkészletek tárolásához a Memcached jobban teljesíthet, mint Redis.

A Memcached többszálas architektúrájának további előnye a nagy skálázhatóság, amelyet több számítási erőforrás felhasználásával érnek el.

A Redis vízszintesen képes skálázni a klaszterezés révén, amelyet viszonylag bonyolultabb felállítani és működtetni. Emellett a Jedis vagy a Saláta segítségével engedélyezhetjük a Redis fürtöt egy Java alkalmazás segítségével.

5.9. LUA Scripting

A Memcacheddel szemben LUIS-szkripteket hajthatunk végre Redis ellen. Olyan parancsokat nyújt, mint EVAL és SCRIPT LOAD, hasznos az LUA szkriptek végrehajtásához.

Például végrehajthatjuk a EVAL parancs a szkript értékelésére:

$ redis-cli eval "return redis.call ('set', KEYS [1], 'baeldung')" 1 webhely OK

Itt állítottuk be a kulcsot weboldal az értékre baeldung egy szkript kiértékelésével.

5.10. Memóriahasználat

A Memcached memóriakihasználtsága magasabb, mint a Redis esetében, ha összehasonlítjuk a karakterlánc adatszerkezetét.

Ennek ellenére, amikor Redis a hash struktúrát használja, magasabb memória-kihasználtságot biztosít, mint a Memcached.

6. Következtetés

Ebben a cikkben Memcachedet és Redist fedeztük fel. Először megvizsgáltuk a memóriában lévő mindkét adatbázis hasonlóságát. Ezután megvizsgáltuk a mindkét gyorsítótárazásos megoldás jellemzőinek különbségeit.

Számos memória-gyorsítótár-megoldás érhető el. Ezért figyelembe kell vennünk a gyorsítótárazó motor jellemzőit, és össze kell hasonlítanunk azokat a felhasználási eseteinkkel.

Minden bizonnyal arra a következtetésre juthatunk, hogy a Memcached szilárd választás az egyszerű gyorsítótár-problémák megoldására. Azonban általában véve A Redis felülmúlja a Memcachedet, mivel gazdagabb funkcionalitást és különféle szolgáltatásokat kínál, amelyek ígéretesek a komplex felhasználási esetekben.