Redis 6: En höghastighetsdatabas, cache och meddelandemäklare

Som många kan du tänka på Redis som bara en cache. Denna synvinkel är inaktuell.

I huvudsak är Redis ett NoSQL-minnesdatastrukturlager som kan bestå på disken. Det kan fungera som en databas, en cache och en meddelandemäklare. Redis har inbyggd replikering, Lua-skript, LRU-utvisning, transaktioner och olika nivåer av uthållighet på disken. Det ger hög tillgänglighet via Redis Sentinel och automatisk partitionering med Redis Cluster.

Kärnan i Redis-datamodellen är nyckelvärde, men många olika typer av värden stöds: Strängar, listor, uppsättningar, sorterade uppsättningar, hash, strömmar, hyperlogg och bitmappar. Redis stöder också geospatiala index med radiefrågor och strömmar.

[Också på: Hur Redis repade och kliar - och ändrade databaser för alltid]

För att öppna källkoden Redis lägger Redis Enterprise till funktioner för ytterligare hastighet, tillförlitlighet och flexibilitet, samt en molndatabas som en tjänst. Redis Enterprise skalar linjärt till hundratals miljoner operationer per sekund, har aktiv-aktiv global distribution med lokal latens, erbjuder Redis på Flash för att stödja stora datamängder till infrastrukturkostnad för en diskbaserad databas och ger 99,999% upptid baserat på inbyggd -i hållbarhet och enciffriga sekunders failover.

Vidare utökar Redis Enterprise kärnfunktionen för Redis för att stödja alla datamodelleringsmetoder med moduler som RediSearch, RedisGraph, RedisJSON, RedisTimeSeries och RedisAI, och gör det möjligt att utföra operationer över och mellan moduler och kärnor. Allt detta tillhandahålls samtidigt som databasfördröjningen hålls under ett millisekund.

Core Redis-funktioner och användningsfall

Vad betyder det att Redis nu kan fungera som en databas, cache och meddelandemäklare? Och vilka användningsfall stöder dessa roller?

Cache är den klassiska funktionen hos Redis. I huvudsak sitter Redis framför en diskbaserad databas och sparar frågor och resultat; applikationen kontrollerar Redis-cachen för lagrade resultat först och frågar efter den diskbaserade databasen för resultat som inte finns i cachen. Med tanke på svarsfrekvensen under millisekunder för Redis är detta vanligtvis en stor vinst för applikationsprestanda. Utgångstimrar och LRU (minst nyligen använt) avlägsnande från Redis-cache hjälper till att hålla cachen aktuell och använda minnet effektivt.

Den session butik är en viktig del av moderna webbapplikationer. Det är en bekväm plats att hålla information om användaren och hennes interaktioner med applikationen. I en webb-gårdsarkitektur krävs att värd för sessionsbutiken direkt på webbservern får användaren att "hålla sig" till samma back-end-server för framtida förfrågningar, vilket kan begränsa belastningsbalansen. Genom att använda en diskbaserad databas för sessionsbutiken tas bort behovet av att binda en session till en enda webbserver, men inför en ytterligare källa till latens. Användning av Redis (eller någon annan snabb databas i minnet) som sessionsbutik resulterar ofta i en webbapplikeringsarkitektur med låg latens och hög genomströmning.

Redis kan fungera som meddelandemäklare med tre olika mekanismer, och ett av de viktigaste användningsfallet för Redis som meddelandemäklare är att fungera som lim mellan mikrotjänster. Redis har en låg-overhead-publicerings- / prenumerationsmekanism som underlättar brand-och-glöm-meddelanden, men kan inte fungera när destinationstjänsten inte lyssnar. För en mer ihållande, Kafka-liknande meddelandekö använder Redis strömmar, som är tidsstämplade nyckel-värdepar i en enda nyckel. Redis stöder också dubbelt länkade listor över element som lagras med en enda nyckel, vilka är användbara som en först-in / först-ut (FIFO) -kö. Mikrotjänster kan, och ofta, använda Redis som en cache såväl som att använda den som en meddelandemäklare, även om cacheminnet ska köras i en separat förekomst av Redis från meddelandekön.

Grundläggande replikering gör att Redis kan skala utan att använda klustertekniken i Redis Enterprise-versionen. Redis-replikering använder en leader-follower-modell (även kallad master-slave), som är asynkron som standard. Kunder kan tvinga synkron replikering med ett WAIT-kommando, men även det gör inte Redis konsekvent över repliker.

Redis har Lua-skript på serversidan, vilket gör det möjligt för programmerare att förlänga databasen utan att skriva C-moduler eller klientsideskod. Grundläggande Redis-transaktioner tillåter en klient att deklarera en sekvens av kommandon som en icke-avbrytbar enhet med MULTI- och EXEC-kommandona för att definiera och köra sekvensen. Detta är inte detsamma som relationella transaktioner med återbetalningar.

Redis har olika nivåer av uthållighet på disken som användaren kan välja. RDB (Redis-databasfil) uthållighet tar ögonblicksbilder av databasen med angivna intervall. AOF-uthållighetsloggar (endast tilläggsfil) loggar varje skrivåtgärd som tas emot av servern. Du kan använda både RDB- och AOF-uthållighet för maximal datasäkerhet.

Redis Sentinel, i sig ett distribuerat system, ger Redis hög tillgänglighet. Det övervakar master- och replikinstanser, meddelande om det är något fel och automatisk failover om master slutar fungera. Det fungerar också som en konfigurationsleverantör för klienter.

Redis Cluster ger ett sätt att köra en Redis-installation där data automatiskt delas över flera Redis-noder. Redis Cluster ger också en viss tillgänglighet under partitioner, även om klustret slutar fungera om majoriteten av mästarna blir otillgängliga.

Som jag nämnde tidigare är Redis en nyckelvärdesbutik som stöder strängar, listor, uppsättningar, sorterade uppsättningar, hash, strömmar, HyperLogLogs och bitmaps som värden. Ett av de enklaste och vanligaste användningsfallet är att använda heltal som räknare. Till stöd för detta är INCR (inkrement), DECR (decrement) och andra enskilda operationer atomära och därför säkra i en multiklientmiljö. I Redis, när nycklar manipuleras skapas de automatiskt om de inte redan finns.

> SET-anslutningar 10

OK

> INCR-anslutningar

(heltal) 11

> INCR-anslutningar

(heltal) 12

> DEL-anslutningar

(heltal) 1

> INCR-anslutningar

(heltal) 1

> INCRBY-anslutningar 100

(heltal) 101

> DECR-anslutningar

(heltal) 100

> DECRBY-anslutningar 10

(heltal) 90

De andra typerna av värdestrukturer har också sina egna exempel i Try Redis-självstudien. Självstudien genomgick underhåll när jag själv provade; Jag förväntar mig att det kommer att fixas snart, eftersom Redis Labs har blivit involverad i vad som ursprungligen var ett samhällsarbete.

Det finns ett antal tilläggsmoduler för Redis inklusive (i fallande ordning efter popularitet) en neural nätverksmodul, fulltextsökning, SQL, en JSON-datatyp och en grafdatabas. Licenserna för moduler ställs in av författarna. Några av modulerna som fungerar med Redis är främst moduler för Redis Enterprise.

Redis Enterprise-förbättringar

Med hjälp av en klusterarkitektur med delad ingenting levererar Redis Enterprise oändlig linjär skalning utan att införa några icke-linjära omkostnader i en utskalad arkitektur. Du kan distribuera flera Redis-instanser på en enda klusterod för att dra full nytta av datorns arkitektur med flera kärnor. Redis Enterprise har visat skalning till hundratals miljoner operationer per sekund med fem nio (99,999%) driftstid. Redis Enterprise gör automatisk omdelning och ombalansering samtidigt som den bibehåller låg latens och hög genomströmning för transaktionsbelastningar.

Redis Enterprise erbjuder aktiv-aktiv distribution för globalt distribuerade databaser, vilket möjliggör samtidig läs- och skrivoperationer på samma dataset över flera geografiska platser. För att göra det mer effektivt kan Redis Enterprise använda konfliktfria replikerade datatyper (CRDT) för att upprätthålla enhetlighet och tillgänglighet av data. Riak och Azure Cosmos DB är två andra NoSQL-databaser som stöder CRDT.

Även om det finns omfattande akademisk litteratur om CRDT, erkänner jag att jag inte helt förstår hur eller varför de fungerar. Den korta sammanfattningen av vad de gör är att CRDT kan lösa inkonsekvenser utan ingripande, med hjälp av en matematiskt härledd uppsättning regler. CRDT är värdefulla för data med hög volym som kräver delat tillstånd och kan använda geografiskt spridda servrar för att minska latens för användare.

En av de största skillnaderna mellan Redis och Redis Enterprise är att Redis Enterprise frikopplar datavägen från klusterhantering. Detta förbättrar driften av båda komponenterna. Databanan är baserad på multipel noll-latens, flertrådade proxyservrar som finns på var och en av klusternoderna för att dölja systemets underliggande komplexitet. Klusterhanteraren är en styrande funktion som tillhandahåller funktioner som återhärdning, ombalansering, automatisk failover, rackmedvetenhet, databasadministration, resurshantering, konfiguration av datapersistens och säkerhetskopiering och återställning. Eftersom klusterhanteraren är helt frikopplad från dataväskomponenterna påverkar inte ändringar av dess programvarukomponenter dataväskomponenterna.

Redis on Flash är en Redis Enterprise-funktion som drastiskt kan minska kostnaderna för hårdvara för Redis. Istället för att behöva betala genom näsan för terabyte RAM-minne eller begränsa storleken på dina Redis-datauppsättningar kan du använda Redis på Flash för att placera frekvent åtkomst av heta data i minnet och kallare värden i Flash eller ihållande minne, till exempel Intel Optane DC.

Redis Enterprise-moduler inkluderar RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch och RedisGears. Alla Redis Enterprise-moduler fungerar också med öppen källkod Redis.

Vad är nytt i Redis 6?

Redis 6 är en stor release, både för open source-versionen och Redis Enterprise-kommersiella version. Prestationsnyheterna är användningen av gängade I / O, vilket ger Redis 6 en 2x förbättring av hastigheten jämfört med Redis 5 (vilket inte var slumrigt). Det överförs till Redis Enterprise, som har ytterligare hastighetsförbättringar för kluster som beskrivs ovan.

Tillägget av åtkomstkontrollistor (ACL) ger Redis 6 användarkonceptet och gör det möjligt för utvecklare att skriva säkrare kod. Redis Enterprise 6 bygger på ACL: er för att erbjuda rollbaserad åtkomstkontroll (RBAC), vilket är bekvämare för programmerare och DBA: er.

Stora nya funktioner i Redis 6

Redis 6.0 öppen källkod

  • Åtkomstkontrollistor (ACL)
  • Förbättrad utvisning
  • Trådad I / O
  • RESP3-protokollet

Redis Enterprise 6.0

  • Rollbaserad åtkomstkontroll (RBAC)
  • Utökar aktiv-aktiv
  • HyperLogLog
  • Strömmar

Redis Enterprise 6.0 lägger till stöd för datatypen Streams i aktiv-aktiva databaser. Det möjliggör både hög tillgänglighet och låg latens samtidigt som man läser och skriver till och från en realtidsström i flera datacenter på flera geografiska platser.

RedisGears är ett dynamiskt ramverk som gör det möjligt för utvecklare att skriva och utföra funktioner som implementerar dataflöden i Redis. Det låter användare skriva Python-skript för att köra inuti Redis, och möjliggör ett antal användningsfall inklusive skrivbaksida (Redis fungerar som en front-end till en diskbaserad databas), databehandling i realtid, streaming och händelsehantering, operation som korsar datastrukturer och modeller och AI-drivna transaktioner.

RedisAI är en modell som serverar motor som går inuti Redis. Den kan utföra slutsatser med PyTorch-, TensorFlow- och ONNX-modeller. RedisAI kan köras på processorer och GPU: er och möjliggör användningsfall som upptäckt av bedrägerier, avvikelse och personalisering.

Installerar Redis

Du kan installera Redis genom att ladda ner och kompilera en källtarball eller genom att dra en Docker-bild från Docker Hub. Redis kan sammanställas och användas på Linux, MacOS, OpenBSD, NetBSD och FreeBSD. Källkodsförvaret finns på GitHub. På Windows kan du köra Redis antingen i en Docker-behållare eller under Windows Subsystem for Linux (WSL), vilket kräver Windows 10.

Du kan installera Redis Enterprise på Linux eller i Docker-behållare. Linux-nedladdningarna kommer i form av binära paket (DEB eller RPM beroende på Linux-smak) och Bash-skalskript för klusterinstallation. Skriptet kontrollerar om det krävs fyra kärnor och 15 GB RAM för installation.

Redis Enterprise Cloud

Det snabbaste sättet att installera Redis Enterprise är inte att installera det alls utan snarare att köra det i Redis Enterprise Cloud. När jag själv försökte detta för granskningsändamål fick jag initialt en Redis 5-instans; Jag var tvungen att be om en uppgradering till Redis 6.