Programmering

Redis 6: En høyhastighets database, cache og meldingsmegler

Som mange kan du tenke på Redis som bare en cache. Dette synspunktet er foreldet.

I hovedsak er Redis en NoSQL-datastrukturbutikk i minnet som kan fortsette på disken. Den kan fungere som en database, en cache og en meldingsmegler. Redis har innebygd replikering, Lua-skripting, LRU-utkastelse, transaksjoner og forskjellige nivåer på harddisken. Det gir høy tilgjengelighet via Redis Sentinel og automatisk partisjonering med Redis Cluster.

Kjernen Redis datamodell er nøkkelverdi, men mange forskjellige typer verdier støttes: Strenger, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs og Bitmaps. Redis støtter også geospatiale indekser med radiusforespørsler og strømmer.

[Også på: Hvordan Redis riper og klør - og endret databaser for alltid]

For å åpne kildekoden Redis, legger Redis Enterprise til funksjoner for ekstra hastighet, pålitelighet og fleksibilitet, samt en skydatabase som en tjeneste. Redis Enterprise skalerer lineært til hundrevis av millioner operasjoner per sekund, har aktiv-aktiv global distribusjon med lokal ventetid, tilbyr Redis på Flash for å støtte store datasett til infrastrukturkostnadene for en diskbasert database, og gir 99,999% oppetid basert på bygget -i holdbarhet og ensifrede sekunders failover.

Videre utvider Redis Enterprise kjernen av Redis-funksjonaliteten til å støtte enhver datamodelleringsmetode med moduler som RediSearch, RedisGraph, RedisJSON, RedisTimeSeries og RedisAI, og lar operasjoner utføres på tvers av og mellom moduler og kjerne. Alt dette leveres mens databasetiden holdes under ett millisekund.

Core Redis-funksjoner og brukssaker

Hva betyr det at Redis nå kan fungere som en database, cache og meldingsmegler? Og hva er brukssakene disse rollene støtter?

Cache er den klassiske funksjonen til Redis. I hovedsak sitter Redis foran en diskbasert database og lagrer spørsmål og resultater; applikasjonen sjekker Redis-hurtigbufferen for lagrede resultater først, og spør etter den diskbaserte databasen for resultater som ikke er i hurtigbufferen. Gitt den reaksjonsfrekvensen under millisekund av Redis, er dette vanligvis en stor gevinst for applikasjonsytelsen. Utløpstimere og LRU (sist brukt) utkasting fra Redis-hurtigbufferen hjelper til å holde hurtigbufferen oppdatert og bruke minne effektivt.

De sesjonsbutikk er en viktig del av moderne webapplikasjoner. Det er et praktisk sted å lagre informasjon om brukeren og hennes interaksjoner med applikasjonen. I en webgårdarkitektur krever hosting av øktbutikken direkte på webserveren at brukeren "holder" til den samme back-end-serveren for fremtidige forespørsler, noe som kan begrense belastningsbalansen. Ved å bruke en diskbasert database for øktbutikken fjernes behovet for å binde en økt til en enkelt webserver, men introduserer en ekstra latenskilde. Bruk av Redis (eller en hvilken som helst annen rask database i minnet) som øktlagring resulterer ofte i en lav latens, høy gjennomstrømningsapplikasjonsarkitektur.

Redis kan fungere som en meldingsformidler ved hjelp av tre forskjellige mekanismer, og en av de viktige brukssakene for Redis som meldingsmegler er å fungere som lim mellom mikrotjenester. Redis har en varselmekanisme for publisering / abonnement med lav overhead som muliggjør meldinger om brann og glem, men kan ikke fungere når destinasjonstjenesten ikke lytter. For en mer vedvarende, Kafka-lignende meldingskø, bruker Redis strømmer, som er tidsstemplet bestilte nøkkelverdipar i en enkelt nøkkel. Redis støtter også dobbeltkoblede lister over elementer som er lagret med en enkelt nøkkel, som er nyttige som først-inn / først-ut-kø (FIFO). Mikrotjenester kan, og ofte, bruke Redis som hurtigbuffer, i tillegg til å bruke det som meldingsmegler, selv om hurtigbufferen skal kjøres i en separat forekomst av Redis fra meldingskøen.

Grunnleggende replikering gjør at Redis kan skaleres uten å bruke klyngeteknologien til Redis Enterprise-versjonen. Redis-replikering bruker en leader-follower-modell (også kalt master-slave), som er asynkron som standard. Klienter kan tvinge synkron replikering ved hjelp av en WAIT-kommando, men selv det gjør ikke Redis konsistent på tvers av replikaer.

Redis har Lua-skript på serversiden, slik at programmerere kan utvide databasen uten å skrive C-moduler eller klientside-kode. Grunnleggende Redis-transaksjoner tillater en klient å erklære en sekvens med kommandoer som en ikke-avbrytbar enhet ved å bruke MULTI- og EXEC-kommandoene for å definere og kjøre sekvensen. Dette er ikke det samme som relasjonelle transaksjoner med tilbakeførsler.

Redis har forskjellige nivåer på harddisken som brukeren kan velge. RDB (Redis database file) persistens tar øyeblikksbilder av databasen med bestemte intervaller. AOF (vedleggsfil) vedvaringslogger logger hver skriveoperasjon mottatt av serveren. Du kan bruke både RDB- og AOF-utholdenhet for maksimal datasikkerhet.

Redis Sentinel, selv et distribuert system, gir høy tilgjengelighet for Redis. Den overvåker master- og replika-forekomster, varsler om det er noe galt og automatisk failover hvis masteren slutter å fungere. Det fungerer også som en konfigurasjonsleverandør for klienter.

Redis Cluster gir en måte å kjøre en Redis-installasjon der data automatisk deles over flere Redis-noder. Redis Cluster gir også en viss tilgjengelighet under partisjoner, selv om klyngen vil slutte å fungere hvis de fleste mestere blir utilgjengelige.

Som jeg nevnte tidligere, er Redis en nøkkelverdibutikk som støtter Strenger, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs og Bitmaps som verdier. En av de enkleste og vanligste brukssakene er å bruke heltallverdier som tellere. Til støtte for dette er INCR (inkrement), DECR (decrement) og andre enkeltoperasjoner atomare, og derfor trygge i et multiklientmiljø. I Redis, når nøkler manipuleres, blir de automatisk opprettet hvis de ikke allerede eksisterer.

> SET-tilkoblinger 10

OK

> INCR-tilkoblinger

(heltall) 11

> INCR-tilkoblinger

(heltall) 12

> DEL-tilkoblinger

(heltall) 1

> INCR-tilkoblinger

(heltall) 1

> INCRBY-tilkoblinger 100

(heltall) 101

> DECR-tilkoblinger

(heltall) 100

> DECRBY-tilkoblinger 10

(heltall) 90

De andre typer verdistrukturer har også sine egne eksempler i Try Redis-opplæringen. Opplæringen var under vedlikehold da jeg prøvde det selv; Jeg forventer at det blir løst snart, ettersom Redis Labs har blitt involvert i det som opprinnelig var et fellesskapsinnsats.

Det finnes en rekke tilleggsmoduler for Redis, inkludert (i fallende rekkefølge etter popularitet) en nevral nettverksmodul, fulltekstsøk, SQL, en JSON-datatype og en grafdatabase. Lisensene for moduler er satt av forfatterne. Noen av modulene som fungerer med Redis er primært moduler for Redis Enterprise.

Redis Enterprise-forbedringer

Ved å bruke en delt-ingenting-klyngearkitektur, leverer Redis Enterprise uendelig lineær skalering uten å pålegge noen ikke-lineære omkostninger i en utskalert arkitektur. Du kan distribuere flere Redis-forekomster på en enkelt klyngenode, for å dra full nytte av flerkjernedataarkitektur. Redis Enterprise har demonstrert skalering til hundrevis av millioner operasjoner per sekund med fem ni (99,999%) oppetid. Redis Enterprise gjør automatisk sharding og rebalansering samtidig som den opprettholder lav ventetid og høy gjennomstrømning for transaksjonsbelastninger.

Redis Enterprise tilbyr aktiv-aktiv distribusjon for globalt distribuerte databaser, som muliggjør samtidig lese- og skriveoperasjoner på samme datasett på tvers av flere geografiske steder. For å gjøre det mer effektivt kan Redis Enterprise bruke konfliktfrie replikerte datatyper (CRDT) for å opprettholde konsistens og tilgjengelighet av data. Riak og Azure Cosmos DB er to andre NoSQL-databaser som støtter CRDT.

Selv om det er omfattende akademisk litteratur om CRDT, innrømmer jeg at jeg ikke helt forstår hvordan eller hvorfor de fungerer. Den korte oppsummeringen av hva de gjør er at CRDT kan løse uoverensstemmelser uten inngripen, ved hjelp av et matematisk avledet sett med regler. CRDT er verdifulle for data med høyt volum som krever en delt tilstand, og kan bruke geografisk spredte servere for å redusere ventetid for brukere.

En av de største forskjellene mellom Redis og Redis Enterprise er at Redis Enterprise frakobler datastien fra klyngeadministrasjon. Dette forbedrer driften av begge komponentene. Databanen er basert på flere nullforsinkelser, flertrådede proxyer som ligger på hver av klyngenodene for å maskere den underliggende kompleksiteten i systemet. Klyngebehandleren er en styrende funksjon som gir muligheter som omharding, ombalansering, automatisk failover, rack-bevissthet, databaseklarisering, ressursadministrasjon, konfigurasjon av datapresistens og sikkerhetskopiering og gjenoppretting. Fordi klyngebehandleren er helt frakoblet komponentene i datastien, påvirker ikke endringer i programvarekomponentene komponentene i datastien.

Redis on Flash er en Redis Enterprise-funksjon som kan redusere kostnadene for maskinvare for Redis drastisk. I stedet for å måtte betale gjennom nesen for terabyte RAM eller begrense størrelsen på Redis-datasettene, kan du bruke Redis på Flash for å plassere hyppig tilgjengelige data i minnet og kaldere verdier i Flash eller vedvarende minne, for eksempel Intel Optane DC.

Redis Enterprise-moduler inkluderer RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch og RedisGears. Alle Redis Enterprise-moduler fungerer også med Redis med åpen kildekode.

Hva er nytt i Redis 6?

Redis 6 er en stor utgivelse, både for åpen kildekodeversjon og Redis Enterprise kommersielle versjon. Ytelsesnyhetene er bruken av gjengede I / U, noe som gir Redis 6 en 2x forbedring i hastighet i forhold til Redis 5 (som ikke var slurv). Det overføres til Redis Enterprise, som har ytterligere hastighetsforbedringer for klynger som beskrevet ovenfor.

Tillegg av tilgangskontrollister (ACL-er) gir Redis 6 konseptet med brukere, og lar utviklere skrive sikrere kode. Redis Enterprise 6 bygger på ACL-er for å tilby rollebasert tilgangskontroll (RBAC), noe som er mer praktisk for programmerere og DBA-er.

Viktige nye funksjoner i Redis 6

Redis 6.0 åpen kildekode

  • Tilgangskontrollister (ACL-er)
  • Forbedrede utkastelser
  • Gjenget I / O
  • RESP3-protokoll

Redis Enterprise 6.0

  • Rollebasert tilgangskontroll (RBAC)
  • Utvider aktiv-aktiv
  • HyperLogLog
  • Strømmer

Redis Enterprise 6.0 legger til støtte for datatypen Streams i aktiv-aktive databaser. Det tillater både høy tilgjengelighet og lav ventetid samtidig som du leser og skriver til og fra en sanntidsstrøm i flere datasentre på flere geografiske steder.

RedisGears er et dynamisk rammeverk som gjør det mulig for utviklere å skrive og utføre funksjoner som implementerer datastrømmer i Redis. Det lar brukerne skrive Python-skript for å kjøre inne i Redis, og muliggjør en rekke brukssaker, inkludert tilbakevendende (Redis fungerer som en front-end til en diskbasert database), sanntids databehandling, streaming og hendelsesbehandling, operasjoner som krysser datastrukturer og modeller, og AI-drevne transaksjoner.

RedisAI er en modell som serverer motor som går inne i Redis. Den kan utføre inferens med PyTorch-, TensorFlow- og ONNX-modeller. RedisAI kan kjøre på CPUer og GPUer, og muliggjør brukstilfeller som svindeloppdagelse, avviksdeteksjon og personalisering.

Installere Redis

Du kan installere Redis ved å laste ned og kompilere en kilde-tarball eller ved å trekke et Docker-bilde fra Docker Hub. Redis kan kompileres og brukes på Linux, MacOS, OpenBSD, NetBSD og FreeBSD. Kildekodedepotet er på GitHub. På Windows kan du kjøre Redis enten i en Docker-container eller under Windows Subsystem for Linux (WSL), som krever Windows 10.

Du kan installere Redis Enterprise på Linux eller i Docker-containere. Linux-nedlastningene kommer i form av binære pakker (DEB eller RPM, avhengig av smaken av Linux) og Bash shell-skript for klynginstallasjon. Skriptene ser etter de nødvendige fire kjernene og 15 GB RAM for installasjon.

Redis Enterprise Cloud

Den raskeste måten å installere Redis Enterprise på er ikke å installere det i det hele tatt, men heller å kjøre det i Redis Enterprise Cloud. Da jeg prøvde dette selv for vurderingsformål, mottok jeg opprinnelig en Redis 5-forekomst; Jeg måtte be om en oppgradering til Redis 6.