Programmering

Redis 6: En højhastighedsdatabase, cache og meddelelsesmægler

Som mange tænker du måske på Redis som kun en cache. Dette synspunkt er forældet.

I det væsentlige er Redis et NoSQL-datastrukturlager i hukommelsen, der kan fortsætte på disken. Det kan fungere som en database, en cache og en meddelelsesmægler. Redis har indbygget replikering, Lua-scripting, LRU-udsættelse, transaktioner og forskellige niveauer af persistens på disken. Det giver høj tilgængelighed via Redis Sentinel og automatisk partitionering med Redis Cluster.

Kernen i Redis-datamodellen er nøgleværdi, men mange forskellige slags værdier understøttes: Strenge, lister, sæt, sorterede sæt, bindestreg, streams, HyperLogLogs og bitmaps. Redis understøtter også geospatiale indekser med radiusforespørgsler og streams.

[Også på: Hvordan Redis ridsede og kløede - og ændrede databaser for evigt]

For at åbne kilde Redis tilføjer Redis Enterprise funktioner til yderligere hastighed, pålidelighed og fleksibilitet samt en skydatabase som en tjeneste. Redis Enterprise skalerer lineært til hundreder af millioner operationer pr. Sekund, har aktiv-aktiv global distribution med lokal latenstid, tilbyder Redis på Flash til understøttelse af store datasæt til infrastrukturomkostninger for en diskbaseret database og giver 99,999% oppetid baseret på indbygget -i holdbarhed og encifrede sekunders failover.

Desuden udvider Redis Enterprise kernefunktionen til Redis til at understøtte enhver datamodelleringsmetode med moduler som RediSearch, RedisGraph, RedisJSON, RedisTimeSeries og RedisAI og giver mulighed for at udføre operationer på tværs af og mellem moduler og kerne. Alt dette leveres, mens databasens ventetid holdes under et millisekund.

Core Redis-funktioner og brugssager

Hvad betyder det, at Redis nu kan fungere som en database, cache og meddelelsesmægler? Og hvad er brugen af ​​disse roller, som disse roller understøtter?

Cache er den klassiske funktion af Redis. I det væsentlige sidder Redis foran en diskbaseret database og gemmer forespørgsler og resultater; applikationen kontrollerer først Redis-cachen for lagrede resultater og forespørger den diskbaserede database for resultater, der ikke findes i cachen. I betragtning af Redis 'sub-millisekund svarprocent er dette normalt en stor gevinst for applikationsydelse. Udløbstimere og LRU (mindst for nylig brugt) udsættelse fra Redis cache hjælper med at holde cachen opdateret og bruge hukommelsen effektivt.

Det session butik er en vigtig del af moderne webapplikationer. Det er et praktisk sted at opbevare oplysninger om brugeren og hendes interaktion med applikationen. I en webfarmarkitektur kræver hosting af sessionsbutikken direkte på webserveren, at brugeren "holder" til den samme back-end-server til fremtidige anmodninger, hvilket kan begrænse belastningsafbalanceren. Brug af en diskbaseret database til sessionsbutikken fjerner behovet for at binde en session til en enkelt webserver, men introducerer en ekstra latenskilde. Brug af Redis (eller en hvilken som helst anden hurtig database i hukommelsen) som sessionsbutik resulterer ofte i en web-applikationsarkitektur med lav latenstid og høj gennemstrømning.

Redis kan fungere som en meddelelsesmægler ved hjælp af tre forskellige mekanismer, og et af de vigtige brugssager for Redis som meddelelsesmægler er at fungere som lim mellem mikrotjenester. Redis har en meddelelsesmekanisme til offentliggørelse / abonnement med lave omkostninger, der letter beskeder om brand og glem, men kan ikke fungere, når destinationstjenesten ikke lytter. For en mere vedholdende, Kafka-lignende meddelelseskø bruger Redis streams, som er tidsstemplede ordnede nøgleværdipar i en enkelt nøgle. Redis understøtter også dobbeltkoblede lister over elementer, der er gemt på en enkelt nøgle, som er nyttige som en først-ind / først-ud-kø (FIFO) -kø. Microservices kan, og ofte, bruge Redis som en cache såvel som at bruge den som en meddelelsesmægler, selvom cachen skal køre i en separat forekomst af Redis fra meddelelseskøen.

Grundlæggende replikering giver Redis mulighed for at skalere uden at bruge klyngeteknologien i Redis Enterprise-versionen. Redis-replikering bruger en leader-follower-model (også kaldet master-slave), som er asynkron som standard. Klienter kan tvinge synkron replikering ved hjælp af en WAIT-kommando, men selv det gør ikke Redis konsistent på tværs af replikaer.

Redis har Lua-scripting på serversiden, der gør det muligt for programmører at udvide databasen uden at skrive C-moduler eller klientsides kode. Grundlæggende Redis-transaktioner tillader en klient at deklarere en sekvens af kommandoer som en ikke-afbrydelig enhed ved hjælp af MULTI- og EXEC-kommandoerne til at definere og køre sekvensen. Dette er ikke det samme som relationelle transaktioner med tilbageførsler.

Redis har forskellige niveauer af persistens på disken, som brugeren kan vælge. RDB (Redis database file) persistens tager point-in-time snapshots af databasen med bestemte intervaller. AOF (vedhæftede fil) vedholdenhedslogger hver skrivefunktion, der modtages af serveren. Du kan bruge både RDB- og AOF-persistens for maksimal datasikkerhed.

Redis Sentinel, selv et distribueret system, giver høj tilgængelighed for Redis. Det overvåger master- og replika-forekomster, meddelelse, hvis der er noget galt, og automatisk failover, hvis masteren holder op med at arbejde. Det fungerer også som en konfigurationsudbyder for klienter.

Redis Cluster giver en måde at køre en Redis-installation på, hvor data automatisk deles over flere Redis-noder. Redis Cluster giver også en vis grad af tilgængelighed under partitioner, selvom klyngen stopper med at fungere, hvis de fleste mestre ikke er tilgængelige.

Som jeg nævnte tidligere, er Redis en nøgleværdibutik, der understøtter Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs og Bitmaps som værdier. En af de enkleste og mest almindelige anvendelsestilfælde er at bruge heltalværdier som tællere. Til støtte for dette er INCR (inkrement), DECR (decrement) og andre enkeltoperationer atomare og derfor sikre i et multiklientmiljø. I Redis, når nøgler manipuleres, oprettes de automatisk, hvis de ikke allerede findes.

> SET-forbindelser 10

Okay

> INCR-forbindelser

(heltal) 11

> INCR-forbindelser

(heltal) 12

> DEL-forbindelser

(heltal) 1

> INCR-forbindelser

(heltal) 1

> INCRBY-forbindelser 100

(heltal) 101

> DECR-forbindelser

(heltal) 100

> DECRBY-tilslutninger 10

(heltal) 90

De andre slags værdistrukturer har også deres egne eksempler i Try Redis-selvstudiet. Selvstudiet gennemgik, da jeg selv prøvede det; Jeg forventer, at det snart løses, da Redis Labs er blevet involveret i det, der oprindeligt var et samfund.

Der er et antal tilføjelsesmoduler til Redis, herunder (i faldende rækkefølge efter popularitet) et neuralt netværksmodul, fuldtekstsøgning, SQL, en JSON-datatype og en grafdatabase. Licenserne til moduler er fastsat af forfatterne. Nogle af de moduler, der arbejder med Redis, er primært moduler til Redis Enterprise.

Redis Enterprise-forbedringer

Ved hjælp af en delt-intet klyngearkitektur leverer Redis Enterprise uendelig lineær skalering uden at pålægge ikke-lineære omkostninger i en udskalet arkitektur. Du kan implementere flere Redis-forekomster på en enkelt klyngenode for at drage fuld fordel af multi-core computerarkitektur. Redis Enterprise har demonstreret skalering til hundreder af millioner operationer i sekundet med fem ni (99,999%) oppetid. Redis Enterprise foretager automatisk omskæring og genbalancering, samtidig med at den opretholder lav latenstid og høj kapacitet til transaktionsbelastninger.

Redis Enterprise tilbyder aktiv-aktiv implementering til globalt distribuerede databaser, der muliggør samtidig læse- og skriveoperationer på det samme datasæt på tværs af flere geografiske placeringer. For at gøre det mere effektivt kan Redis Enterprise bruge konfliktfrie replikerede datatyper (CRDT'er) for at opretholde konsistens og tilgængelighed af data. Riak og Azure Cosmos DB er to andre NoSQL-databaser, der understøtter CRDT'er.

Mens der findes omfattende akademisk litteratur om CRDT'er, indrømmer jeg, at jeg ikke helt forstår, hvordan eller hvorfor de fungerer. Den korte oversigt over hvad de gør er, at CRDT'er kan løse uoverensstemmelser uden indblanding ved hjælp af et matematisk afledt sæt regler. CRDT'er er værdifulde for data i høj lydstyrke, der kræver en delt tilstand, og kan bruge geografisk spredte servere til at reducere latenstiden for brugerne.

En af de største forskelle mellem Redis og Redis Enterprise er, at Redis Enterprise afkobler datastien fra klyngestyring. Dette forbedrer driften af ​​begge komponenter. Datastien er baseret på flere nul-latens, multi-threaded proxies, der ligger på hver af klyngenoderne for at skjule systemets underliggende kompleksitet. Klyngemanageren er en styrende funktion, der giver funktioner såsom genharding, genbalancering, auto-failover, rack-bevidsthed, databasetilvejebringelse, ressourcehåndtering, konfiguration af datapersistens og sikkerhedskopiering og gendannelse. Da klyngeadministratoren er helt afkoblet fra datastiakomponenterne, påvirker ændringer i softwarekomponenterne ikke datastiekomponenterne.

Redis på Flash er en Redis Enterprise-funktion, der drastisk kan reducere omkostningerne ved hardware til Redis. I stedet for at skulle betale gennem næsen for terabyte RAM eller begrænse størrelsen på dine Redis-datasæt, kan du bruge Redis på Flash til at placere hyppigt tilgængelige hot-data i hukommelsen og koldere værdier i Flash eller vedvarende hukommelse, såsom Intel Optane DC.

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

Hvad er nyt i Redis 6?

Redis 6 er en stor udgivelse, både til open source-versionen og Redis Enterprise-kommercielle version. Ydelsesnyhederne er brugen af ​​gevind I / O, hvilket giver Redis 6 en 2x forbedring i hastighed i forhold til Redis 5 (hvilket ikke var slumret). Det overføres til Redis Enterprise, som har yderligere hastighedsforbedringer for klynger som beskrevet ovenfor.

Tilføjelsen af ​​adgangskontrollister (ACL'er) giver Redis 6 brugerkonceptet og giver udviklere mulighed for at skrive mere sikker kode. Redis Enterprise 6 bygger på ACL'er for at tilbyde rollebaseret adgangskontrol (RBAC), hvilket er mere bekvemt for programmører og DBA'er.

Større nye funktioner i Redis 6

Redis 6.0 open source

  • Adgangskontrollister (ACL'er)
  • Forbedret udsættelse
  • Gevindet I / O
  • RESP3-protokol

Redis Enterprise 6.0

  • Rollebaseret adgangskontrol (RBAC)
  • Udvider aktiv-aktiv
  • HyperLogLog
  • Strømme

Redis Enterprise 6.0 tilføjer understøttelse af datatypen Streams i aktivt aktive databaser. Det giver mulighed for både høj tilgængelighed og lav ventetid, mens du samtidigt læser og skriver til og fra en realtidsstrøm i flere datacentre på flere geografiske placeringer.

RedisGears er en dynamisk ramme, der gør det muligt for udviklere at skrive og udføre funktioner, der implementerer datastrømme i Redis. Det giver brugerne mulighed for at skrive Python-scripts til at køre inde i Redis, og muliggør en række brugssager inklusive bagudskrivning (Redis fungerer som en front-end til en diskbaseret database), realtids databehandling, streaming og hændelsesbehandling, operationer der krydser datastrukturer og modeller og AI-drevne transaktioner.

RedisAI er en model, der betjener motor, der kører inde i Redis. Det kan udføre inferens med PyTorch-, TensorFlow- og ONNX-modeller. RedisAI kan køre på CPU'er og GPU'er og muliggør brugstilfælde som f.eks. Afsløring af svig, detektion af uregelmæssigheder og personalisering.

Installation af Redis

Du kan installere Redis ved at downloade og kompilere en kilde-tarball eller ved at trække et Docker-billede fra Docker Hub. Redis kan kompileres og bruges på Linux, MacOS, OpenBSD, NetBSD og FreeBSD. Kildekodedepotet findes på GitHub. På Windows kan du køre Redis enten i en Docker-container eller under Windows Subsystem til Linux (WSL), som kræver Windows 10.

Du kan installere Redis Enterprise på Linux eller i Docker-containere. Linux-downloads kommer i form af binære pakker (DEB eller RPM afhængigt af Linux-smag) og Bash-shell-scripts til klynginstallation. Scripts tjekker for de krævede fire kerner og 15 GB RAM til installation.

Redis Enterprise Cloud

Den hurtigste måde at installere Redis Enterprise på er slet ikke at installere det, men snarere at køre det i Redis Enterprise Cloud. Da jeg selv prøvede dette med henblik på gennemgang, modtog jeg oprindeligt en Redis 5-instans; Jeg var nødt til at bede om en opgradering til Redis 6.

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