Memcached vs Redis

1. Oversigt

I denne artikel undersøger vi ligheder og forskelle mellem to populære in-memory databaser, Memcached og Redis.

2. Memcached og Redis

Ofte tænker vi over caching for at forbedre ydeevnen under behandling af en stor mængde data.

Memcached er et distribueret cache-system til hukommelse designet til brugervenlighed og enkelhed og er velegnet som en cache eller en sessionsbutik.

Redis er en datastrukturbutik i hukommelsen, der tilbyder et rigt sæt funktioner. det er nyttigt som cache, database, meddelelsesmægler og kø.

3. Installation

3.1. Installation af Memcached

Vi kan installere den nyeste Memcached-server ved at downloade pakken og køre lave:

$ 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. Installation af Redis

På samme måde kan vi installere den nyeste Redis-server:

$ 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. Ligheder

4.1. Sub-Millisecond Latency

Både Memcached og Redis tilbyder svartider på mellem millisekunder ved at gemme data i hukommelsen.

4.2. Datadeling

På samme måde tillader begge in-memory databaser at distribuere data på tværs af flere noder.

4.3. Understøttelse af programmeringssprog

På samme måde understøtter begge alle større programmeringssprog inklusive Java, Python, JavaScript, C og Ruby.

Derudover er der et par Java-klienter tilgængelige til begge databaser i hukommelsen. For eksempel er Xmemcached og Memcached-java-client tilgængelige for Memcached, mens Jedis, Lettuce og Redisson er tilgængelige for Redis.

4.4. Rydning af cache

Memcached tillader rydning af cachen ved hjælp af flush_all kommando. På samme måde giver Redis os mulighed for at slette alt fra en cache ved hjælp af kommandoer som FLUSHDB og FLUSHALL.

4.5. Skalering

Begge cacheløsninger tilbyder høj skalerbarhed til at håndtere store data, når efterspørgslen vokser eksponentielt.

5. Forskelle

5.1. Kommandolinje

Memcached giver os mulighed for at køre kommandoer ved at oprette forbindelse til serveren ved hjælp af telnet:

$ telnet 10.2.3.4 5678 Forsøger 10.2.3.4 ... Forbundet til 10.2.3.4. 
$ stats STAT pid 14868 STAT oppetid 175931 STAT tid 1220540125 // ...

I modsætning til Memcached kommer Redis med en dedikeret kommandolinjegrænseflade, redis-cli, der giver os mulighed for at udføre kommandoer:

$ redis-cli KOMMANDO 1) 1) "gem" 2) (heltal) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (heltal) 1 3) 1) "noscript" 2) "hurtig" // ... 3) 1) "geodist" 2) (heltal) -4 3) 1) "readonly" // ... // ...

Her har vi henrettet KOMMANDO for at liste alle kommandoer fra Redis.

5.2. Disk I / O-dumping

Memcached håndterer kun diskdumping med tredjepartsværktøjer som libmemcached-tools eller gafler som memcached-dd.

Redis giver dog meget konfigurerbare standardmekanismer som RDB (Redis-databasefil) eller AOF (kun tilføjelsesfiler) til diskdumping. Dette kan være nyttigt til arkivering og genopretning.

Ved hjælp af redis-cli kan vi udføre den synkrone GEMME kommando til at tage et øjebliksbillede af hukommelsesdataene:

$ redis-cli GEM OK

Her gemmer kommandoen øjebliksbillede i a dump.rdb binær fil og returnerer status Okay når den er færdig.

Imidlertid udførelsen af ​​den asynkrone BGSAVE starter baggrundsprocessen med at tage et øjebliksbillede:

$ redis-cli BGSAVE OK

Derudover kan vi bruge LASTSAVE kommando for at kontrollere Unix-tiden for det sidste vellykkede DB-øjebliksbillede.

$ redis-cli LASTSAVE (heltal) 1410853592

5.3. Datastrukturer

Memcached gemmer nøgleværdipar som en streng og har en størrelsesgrænse på 1 MB pr. Værdi. Imidlertid, Redis understøtter også andre datastrukturer som liste, sæt og hash og kan gemme værdier på op til 512 MB i størrelse.

5.4. Replikation

Memcached understøtter replikering med tredjeparts gafler som repcached.

I modsætning til Memcached giver Redis os funktionalitet til at formere klynger ved at replikere det primære lager for bedre skalerbarhed og høj tilgængelighed.

For det første kan vi bruge REPLICAOF kommando til at oprette en replika af Redis-masterserveren. Dernæst udfører vi PSYNC kommando på repliken for at starte replikeringen fra masteren.

5.5. Transaktioner

Memcached understøtter ikke transaktioner, selvom dets operationer er atomare.

Redis yder out-of-the-box support til transaktioner til at udføre kommandoer.

Vi kan starte transaktionen ved hjælp af MULTI kommando. Derefter kan vi bruge EXEC kommando til udførelse af følgende efterfølgende kommandoer. Endelig giver Redis den HOLDE ØJE kommando til den betingede udførelse af transaktionen.

5.6. Udgiv og abonner på meddelelser

Memcached understøtter ikke publicering / abonnement på beskeder uden for boksen.

Redis giver på den anden side funktionalitet til at udgive og abonnere på beskeder ved hjælp af pub / sub-meddelelseskøer.

Dette kan være nyttigt, når du designer applikationer, der kræver kommunikation i realtid som chatrum, sociale mediefeeds og server-interkommunikation.

Redis leveres med dedikerede kommandoer som OFFENTLIGGØRE,TILMELDog OPSIGE ABONNEMENT at offentliggøre en besked til kanalen, abonnere og afmelde klienten på henholdsvis de specificerede kanaler.

5.7. Geospatial support

Geospatial support er nyttig til implementering af placeringsbaserede funktioner til vores applikationer. I modsætning til Memcached kommer Redis med specielle kommandoer til at styre geospatiale data i realtid.

For eksempel GEODIST kommando beregner afstanden mellem to geospatiale poster. Ligeledes GEORADIUS kommando returnerer alle poster inden for den angivne radius.

Derudover kan vi bruge Spring Data Redis til at aktivere Redis geospatial support i en Java-applikation.

5.8. Arkitektur

Redis bruger en enkelt kerne og viser bedre ydeevne end Memcached til lagring af små datasæt målt ved hjælp af kerner.

Memcached implementerer en arkitektur med flere tråde ved at bruge flere kerner. Derfor kan Memcached til lagring af større datasæt fungere bedre end Redis.

En anden fordel ved Memcacheds multitrådede arkitektur er dens høje skalerbarhed opnået ved at bruge flere beregningsressourcer.

Redis kan skaleres vandret via klyngedannelse, hvilket er forholdsvis mere komplekst at opsætte og betjene. Vi kan også bruge Jedis eller Lettuce til at aktivere en Redis-klynge ved hjælp af et Java-program.

5.9. LUA Scripting

I modsætning til Memcached kan vi udføre LUA-scripts mod Redis. Det giver kommandoer som EVAL og SCRIPT LOAD, nyttigt til udførelse af LUA-scripts.

For eksempel kan vi udføre EVAL kommando til at evaluere scriptet:

$ redis-cli eval "returner redis.call ('sæt', TASTER [1], 'baeldung')" 1 websted OK

Her har vi sat nøglen internet side til værdien baeldung ved at evaluere et script.

5.10. Hukommelsesbrug

Memcached har en højere hukommelsesudnyttelsesrate end Redis, når man sammenligner String-datastrukturen.

På trods af dette, når Redis bruger hash-strukturen, giver det en højere hukommelsesudnyttelsesrate end Memcached.

6. Konklusion

I denne artikel udforskede vi Memcached og Redis. For det første så vi på lighederne i begge databaser i hukommelsen. Derefter så vi på forskellene i funktionerne fra begge cacheløsninger.

Der er mange cache-løsninger i hukommelsen til rådighed. Derfor skal vi overveje funktionerne i en cachemotor og matche dem mod vores brugssager.

Vi kan bestemt konkludere, at Memcached er et solidt valg til løsning af enkle cacheproblemer. Men generelt set Redis overgår Memcached ved at tilbyde rigere funktionalitet og forskellige funktioner, der er lovende for komplekse brugssager.