Programmering

Hvorfor Redis slår Memcached for hurtigbufring

Memcached eller Redis? Det er et spørsmål som nesten alltid dukker opp i enhver diskusjon om å presse mer ytelse ut av et moderne, databasestyrt webapplikasjon. Når ytelsen må forbedres, er hurtigbufring ofte det første trinnet, og Memcached eller Redis er vanligvis de første stedene å snu.

Disse kjente hurtigbuffermotorene deler en rekke likheter, men de har også viktige forskjeller. Redis, den nyere og mer allsidige av de to, er nesten alltid det overlegne valget.

Redis vs Memcached for hurtigbufring

La oss begynne med likhetene. Både Memcached og Redis fungerer som datalager i minnet, selv om Redis er mer nøyaktig beskrevet som en datastrukturlager. Både Memcached og Redis tilhører NoSQL-familien av datastyringsløsninger, og begge er basert på en nøkkelverdimodellmodell. De holder begge dataene i RAM, noe som selvfølgelig gjør dem ekstremt nyttige som et cachelag. Når det gjelder ytelse, er de to datalagrene også bemerkelsesverdig like, og viser nesten identiske egenskaper (og beregninger) med hensyn til gjennomstrømning og ventetid.

Både Memcached og Redis er modne og enormt populære open source-prosjekter. Memcached ble opprinnelig utviklet av Brad Fitzpatrick i 2003 for LiveJournal-nettstedet. Siden da har Memcached blitt omskrevet i C (den opprinnelige implementeringen var i Perl) og satt i det offentlige området, der det har blitt en hjørnestein i moderne webapplikasjoner. Den nåværende utviklingen av Memcached er fokusert på stabilitet og optimalisering i stedet for å legge til nye funksjoner.

Redis ble opprettet av Salvatore Sanfilippo i 2009, og Sanfilippo er fortsatt den ledende utvikleren av prosjektet i dag. Redis blir noen ganger beskrevet som "Memcached on steroids", noe som neppe er overraskende med tanke på at deler av Redis ble bygget som svar på erfaringer fra bruk av Memcached. Redis har flere funksjoner enn Memcached og er dermed kraftigere og mer fleksibel.

Brukt av mange selskaper og i utallige oppdragskritiske produksjonsmiljøer, støttes både Memcached og Redis av klientbiblioteker i alle tenkelige programmeringsspråk, og det er inkludert i en rekke pakker for utviklere. Det er faktisk en sjelden nettstabel som ikke inkluderer innebygd støtte for verken Memcached eller Redis.

Hvorfor er Memcached og Redis så populære? Ikke bare er de ekstremt effektive, de er også relativt enkle. Å komme i gang med enten Memcached eller Redis regnes som enkelt arbeid for en utvikler. Det tar bare noen få minutter å sette opp og få dem til å jobbe med en applikasjon. Dermed kan en liten investering av tid og krefter ha en umiddelbar, dramatisk innvirkning på ytelsen - vanligvis etter størrelsesorden. En enkel løsning med en enorm fordel; det er så nær magi som du kan komme.

Når skal du bruke Memcached

Memcached kan være å foretrekke når man cacher relativt små og statiske data, for eksempel HTML-kodefragmenter. Selv om Memcaches interne minneadministrasjon ikke er så sofistikert som Redis, er den mer effektiv i de enkleste brukstilfellene fordi den bruker relativt mindre minneressurser for metadata. Strenger (den eneste datatypen som støttes av Memcached) er ideelle for lagring av data som bare leses, fordi strengene ikke trenger videre behandling.

Store datasett involverer ofte serielle data, som alltid krever mer plass å lagre. Mens Memcached effektivt er begrenset til å lagre data i seriell form, kan datastrukturene i Redis lagre ethvert aspekt av dataene naturlig, og dermed redusere serialiseringsomkostningene.

Det andre scenariet der Memcached har en fordel i forhold til Redis, er i skalering. Fordi Memcached er flertrådet, kan du enkelt skalere opp ved å gi det flere beregningsressurser, men du vil miste deler av eller hele bufret data (avhengig av om du bruker konsistent hashing). Redis, som for det meste har en tråd, kan skaleres horisontalt via klynging uten tap av data. Clustering er en effektiv skaleringsløsning, men det er relativt mer komplisert å sette opp og betjene.

Når skal du bruke Redis

Du vil nesten alltid bruke Redis på grunn av datastrukturene. Med Redis som hurtigbuffer får du mye strøm (for eksempel muligheten til å finjustere hurtiginnhold og holdbarhet) og større effektivitet generelt. Når du bruker datastrukturene, blir effektivitetsforbedringen enorm for spesifikke applikasjonsscenarier.

Redis 'overlegenhet er tydelig i nesten alle aspekter av hurtigadministrering. Cacher benytter en mekanisme som kalles datautkastelse for å gi plass til nye data ved å slette gamle data fra minnet. Memcached's datautkastelsesmekanisme benytter en minst nylig brukt algoritme og kaster noe vilkårlig ut data som er like store som de nye dataene.

Redis, derimot, gir mulighet for finkornet kontroll over utkastelse, slik at du kan velge mellom seks forskjellige utkastelsespolitikker. Redis benytter også mer sofistikerte tilnærminger til minnestyring og utkastelse av kandidatvalg. Redis støtter både lat og aktiv utkastelse, der data blir kastet ut bare når mer plass er nødvendig eller proaktivt.

Redis gir deg mye større fleksibilitet med hensyn til objektene du kan cache. Mens Memcached begrenser nøkkelnavn til 250 byte og bare fungerer med vanlige strenger, tillater Redis at nøkkelnavn og -verdier kan være så store som 512 MB hver, og de er binære sikre. I tillegg har Redis fem primære datastrukturer å velge mellom, noe som åpner en verden av muligheter for applikasjonsutvikleren gjennom intelligent caching og manipulering av bufrede data.

Redis for vedvarende data

Bruk av Redis-datastrukturer kan forenkle og optimalisere flere oppgaver - ikke bare mens du bukker, men også når du vil at dataene skal være vedvarende og alltid tilgjengelige. For eksempel, i stedet for å lagre objekter som seriestrenger, kan utviklere bruke en Redis Hash til å lagre et objekts felt og verdier, og administrere dem med en enkelt nøkkel. Redis Hash sparer utviklerne behovet for å hente hele strengen, deserialisere den, oppdatere en verdi, omorganisere objektet på nytt, og erstatte hele strengen i hurtigbufferen med sin nye verdi for hver trivielle oppdatering - det betyr lavere ressursforbruk og økt ytelse.

Andre datastrukturer som tilbys av Redis (som lister, sett, sorterte sett, hyperlogger, bitmaps og geospatiale indekser) kan brukes til å implementere enda mer komplekse scenarier. Sorterte sett for tidsserieinntak og analyse er et annet eksempel på en Redis-datastruktur som gir enormt redusert kompleksitet og lavere båndbreddeforbruk.

En annen viktig fordel med Redis er at dataene den lagrer ikke er ugjennomsiktige, slik at serveren kan manipulere dem direkte. En betydelig andel av de 180 pluss-kommandoene som er tilgjengelige i Redis, er viet til databehandlingsoperasjoner og innebygd logikk i selve datalageret via Lua-skript på serversiden. Disse innebygde kommandoene og brukerskriptene gir deg fleksibiliteten til å håndtere databehandlingsoppgaver direkte i Redis uten å måtte sende data over nettverket til et annet system for behandling.

Redis tilbyr valgfri og avstembar datapresistens designet for å starte stroppbufferen etter en planlagt nedleggelse eller en ikke-planlagt feil. Mens vi pleier å betrakte dataene i cacher som flyktige og forbigående, kan vedvarende data til disk være ganske verdifullt i caching-scenarier. Å ha hurtigbufferdataene tilgjengelig for lasting umiddelbart etter omstart, muliggjør mye kortere oppvarming av hurtigbufferen og fjerner belastningen som er involvert i ombefolkning og beregning av hurtiginnhold fra det primære datalageret.

Redis replikering i minnet av data

Redis kan også replikere dataene den administrerer. Replikering kan brukes til å implementere et svært tilgjengelig hurtigoppsettoppsett som tåler feil og gir uavbrutt service til applikasjonen. En cache-feil faller bare litt under applikasjonsfeil når det gjelder innvirkning på brukeropplevelse og applikasjonsytelse, så det å ha en bevist løsning som garanterer cacheens innhold og tjenestetilgjengelighet er i de fleste tilfeller en stor fordel.

Sist, men ikke minst, når det gjelder operativ synlighet, gir Redis en rekke beregninger og et vell av introspektive kommandoer som kan overvåkes og spores bruk og unormal oppførsel. Sanntidsstatistikk om alle aspekter av databasen, visning av alle kommandoer som utføres, oppføring og administrering av klientforbindelser - Redis har alt det og mer.

Når utviklere innser effektiviteten av Redis 'utholdenhets- og replikeringsfunksjoner i minnet, bruker de ofte den som en førstesvaredatabase, vanligvis for å analysere og behandle data med høy hastighet og gi svar til brukeren mens en sekundær (ofte langsommere) database vedlikeholder en historisk oversikt over hva som skjedde. Når den brukes på denne måten, kan Redis også være ideell for analysesaker.

Redis for dataanalyse

Tre analysescenarier kommer umiddelbart i tankene. I det første scenariet, når du bruker noe som Apache Spark til iterativt å behandle store datasett, kan du bruke Redis som et serveringslag for data som tidligere er beregnet av Spark. I det andre scenariet kan bruk av Redis som ditt delte, distribuerte datalager i minnet akselerere Spark-behandlingshastighet med en faktor på 45 til 100. Til slutt er et altfor vanlig scenario et der rapporter og analyser må tilpasses brukeren, men å hente data fra iboende batch-datalagre (som Hadoop eller en RDBMS) tar for lang tid. I dette tilfellet er en datalagringslager i minnet som Redis den eneste praktiske måten å få personsøking og responstid på under millisekund.

Når du bruker ekstremt store operasjonelle datasett eller analysearbeidsbelastninger, er det kanskje ikke kostnadseffektivt å kjøre alt i minnet. For å oppnå ytelse på under millisekunder til lavere pris opprettet Redis Labs en versjon av Redis som kjører på en kombinasjon av RAM og flash, med muligheten til å konfigurere RAM-til-flash-forhold. Selv om dette åpner opp for flere nye veier for å akselerere prosessering av arbeidsmengder, gir det også utviklere muligheten til å kjøre "cache på flash".

Programvare med åpen kildekode fortsetter å tilby noen av de beste teknologiene som er tilgjengelige i dag. Når det gjelder å øke applikasjonsytelsen gjennom hurtigbufring, er Redis og Memcached de mest etablerte og produksjonsbevisste kandidatene. Gitt Redis 'rikere funksjonalitet, mer avanserte design, mange potensielle bruksområder og større kostnadseffektivitet i stor skala, bør Redis imidlertid være ditt førstevalg i nesten alle tilfeller.

---

Itamar Haber (@itamarhaber) er hovedutviklingsadvokat hos Redis Labs, som tilbyr Memcached og Redis som fullt administrerte skytjenester for utviklere. Hans varierte erfaring inkluderer programvareutvikling og ledelse og lederroller ved Xeround, Etagon, Amicada og MNS Ltd. Itamar har en Master of Business Administration fra det felles Kellogg-Recanati-programmet fra nordvestlige og Tel-Aviv universiteter, samt en bachelor of Science in Computer Science.

New Tech Forum er et sted for å utforske og diskutere ny teknologi i enestående dybde og bredde. Valget er subjektivt, basert på vårt valg av teknologiene vi mener er viktige og av størst interesse for leserne. godtar ikke markedsføringssikkerhet for publisering og forbeholder seg retten til å redigere alt bidratt innhold. Send alle henvendelser til [email protected].

$config[zx-auto] not found$config[zx-overlay] not found