Programmering

Hvorfor Redis slår Memcached til caching

Memcached eller Redis? Det er et spørgsmål, der næsten altid opstår i enhver diskussion om at presse mere ydeevne ud af en moderne, databasestyret webapplikation. Når ydeevnen skal forbedres, er caching ofte det første skridt, og Memcached eller Redis er typisk de første steder at vende om.

Disse berømte cache-motorer deler en række ligheder, men de har også vigtige forskelle. Redis, den nyere og mere alsidige af de to, er næsten altid det overlegne valg.

Redis vs. Memcached til cache

Lad os starte med lighederne. Både Memcached og Redis fungerer som in-memory nøgleværdidatalagre, selvom Redis mere nøjagtigt beskrives som et datastrukturlager. Både Memcached og Redis hører til NoSQL-familien af ​​datastyringsløsninger, og begge er baseret på en nøgleværdimodelmodel. De holder begge alle data i RAM, hvilket selvfølgelig gør dem yderst nyttige som et cachelag. Med hensyn til ydeevne er de to datalagre også bemærkelsesværdigt ens og udviser næsten identiske egenskaber (og metrics) med hensyn til gennemstrømning og latenstid.

Både Memcached og Redis er modne og meget populære open source-projekter. Memcached blev oprindeligt udviklet af Brad Fitzpatrick i 2003 til LiveJournal-webstedet. Siden da er Memcached blevet omskrevet i C (den oprindelige implementering var i Perl) og sat i det offentlige domæne, hvor det er blevet en hjørnesten i moderne webapplikationer. Den aktuelle udvikling af Memcached er fokuseret på stabilitet og optimeringer snarere end at tilføje nye funktioner.

Redis blev oprettet af Salvatore Sanfilippo i 2009, og Sanfilippo er fortsat den ledende udvikler af projektet i dag. Redis beskrives undertiden som "Memcached on steroids", hvilket næppe er overraskende i betragtning af at dele af Redis blev bygget som svar på erfaringerne fra brug af Memcached. Redis har flere funktioner end Memcached og er således mere kraftfuld og fleksibel.

Brugt af mange virksomheder og i utallige missionskritiske produktionsmiljøer understøttes både Memcached og Redis af klientbiblioteker på alle tænkelige programmeringssprog, og det er inkluderet i en lang række pakker til udviklere. Faktisk er det en sjælden webstak, der ikke inkluderer indbygget support til hverken Memcached eller Redis.

Hvorfor er Memcached og Redis så populære? Ikke kun er de ekstremt effektive, de er også relativt enkle. Kom godt i gang med enten Memcached eller Redis betragtes som let arbejde for en udvikler. Det tager kun et par minutter at konfigurere og få dem til at arbejde med en applikation. Således kan en lille investering af tid og kræfter have en øjeblikkelig, dramatisk indvirkning på ydeevnen - normalt efter størrelsesorden. En enkel løsning med en enorm fordel; det er så tæt på magi, som du kan komme.

Hvornår skal du bruge Memcached

Memcached kan være at foretrække, når man cachelager relativt små og statiske data, såsom HTML-kodefragmenter. Memcaches interne hukommelsesstyring, selvom den ikke er så sofistikeret som Redis, er mere effektiv i de enkleste tilfælde, fordi den bruger relativt mindre hukommelsesressourcer til metadata. Strenge (den eneste datatype, der understøttes af Memcached) er ideelle til lagring af data, der kun læses, fordi strengene ikke kræver yderligere behandling.

Store datasæt involverer ofte serielle data, som altid kræver mere plads til at gemme. Mens Memcached effektivt er begrænset til lagring af data i sin serielle form, kan datastrukturer i Redis gemme ethvert aspekt af dataene indbygget og dermed reducere serialiseringsomkostningerne.

Det andet scenario, hvor Memcached har en fordel i forhold til Redis, er i skalering. Fordi Memcached er multitrådet, kan du let opskalere ved at give det flere beregningsressourcer, men du mister en del af eller alle de cachelagrede data (afhængigt af om du bruger ensartet hashing). Redis, som for det meste er enkeltgevindet, kan skaleres vandret via klyngedannelse uden tab af data. Clustering er en effektiv skaleringsløsning, men det er forholdsvis mere kompliceret at opsætte og betjene.

Hvornår skal jeg bruge Redis

Du vil næsten altid bruge Redis på grund af dets datastrukturer. Med Redis som en cache får du en masse strøm (såsom evnen til at finjustere cacheindhold og holdbarhed) og samlet set større effektivitet. Når du bruger datastrukturer, bliver effektivitetsforøgelsen enorm for specifikke applikationsscenarier.

Redis 'overlegenhed er tydelig i næsten alle aspekter af cache-styring. Cacher anvender en mekanisme kaldet dataudkastning for at gøre plads til nye data ved at slette gamle data fra hukommelsen. Memcached's dataudkastningsmekanisme anvender en mindst for nylig anvendt algoritme og udsender noget vilkårligt data, der har samme størrelse som de nye data.

Redis giver derimod mulighed for en finkornet kontrol over udsættelse, så du kan vælge mellem seks forskellige udsættelsespolitikker. Redis anvender også mere sofistikerede tilgange til hukommelsesstyring og udsendelse af kandidatvalg. Redis understøtter både doven og aktiv udsættelse, hvor data kun udsendes, når der er behov for mere plads eller proaktivt.

Redis giver dig meget større fleksibilitet med hensyn til de objekter, du kan cache. Mens Memcached begrænser nøglenavne til 250 byte og kun fungerer med almindelige strenge, tillader Redis nøglenavne og værdier så store som 512 MB hver, og de er binære sikre. Plus, Redis har fem primære datastrukturer at vælge imellem, hvilket åbner en verden af ​​muligheder for applikationsudvikleren gennem intelligent caching og manipulation af cachelagrede data.

Redis for vedholdenhed af data

Brug af Redis-datastrukturer kan forenkle og optimere flere opgaver - ikke kun under cache, men også når du vil have dataene vedvarende og altid tilgængelige. For eksempel kan udviklere i stedet for at gemme objekter som serielle strenge bruge en Redis Hash til at gemme et objekts felter og værdier og administrere dem ved hjælp af en enkelt nøgle. Redis Hash sparer udviklere behovet for at hente hele strengen, deserialisere den, opdatere en værdi, genoprette genstand til objektet og erstatte hele strengen i cachen med dens nye værdi for hver triviel opdatering - det betyder lavere ressourceforbrug og øget ydeevne.

Andre datastrukturer, der tilbydes af Redis (såsom lister, sæt, sorterede sæt, hyperloglogs, bitmaps og geospatiale indekser) kan bruges til at implementere endnu mere komplekse scenarier. Sorterede sæt til tidsserieindtagelse og analyse er et andet eksempel på en Redis-datastruktur, der tilbyder enormt reduceret kompleksitet og lavere båndbreddeforbrug.

En anden vigtig fordel ved Redis er, at de data, den gemmer, ikke er uigennemsigtige, så serveren kan manipulere dem direkte. En betydelig andel af de 180 plus-kommandoer, der er tilgængelige i Redis, er afsat til databehandlingsoperationer og indlejring af logik i selve datalageret via serversiden Lua-scripting. Disse indbyggede kommandoer og brugerskripter giver dig fleksibiliteten til at håndtere databehandlingsopgaver direkte i Redis uden at skulle sende data over hele netværket til et andet system til behandling.

Redis tilbyder valgfri og afstembar datapersistens designet til at bootstrape cachen efter en planlagt nedlukning eller en ikke-planlagt fejl. Mens vi har tendens til at betragte data i cacher som flygtige og forbigående, kan vedvarende data til disk være meget værdifuldt i caching-scenarier. At have cachens data tilgængelige til indlæsning umiddelbart efter genstart giver mulighed for meget kortere opvarmning af cache og fjerner belastningen, der er involveret i genbefolkning og genberegning af cacheindhold fra det primære datalager.

Redis datareplikering i hukommelsen

Redis kan også replikere de data, den administrerer. Replikering kan bruges til at implementere en meget tilgængelig cache-opsætning, der kan modstå fejl og levere uafbrudt service til applikationen. En cachefejl er kun lidt under applikationsfejl med hensyn til indvirkningen på brugeroplevelsen og applikationsydelsen, så det er en stor fordel at have en gennemprøvet løsning, der garanterer cachens indhold og servicetilgængelighed.

Sidst, men ikke mindst, med hensyn til operationel synlighed, giver Redis en række målinger og et væld af introspektive kommandoer, hvorpå man kan overvåge og spore brug og unormal adfærd. Realtidsstatistikker om alle aspekter af databasen, visning af alle kommandoer, der udføres, notering og styring af klientforbindelser - Redis har alt det og mere.

Når udviklere er klar over effektiviteten af ​​Redis 'vedholdenheds- og replikeringsfunktioner i hukommelsen, bruger de det ofte som en first-responder database, normalt til at analysere og behandle data med høj hastighed og give svar til brugeren, mens en sekundær (ofte langsommere) database opretholder en historisk oversigt over, hvad der skete. Når det bruges på denne måde, kan Redis også være ideel til analytiske brugssager.

Redis til dataanalyse

Tre analysescenarier kommer straks i tankerne. I det første scenarie, når du bruger noget som Apache Spark til iterativt at behandle store datasæt, kan du bruge Redis som et serveringslag til data, der tidligere er beregnet af Spark. I det andet scenario kan brug af Redis som din delte, i hukommelsen distribuerede datalager fremskynde Spark-behandlingshastigheder med en faktor på 45 til 100. Endelig er et alt for almindeligt scenarie, hvor rapporter og analyser skal tilpasses efter brugeren, men det tager for lang tid at hente data fra iboende batch-datalagre (som Hadoop eller en RDBMS). I dette tilfælde er en datalagring i hukommelsen som Redis den eneste praktiske måde at få personsøgning og svartider på under millisekund.

Når du bruger ekstremt store operationelle datasæt eller analysearbejdsbelastninger, er det måske ikke omkostningseffektivt at køre alt i hukommelsen. For at opnå sub-millisekund ydeevne til lavere omkostninger oprettede Redis Labs en version af Redis, der kører på en kombination af RAM og flash med mulighed for at konfigurere RAM-til-flash-forhold. Selvom dette åbner flere nye muligheder for at fremskynde behandling af arbejdsbelastning, giver det også udviklere mulighed for simpelthen at køre deres "cache på flash."

Open source-software leverer fortsat nogle af de bedste teknologier, der er tilgængelige i dag. Når det kommer til at øge applikationsydelsen gennem caching, er Redis og Memcached de mest etablerede og produktionsprøvede kandidater. I betragtning af Redis 'rigere funktionalitet, mere avancerede design, mange potentielle anvendelser og større omkostningseffektivitet i stor skala, bør Redis være dit første valg i næsten alle tilfælde.

---

Itamar Haber (@itamarhaber) er chefudvikler for Redis Labs, der tilbyder Memcached og Redis som fuldt administrerede cloudtjenester til udviklere. Hans varierede erfaring inkluderer software produktudvikling og ledelse og lederroller i Xeround, Etagon, Amicada og MNS Ltd. Itamar besidder en Master of Business Administration fra det fælles Kellogg-Recanati-program fra nordvestlige og Tel-Aviv universiteter samt en bachelor of Science i datalogi.

New Tech Forum giver et sted at udforske og diskutere nye virksomhedsteknologier i hidtil uset dybde og bredde. Valget er subjektivt baseret på vores valg af de teknologier, som vi mener er vigtige og af største interesse for læserne. accepterer ikke markedsføringssikkerhed til offentliggørelse og forbeholder sig retten til at redigere alt bidraget indhold. Send alle forespørgsler til [email protected].

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