Bassam_Chahine_600x448.jpg

Redis: inzicht in de belangrijkste toepassingen en uitdagingen van de Open Source Data Store

Klik voor meer informatie over auteur Bassam Chahine.

Redis, wat staat voor “REmote Dictionary Server”, is een voor snelheid geoptimaliseerde gegevensopslag in het geheugen die meestal als cache wordt gebruikt. Redis biedt veelzijdige datastructuren – van strings, lijsten, woordenboeken en sets tot ondersteuning voor geschatte telling, geolocatie en streamverwerking. Hoewel Redis standaard is geconfigureerd als een cache, houdt het gegevens op schijf vast en kan het gemakkelijk dienen als database, message broker of wachtrij.

Vanuit een capaciteitsperspectief biedt open source Redis bijzonder hoge prestaties, hoge beschikbaarheid en schemaloze flexibiliteit om een ​​vrij breed scala aan gegevenstypen en gebruiksscenario’s te ondersteunen. Redis wordt momenteel ingezet door meer dan 20 procent van de professionele ontwikkelaars volgens het 2020 Stack Overflow Developer Survey en heeft zich sterk gehouden als ontwikkelaars “meest geliefd” databasetechnologie voor de afgelopen vier jaar in datzelfde onderzoek.

Hoe Redis werkt en de belangrijkste voordelen

Redis-gegevens bevinden zich zowel in het geheugen als op de schijf omdat ze in twee verschillende indelingen naar de schijf kunnen schrijven. Een binair formaat vertegenwoordigt gegevens in het geheugen en kan opnieuw worden geladen na een herstart. Een ander “alleen-append bestand” (AOF) -formaat legt opdrachten vast aan de database en kan deze opdrachten opnieuw afspelen om een ​​herstarte Redis-instantie naar de vorige staat te brengen. Door gegevens in het geheugen op te slaan, elimineert Redis de latentie van toegang tot schijfopslag – door lees- / schrijfbewerkingen van minder dan een milliseconde uit te voeren en miljoenen bewerkingen per seconde uit te voeren.

De schijfpersistentie van Redis maakt ‘warme herstarts’ mogelijk, waardoor een Redis-cache positie kan innemen voor een langzamere infrastructuur en verkeer kan doorsturen in een tempo dat de infrastructuur aankan. Schijfpersistentie stelt ontwikkelaars ook in staat om Redis te gebruiken als een primaire database voor toepassingen waarvan de gegevensomvang en het risicoprofiel goed begrepen en compatibel zijn. Bovendien biedt Redis clustering, hetzij via horizontale clustering die asynchrone gegevensreplicatie tussen servers mogelijk maakt, hetzij een primaire / replicaserverconfiguratie. Horizontale clustering is het meest geschikt wanneer u Redis als cache gebruikt, de opslag maximaliseert en vertrouwt op warme herstarts om knooppuntstoringen te verminderen. In gevallen van databasegebruik stelt een primaire / replica-architectuur het Redis-cluster in staat om aan de vraag te voldoen aan dynamische schaalbaarheid, terwijl ononderbroken beschikbaarheid wordt geboden. Parallelle verwerking over replicaservers verhoogt ook de leesprestaties.

Belangrijk is dat Redis ontwikkelaars in staat stelt om gegevens te gebruiken met minimale code door gebruik te maken van native gegevensstructuren en de meer dan 100 beschikbare open source-clients. Redis ondersteunt Java, C, C ++, C #, Python, PHP, Ruby, JavaScript, Node.js, Go, R en meer, waardoor ontwikkelaars in hun voorkeurstaal kunnen coderen.

Redis is ook 100 procent open source en garandeert totale vrijheid van leverancier of technische lock-in, ondersteuning voor open data-indelingen en de steun van een robuuste en actieve community.

Gebruik cases en functies van Redis

Intelligente caching, het verlopen van gegevens en “uitzetbeleid”: In zijn primaire gebruiksscenario als cache stelt Redis applicaties in staat om snel te reageren op gebruikers door veelgebruikte gegevens in het geheugen te bewaren. Redis-ontwikkelaars kunnen datastructuren markeren met een Time To Live (TTL), waarmee ze het aantal seconden bepalen totdat die gegevens worden verwijderd. Ontwikkelaars kunnen ook intelligent “uitzettingsbeleid” configureren om gegevens met de kortste TTL eerder dan andere gegevens te verwijderen. Als alternatief kan verwijdering worden gebaseerd op de minst recent gebruikte (LRU) of minst vaak gebruikte (LFU) statistieken. Deze intelligente cachepatronen maken geoptimaliseerde gebruikerservaringen en productiviteit mogelijk.

Streams en streamverwerking: Redis 5.0 introduceerde streams en streamverwerking, geïnspireerd door Apache Kafka. Net als Kafka-onderwerpen, kan Redis consumentengroepen toewijzen om werkstromen te verwerken. Als een consument de voltooiing van het werk niet erkent, nemen andere consumenten het werk over. Dit Kafka-achtige gedrag in het geheugen ondersteunt responsieve ervaringen met niet-blokkerende gebruikersinterfaces.

Publicatie- en abonnementsberichten (Pub / Sub): Met pub / sub-berichten worden berichten doorgegeven aan alle abonnees die momenteel luisteren. Dit maakt bewustzijn van de belasting over infrastructuur en applicaties mogelijk, en ondersteunt gebruiksscenario’s zoals meldingen en gaming-scoreborden.

Lua-scripts: Redis kan scripts uitvoeren in de Lua-taal. Ontwikkelaars kunnen aangepaste scripts maken om hun eigen functies aan Redis toe te voegen.

Geolocatiefuncties: Redis biedt geolocatiegegevensstructuren en -opdrachten – vooral handig voor toepassingen zoals apps voor het delen van ritten waarvoor locatiegegevens nodig zijn. Deze gegevens slaan reeksen lengte- en breedtegraadcoördinaten op. Met Redis kunnen query’s de afstand tussen objecten en andere nuttige oplossingen bepalen.

Hyperloglog: Redis bevat de Hyperloglog-datastructuur, die geschatte tellingen van setgroottes mogelijk maakt die veel minder geheugen gebruiken versus het opslaan van complete set-tellingen.

Langste gemeenschappelijke substring (LCS): Redis 6.0 heeft het LCS-algoritme toegevoegd, waardoor snelle vergelijkingen tussen twee strings mogelijk zijn om de langste gemeenschappelijke subtekenreeks te extraheren. Als u bijvoorbeeld ‘ananas’ en ‘rode appel’ vergelijkt, levert dat ‘appel’ op.

Herstelt uitdagingen en ongepast gebruik

Redis configureren als een primaire database: Het is zeker mogelijk om Redis te implementeren als een effectieve primaire database, maar dit vereist zorgvuldig en nogal uitdagend configuratiewerk. Om als database te functioneren, moet Redis zijn geconfigureerd voor hoge beschikbaarheid en kan het niet leeg opnieuw opstarten. Wees vooral voorzichtig bij het wijzigen van deze en andere standaardopties die bedoeld zijn voor gebruik in cache.

Met behulp van de KEYS-opdracht: Omdat de opdracht Redis KEYS van invloed is op alle sleutels in een database, kunnen ontwikkelaars moeite hebben om deze te gebruiken zonder de prestaties te beïnvloeden. Beste advies: vermijd gewoon het gebruik van de KEYS-opdracht.

REST-verbindingen gebruiken: Ontwikkelaars die bekend zijn met andere databases voltooien verzoeken vaak door verbindingen te openen en te sluiten om elke opdracht in een REST-stijl af te handelen. Redis is anders ontworpen: gebruik continue open verbindingen, anders zullen de prestaties achteruitgaan.

Statische activa in cache plaatsen: Redis is niet geschikt voor het cachen van statische items, zoals afbeeldingen of video’s. Lever die middelen in plaats daarvan via een webserver of Content Delivery Network (CDN).

Cruciale gegevens opslaan: Redis is geen ideale canonieke gegevensopslag in scenario’s waarin de gegevensgrootte de geheugencapaciteit van het cluster overschrijdt. Een database met een hoge replicatiefactor naar meerdere datacenters, zoals open source Apache Cassandra, is een betere keuze voor cruciale gegevens.

Ten slotte is Redis ideaal voor gebruikssituaties met een lage latentie. Anders kunnen databases die op schijf kunnen worden opgeslagen (nogmaals, zoals Cassandra) betere opties zijn.

Gevolgtrekking

Redis is een bijzonder indrukwekkende en terecht populaire open source datatechnologie die zich leent voor vele, vele gebruikssituaties. Dat gezegd hebbende, betekent het maximale uit Redis halen, ervoor zorgen dat elke implementatie overeenkomt met wat de datastore-technologie kan bieden en dat Redis correct is geconfigureerd om te doen waar het het beste in kan.