all
Business
data science
design
development
our journey
Strategy Pattern
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Cristiano Vicente
Tiago Franco

19. april 2024

Min Read

Memcached vs Redis: hvilken skal man vælge?

Hvis du tænker på en cacheløsning på serversiden, er det sandsynligt, at du har hørt om Redis eller Memcached.

Begge dele Redis og Memcached er:

  • NoSQL-nøgleværdi i hukommelsesdatalagringssystemer
  • åben kildekode
  • bruges til at fremskynde applikationer
  • Understøttet af de store cloud-tjenesteudbydere

Hvad er forskellen mellem Memcached og Redis?

Memcached og Redis gemmer begge data i hukommelsen for at forbedre applikationshastigheden, men de imødekommer forskellige behov.

  • Memcached er enkel og tilbyder grundlæggende nøgleværdiopbevaring og udmærker sig ved hurtigt at cachelagre data med sin multitrådede ydeevne.
  • Redis understøtter dog mere komplekse datatyper og permanent datalagring, hvilket gør det alsidigt til en bredere vifte af opgaver såsom messaging og sessionsstyring. Det har også avancerede muligheder som dataskadeling og forskellige udsættelsespolitikker, hvilket gør det velegnet til mere komplekse applikationer.

Men lad os undersøge mere detaljeret forskellene i denne artikel. Baseret på et projekt, vi har udviklet til en klient, vil jeg dække hvordan de håndterer datalagring, skalerbarhed og hvilken klarer sig bedre i betragtning af visse scenarier. Men først, lad os starte med det grundlæggende.

blue arrow to the left
Imaginary Cloud logo

Hvad er Redis

Redis, som betyder Remote Dictionary Server, blev oprettet i 2009 af Salvatore Sanfilippo for at forbedre skalerbarheden af webloganalysatoren, som hans italienske opstart byggede. Den første prototype blev skrevet i Tcl og senere transskriberet til C. Da Sanfilippo besluttede at open source projektet, begyndte det at få noget trækkraft. Giganter som GitHub og Instagram var nogle af de første virksomheder, der vedtog det.

blue arrow to the left
Imaginary Cloud logo

Hvad er Memcached

Memcached blev oprettet lidt tidligere, i 2003, af Brad Fitzpatrick til hans LiveJournal-websted. Det blev oprindeligt udviklet i Perl og derefter oversat til C. Det bruges af nogle af de største virksomheder derude som Facebook, Youtube og Twitter.

blue arrow to the left
Imaginary Cloud logo

Datalagring: Memcached vs Redis

Sådan gemmer Redis data

Redis har fem datatyper:

  • Streng: en tekstværdi
  • Hash: En hash-tabel med strengnøgler og værdier
  • Liste: En liste over strengværdier
  • Sæt: En ikke-gentagen liste over strengværdier
  • Sorteret sæt: En ikke-gentagen liste over strengværdier sorteret efter en score-værdi

Redis understøtter datatypeoperationer. Det betyder, at du kan få adgang til eller ændre dele af et dataobjekt uden at skulle indlæse hele objektet på et applikationsniveau, ændre det og derefter gemme den opdaterede version igen. Redis bruger en indkapslet version af malloc/free memory management, hvilket er en enklere tilgang sammenlignet med Memcached Slab-mekanismen, som jeg vil forklare nedenfor. Redis understøtter nøgler med en maksimal størrelse på 512 MB og værdier op til 512 MB. Denne grænse er pr. element på aggregerede datatyper (lister og sæt).

Sådan gemmer Memcached data

I modsætning til Redis, Memcached har ingen datatyper, da det gemmer strenge indekseret af en strengnøgle. Sammenlignet med Redis, det bruger mindre overhead-hukommelse. Den er også begrænset af mængden af hukommelse på sin maskine, og hvis den er fuld, begynder den at rense værdier på en mindst nylig brugt ordre. Den bruger en allokeringsmekanisme kaldet Slab, som segmenterer den tildelte hukommelse i bidder af forskellige størrelser og gemmer nøgleværdi-dataposter af den tilsvarende størrelse. Dette løser hukommelsesfragmenteringsproblemet. Memcached understøtter nøgler med en maksimal størrelse på 250B og værdier op til 1MB. Men bemærk, at det kun er standard og kan ændres ved opstart ved at øge den maksimale pladestørrelse.

Fordele ved datatype

Lad os tage det enkle eksempel på at bruge en cache til at gemme et brugersessionsobjekt.
Hvis vi bruger Memcached til at ændre et enkelt felt i objektet, skal strengen indlæses, deserialiseres, objektfeltet redigeres, serialiseres og gemmes. Hvis vi bruger Redis, kan hash-datatypen bruges. Det giver adgang til hvert felt i hashen individuelt, så enhver CRUD (oprette, læse, opdatere, slette) operation kan udføres på hver enkelt af dem. Dette gør det muligt at afbøde behovet for at gøre det på applikationsniveau. Det fører til effektivitet, når det kræver mindre I/O-operationer.

New call-to-action
blue arrow to the left
Imaginary Cloud logo

Sådan skaleres Redis og Memcached

Hvordan Redis skalerer

Siden Redis er overvejende enkelttrådet og har indbygget understøttelse af klyngedannelse, det vokser godt vandret.


Redis clustering fungerer med en master/slave arkitektur. For hver masternode er der to slave-noder til redundans, derfor, hvis masteren fejler, promoverer systemet automatisk en af slaverne som den nye master. Denne form for skalerbarhed kommer med ulempen ved vedligeholdelseskompleksitet. Det er sværere at vedligeholde flere noder, der kører synkront end en enkelt.

Sådan skaleres Memcached

Memcached skaleres let lodret, som det er multitrådet. De eneste krav er at give det flere kerner og mere hukommelse. Det kan også skaleres vandret på klientsiden ved implementering af en distribueret algoritme. Dette kommer med ulempen ved at være mere kompleks at implementere, mens Redis har det ud af kassen.

Når man beslutter, om man skal bruge Redis eller Memcached, er en stor forskel mellem disse to datapersistens.

Mens Redis er et datalager i hukommelsen (for det meste) og det er ikke ustabilt, Memcached er en cache i hukommelsen og det er ustabilt.

Også Memcached er begrænset til LRU's (mindst nyligt anvendte) udsættelsespolitik mens Redis understøtter seks forskellige politikker:

  • Ingen udvisning Hvis du returnerer en fejl, er hukommelsesgrænsen nået.
  • Alle nøgler LRU fjernelse af nøgler med den mindst senest anvendte først
  • Flygtige LRU fjernelse af nøgler, der har en udløbstid indstillet, af den mindst senest anvendte først.
  • Alle nøgler tilfældige fjernelse af nøgler tilfældigt
  • Flyktig tilfældig fjernelse af nøgler, der har en udløbstid indstillet, tilfældigt
  • Flygtig TTL fjernelse af nøgler, der har en udløbstid indstillet, med den korteste tid til at leve først.
blue arrow to the left
Imaginary Cloud logo

Hvordan Redis opnår vedholdenhed

Redis understøtter vedholdenhed, derfor kaldes det et datalager på to forskellige måder:

  • RDB-øjebliksbillede: Er et øjebliksbillede af alt dit datasæt, der gemmes i en fil på disken og udføres med bestemte intervaller. På denne måde kan datasættet gendannes ved opstart.
  • AOF-log: Er en tilføj kun fillog over alle de skrivekommandoer, der udføres på Redis-serveren. Denne fil gemmes også på disken, så ved at genkøre alle kommandoer i deres rækkefølge, kan et datasæt gendannes ved opstart.

Disse filer håndteres af en underordnet proces, og dette er en nøglefaktor i beslutningen om, hvilken form for vedholdenhed der skal bruges.

Hvis datasættet, der er gemt i Redis, er for stort, vil RDB-filen tage nogen tid at blive oprettet, hvilket har indflydelse på responstiden. På den anden side vil det være hurtigere at indlæse ved opstart sammenlignet med AOF-loggen.

Den AOF-log er bedre, hvis tab af data slet ikke er acceptabelt, da det kan opdateres ved hver kommando. Det har heller ingen korruptionsproblemer, da det er en fil, der kun er tilføjet. Det kan dog vokse meget større end et RDB-snapshot.

blue arrow to the left
Imaginary Cloud logo

Brugssager og ydeevne

Redis brugssager:


1. Sessionscaching i webapplikationer: Redis kan gemme brugersessionsdata til webapplikationer, hvilket er særligt nyttigt for platforme med et stort antal samtidige brugere. For eksempel kan et e-handelswebsted bruge Redis til hurtigt at hente brugersessioner uden at ramme databasen, hvilket fremskynder brugeroplevelsen under login- og betalingsprocesser.

2. Analyse i realtid: Redis datastrukturer som sorterede sæt og hashes kan bruges til at implementere realtidsanalysedashboards. For eksempel kan en social medieplatform bruge Redis til at spore og vise antallet af aktive brugere eller indlæg, der trender i realtid.

3. Message Queuing og Chat-applikationer: Redis pub/sub-funktioner muliggør beskedkøsystemer i realtid. Det kan bruges til at opbygge chatapplikationer, hvor meddelelser skal leveres med det samme til forskellige abonnenter.

4. Leaderboards og optælling: Spil og sociale platforme bruger ofte Redis til at administrere leaderboards på grund af dets evne til at håndtere høje skrive- og læsehastigheder. For eksempel kan en online spilplatform bruge Redis til at opdatere og vise spillerplaceringer i realtid.

5. Fuldsides cache (FPC): Redis kan bruges som en FPC til at gemme output af databaseforespørgsler og reducere belastningen på databasen. For eksempel kan et indholdsstyringssystem (CMS) bruge Redis til at cache sider og betjene dem hurtigt uden at regenerere dem på hver anmodning.

Memcached brugssager:


1. Enkel strengcachelagring: Memcached er ideel til små og mellemstore websteder, der har brug for et simpelt cachelag til strenge. For eksempel kan et blogwebsted bruge det til at cache resultaterne af databaseforespørgsler til blogindlæg og servere dem hurtigere til besøgende.

2. Cachelagring af databaseforespørgselsresultat: Memcached kan bruges til at cache resultaterne af almindeligt tilgængelige databaseforespørgsler, hvilket reducerer databasebelastningen. Et online katalogsystem kunne bruge det til at cache produktlister og detaljer.

3. Cachelagring af HTML-fragmenter: Websteder med statiske HTML-fragmenter, der er dyre at generere, kan bruge Memcached til at gemme disse fragmenter. For eksempel kan et nyhedswebsted gemme artikeluddrag på hjemmesiden for at forbedre indlæsningstiderne.

4. API-hastighedsbegrænsning: Memcacheleds atomiske inkrement- og dekrementeringsoperationer kan bruges til at implementere API-hastighedsbegrænsning. En RESTful API kunne bruge Memcached til at spore antallet af anmodninger fra en bruger inden for en given tidsramme og forhindre misbrug.

5. Sessionsbutik: I lighed med Redis kan Memcached bruges til at gemme brugersessioner, skønt uden vedholdenhed. Dette er velegnet til applikationer, hvor sessionsdata er forbigående og kan gå tabt uden væsentlig påvirkning, såsom i statsløse mikrotjenester.

blue arrow to the left
Imaginary Cloud logo

Hvilket er bedre: Memcached eller Redis

Det afhænger bestemt af kravene.

Redis er helt sikkert mere fleksibel og kraftfuld, men Memcached tjener nogle formål meget godt og opnår i nogle tilfælde bedre ydeevne. Ved at være flertrådet har det fordele, især når man arbejder med big data.


Redis understøtter dataoperationer takket være dens datatyper, som kan fremskynde sagsscenarier ved at reducere netværkets I/O-tællinger og datastørrelser. Disse dataoperationer er lige så tunge som et get or set.

Ved Imaginær sky Vi har brugt begge i Mange forskellige kunders projekter. I en, som jeg var involveret i, var vi nødt til at vælge mellem de to muligheder. Først gik vi med Memcached baseret på dets enkelhed, brugervenlighed, nem opsætning, og vi havde simpelthen brug for en cache, så vedholdenhed var ikke et krav. Selvom, efter nogle tests, vi besluttede at bytte til Redis på grund af fordelene ved at have datatyper.

I dette projekt var datatypeoperationerne en fordel for den slags data, der skulle gemmes. Redis giver også en kommando til at søge efter nøgler, der matcher et mønster sammen med mange andre nyttige kommandoer til at håndtere nøgler. Dette var noget virkelig nyttigt for os og et centralt punkt i beslutningen om at migrere til Redis.

Med hensyn til migrationen var det meget let at udføre, da Redis understøtter de fleste af de kommandoer, som Memcached gør. Hvis vi havde omvendt ruten og besluttet at migrere fra Redis til Memcached, ville det have været meget sværere, da Memcached ikke har nogen datatyper. Enhver Redis-datatypekommando ville være blevet oversat til mange kommandoer sammen med en vis databehandling imellem dem for at opnå det samme resultat.

Når det kommer til at træffe en beslutning, kan vi ikke rigtig sige, at den ene er bedre end den anden, da det hele afhænger af projektkravene. Baseret på vores erfaring er det dog vigtigt at overveje fordele og ulemper lige fra starten for at undgå ændringer og migrationer under projektet.

Join us and find out about our exciting projects!

Fandt du denne artikel nyttig? Du kan måske også lide disse!

blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
Cristiano Vicente
Cristiano Vicente

Webudvikler på Imaginær sky, der er begejstret for Node.js og alt relateret til back-end udvikling.

Read more posts by this author
Tiago Franco
Tiago Franco

CEO @ Imaginary Cloud og medforfatter af bogen Product Design Process. Jeg nyder mad, vin og Krav Maga (ikke nødvendigvis i denne rækkefølge).

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon