- Redis speichert Daten im Speicher mit erweiterten Strukturen und atomaren Operationen.
- Unterstützt Persistenz (RDB/AOF), asynchrone Replikation und Tools wie Pub/Sub und Lua.
- Ideal für Caching, Sitzungen, Messaging und Rankings mit sehr geringen Latenzen.
Wenn Ihre Anwendung schon einmal wie eine Rakete laufen musste, haben Sie wahrscheinlich schon von Redis gehört. Diese Technologie funktioniert als In-Memory-Datensystem, das Folgendes bietet: sehr geringe Latenzen und nahezu sofortige Reaktionen, ideal, wenn Geschwindigkeit die absolute Priorität hat.
Redis ist mehr als nur ein Cache: Es handelt sich um eine Key-Value -NoSQL-Datenbank mit vielfältigen Datenstrukturen und integrierten Tools. Ursprünglich 2009 veröffentlicht und in C geschrieben, leitet sich der Name von „ Remote Dictionary Server“ ab . Heute verfügt Redis über ein sehr aktives Ökosystem, Clients für nahezu jede Programmiersprache sowie robuste Persistenz- und Replikationsfunktionen.
Was ist Redis und wofür wird es verwendet?
Redis ist ein In-Memory-Speichersystem, das mit Schlüssel-Wert-Paaren und komplexen Datenstrukturen arbeitet. Durch die Nutzung des Arbeitsspeichers (RAM) werden die typischen Engpässe des Festplattenzugriffs reduziert , wodurch es sich ideal für Anwendungsfälle eignet, die höchste Geschwindigkeit erfordern: Caches für rechenintensive Abfragen, Benutzersitzungen, Echtzeit-Messaging, Online-Spiele, Dashboards mit Streaming-Daten und vieles mehr.
In vielen Projekten dient es als Cache-Schicht vor herkömmlichen Datenbanken und speichert wiederkehrende Ergebnisse, um ständige Neuberechnungen oder erneute Abfragen zu vermeiden. Es wird auch selbst als Datenbank eingesetzt, wenn strikte Datenbeständigkeit nicht erforderlich ist oder die Persistenz so konfiguriert ist, dass die Daten auf der Festplatte gespeichert werden.
Dank seiner Client-Server-Architektur, der Netzwerkschnittstelle und des schlanken Designs lässt es sich einfach bereitstellen und von mehreren Hosts aus verbinden. Darüber hinaus bietet es eine asynchrone Master-Replikat-Verbindung (der Master arbeitet während der Replikation weiter), was die Skalierung von Lesevorgängen und die Verfügbarkeit verbessert.
Hauptmerkmale
Die größte Stärke von Redis liegt darin, dass alles im Hauptspeicher liegt. Dadurch werden Festplattenzugriffe im kritischen Pfad vermieden und extrem schnelle Lese-/Schreibvorgänge ermöglicht . Darüber hinaus kann jede Zeichenkette bis zu 512 MB groß sein, wobei Binärdaten unterstützt werden. Auch Datenstrukturen wie Listen, Mengen, sortierte Mengen, Hashes, HyperLogLog, Bitmaps und Streams werden unterstützt.
Redis implementiert serverseitige, atomare Operationen auf diesen Strukturen. Dadurch können Sie Vereinigungen, Schnittmengen oder Differenzen von Mengen berechnen, Teilzeichenketten ändern oder ganze Zahlen und Gleitkommazahlen ohne Race Conditions inkrementieren und dekrementieren.
Es beinhaltet Werkzeuge, die die Entwicklung beschleunigen und gängige Muster vereinfachen: Pub/Sub zum Veröffentlichen und Abonnieren von Kanälen (ideal für Echtzeit-Messaging und Benachrichtigungen), Schlüssel mit TTL für automatisches Ablaufen, atomare Zähler für Metriken und Parallelitätskontrolle sowie eingebettete Unterstützung für Lua-Skripte für serverseitige Logik ab Version 2.6.
Ein weiterer großer Vorteil ist die Kompatibilität mit Modulen. Redis-Module erweitern die Funktionalitäten, beispielsweise für JSON-Dokumente , Zeitreihen und Suchvorgänge , und machen es so zu einem vielseitigen System, das weit über einfache Schlüssel-Wert-Paare hinausgeht.

Geschichte, Lizenzen und Entwicklung
Redis wurde 2009 von Salvatore Sanfilippo entwickelt, um die Latenz des Produkts LLOGG zu verbessern. Der Erfolg stellte sich sofort ein, und 2010 stellte VMware Sanfilippo als Projektleiter in Vollzeit ein ; kurz darauf stieß Pieter Noordhuis zum Team. Zwischen 2013 und 2015 wurde Redis von Pivotal und später von Redis Labs gefördert.
Seit Version 2.6 verfügt der Server über einen integrierten Lua-Interpreter, der die atomare Ausführung von Skripten direkt in Redis ermöglicht und die Client-Server-Latenz minimiert. Die Lizenzierung erfolgt unter einem dualen RSALv2- und SSPLv1- Modell.
Datenmodell und Operationen
Redis verwendet ein globales Wörterbuch, das Schlüsseln Werte zuordnet. Anders als bei einfacheren Schlüssel-Wert-Lösungen können Werte unterschiedliche Datentypen haben. Der Datentyp bestimmt die verfügbaren Befehle und die atomaren Operationen, die auf diesen Daten ausgeführt werden können.
Der Redis-String-Typ ist „binärsicher“: Er kann Text, Ganzzahlen, Gleitkommazahlen oder rohe Binärdaten wie JPEG-Bilder oder serialisierte Objekte enthalten. Sie können Teile des Strings bearbeiten, bestimmte Bits ändern oder ihn als Zähler mit Inkrementen/Dekrementen verwenden.
Listen ermöglichen die Verwaltung von Warteschlangen oder Stapeln, Mengen und geordnete Mengen dienen der Mitgliedschaft und Rangfolge nach Punktzahl, und Hashes speichern Feld-Wert-Paare, die sich hervorragend zur Gruppierung von Objektattributen eignen . HyperLogLog wird für ungefähre Kardinalitätszähler mit sehr geringem Speicherbedarf verwendet, und Streams ermöglichen Ereignisflüsse mit gruppierter Verarbeitung.
Redis bietet darüber hinaus Transaktionen (MULTI/EXEC), mit denen Sie mehrere Operationen gruppieren und sequenziell und atomar ausführen können . In Kombination mit Lua lässt sich komplexe serverseitige Logik zuverlässig kapseln.
Persistenz: Snapshots und AOF
Redis kann rein im Arbeitsspeicher arbeiten, unterstützt aber auch die Speicherung auf der Festplatte, um Leistung und Datensicherheit optimal auszubalancieren. Mit Snapshots (RDB) erstellt es regelmäßig Momentaufnahmen des Datensatzes und speichert diese asynchron, wodurch die Antwortzeit nur minimal beeinträchtigt wird.
Die andere Option ist AOF (Journaling), das jeden Schreibvorgang in eine Datei protokolliert. Dieser Modus bietet eine feinere, besser konfigurierbare Datenbeständigkeit: `appendfsync=always` erzwingt die Synchronisierung bei jeder Änderung (maximale Sicherheit, geringere Leistung), und `appendfsync=everysec` synchronisiert jede Sekunde (optimaler Kompromiss).
Bei Bedarf können Sie auch manuell speichern, um sofort einen Snapshot zu erstellen. Im Falle eines Totalausfalls des Systems gehen in der Regel höchstens geringe Datenmengen verloren, abhängig von der gewählten Synchronisierungsrichtlinie.
In älteren Versionen war die Verwendung von „virtuellem Speicher“ ab Version 2.4 zulässig, diese Vorgehensweise ist jedoch überholt. Heute wird empfohlen, zwischen RDB, AOF oder einer Kombination aus beidem zu wählen und die Konfiguration entsprechend der Kritikalität der Daten und der gewünschten Leistung anzupassen.
Replikation und Hochverfügbarkeit
Redis implementiert asynchrone Master-Replikat-Replikation. Das bedeutet, dass Schreibvorgänge auf dem Master ausgeführt und die Replikate synchronisiert werden, ohne den Master zu blockieren . So bleibt der Dienst während der Synchronisierung betriebsbereit . Ein Master kann mehrere Replikate haben, und ein Replikat kann wiederum als Master eines anderen Replikats fungieren, wodurch eine Baumtopologie entsteht.
Replikation ist sehr nützlich, um Lesevorgänge zu skalieren und Redundanz zu gewährleisten. Einige Konfigurationen erlauben das Schreiben auf Replikate, was jedoch zu Inkonsistenzen führen kann, wenn es nicht ordnungsgemäß gesteuert wird. Standardmäßig werden Replikate daher in der Regel schreibgeschützt verwendet, um die Datenkonsistenz zu wahren.
Durch die Platzierung von Replikaten in der Nähe der Nutzer wird die wahrgenommene Latenz reduziert. Mithilfe von Orchestrierungs- und Überwachungs-/Cluster-Tools lassen sich hohe Verfügbarkeit und automatisches Failover erreichen, um Ausfallzeiten im Falle eines Master-Ausfalls zu minimieren.
Client/Server-Architektur und Ökosystem
Der Redis-Server stellt ein einfaches Protokoll bereit, mit dem sich Clients verschiedener Programmiersprachen verbinden können. Sie können die offizielle Befehlszeilenschnittstelle (redis-cli) für Tests, Administration oder schnelle Skripterstellung nutzen oder eine Bibliothek in Ihre Anwendung integrieren.
Es gibt Clients für ActionScript, C, C++, C#, Java, Go, Python, PHP, Ruby, Scala, JavaScript (einschließlich serverseitigem Node.js), R, Erlang, Haskell, Lua, Objective-C, Perl, Common Lisp, Smalltalk, Tcl, Io, haXe, Pure Data und weitere Sprachen. Diese breite Unterstützung ermöglicht eine einfache Integration in nahezu jede Technologieumgebung.
Reale Anwendungsfälle und Praxisbeispiele
Ein typisches Beispiel ist eine Online-Immobilienagentur: Die Angaben zu Preis, Ausstattung und Zimmeranzahl einer Immobilie ändern sich kaum. Ohne Caching sind bei jedem Besuch wiederholte Abfragen und Berechnungen erforderlich. Mit Redis wird das Objekt nach dem ersten Laden mit einem Schlüssel (z. B. property_4056 ) und einer Gültigkeitsdauer (TTL) von beispielsweise einem Monat gespeichert. Bei nachfolgenden Besuchen werden die Daten aus dem Arbeitsspeicher gelesen, ein Datenbankzugriff wird vermieden.
Es ist außerdem üblich, umfangreiche Berichtsergebnisse zwischenzuspeichern , authentifizierte Sitzungen zu verwalten, Live-Rankings mit sortierten Datensätzen zu erstellen oder Pub/Sub als leichtgewichtigen Messaging-Kanal zwischen Diensten zu verwenden.
In einem Test mit einer Fehlertabelle mit 16.000 Zeilen wurde die Zeit für folgende Vorgänge gemessen: 1) Datenbankabfrage, 2) Speichern der Daten in Redis und 3) Lesen aus Redis. Das Ergebnis war beeindruckend: Der Abruf aus Redis war 26-mal schneller als aus der Datenbank. Solche Vergleiche verdeutlichen oft die tatsächlichen Auswirkungen auf die Benutzerfreundlichkeit und die Infrastrukturkosten.
Redis vs. Memcached
Beide Technologien dienen dem In-Memory-Caching, weisen aber bemerkenswerte Unterschiede auf. Redis bietet vielfältige Datentypen (Listen, Mengen, Hashes usw.), optionale Datenspeicherung auf der Festplatte , Pub/Sub, Lua-Skripte, Transaktionen und Module zur Erweiterung seiner Funktionalität. Memcached hingegen konzentriert sich auf ein einfaches In-Memory-Key-Value-Modell ohne Persistenz.
In puncto reiner Performance sind beide sehr schnell; Redis spielt seine Stärken besonders bei komplexen Datenstrukturen und atomaren serverseitigen Operationen aus. Für einen sehr einfachen und ressourcenschonenden Cache reicht Memcached möglicherweise aus , doch wenn mehr Funktionalität und Flexibilität gefragt sind, ist Redis in der Regel die bessere Wahl.
Verwaltete vs. selbstverwaltete Dienste (Redis und Valkey)
Sie können Redis oder Valkey selbst bereitstellen oder einen Managed Cloud Service nutzen. Die Selbstverwaltung bietet Ihnen die volle Kontrolle, Skalierbarkeit und Wartung (Hinzufügen von Knoten, Updates, Sicherheit, Backups, Überwachung) liegen jedoch in Ihrer Verantwortung.
Ein Managed Service reduziert den Betriebsaufwand: einfachere Skalierung, hohe Verfügbarkeit und problemlose Updates. Dies führt in der Regel zu niedrigeren Gesamtbetriebskosten und ermöglicht es dem Team, sich stärker auf Datenmodellierung und Geschäftsfunktionen anstatt auf Plattformaufgaben zu konzentrieren.
Integrierte Tools: Pub/Sub, TTL, Zähler und Lua
Mit Pub/Sub können Sie Nachrichten in Kanälen verbreiten, die dann von mehreren Abonnenten sofort empfangen werden. Das ist ideal für Chats, Benachrichtigungen und die Koordination zwischen Microservices. Es ist ein einfaches und effektives Muster.
Mithilfe von Time-to-Live (TTL)-Schlüsseln können Sie temporäre Daten wie Sitzungen, Token, abgelaufene Abfrageergebnisse usw. „selbstbereinigen“. Dadurch wird verhindert, dass die Datenbank mit veralteten Informationen gefüllt wird , und die Ablauflogik wird vereinfacht.
Atomare Zähler sind hervorragend geeignet für Metriken, Ratenbegrenzung, Warteschlangen oder in allen Fällen, in denen Sie in Umgebungen mit gleichzeitigen Operationen sicher addieren/subtrahieren müssen.
Schließlich ermöglicht die integrierte Lua-Unterstützung die atomare Ausführung von Skripten nahe an den Daten. Dies reduziert den Netzwerkverkehr und erlaubt die Durchführung komplexer Operationen in einem einzigen Schritt , was Konsistenz und Leistung verbessert.
Häufig gestellte Fragen
Wozu wird Redis verwendet? Zur Beschleunigung von Anwendungen mit In-Memory-Caches, Sessions, Echtzeit-Rankings, leichtgewichtigen Messaging-Diensten mit Pub/Sub und als NoSQL-Datenbank, wenn Latenz kritisch ist oder Persistenz konfiguriert ist.
Warum ist Redis so schnell? Weil die Daten im RAM liegen, wodurch Festplattenzugriffe auf dem kritischen Pfad entfallen und atomare serverseitige Operationen ermöglicht werden; außerdem ist sein Protokoll leichtgewichtig und effizient.
Kann es als Datenbank verwendet werden? Ja. Es handelt sich um eine In-Memory-NoSQL-Datenbank mit Persistenzoptionen (RDB und AOF). Je nach Konfiguration können Sie die Priorität auf Leistung oder Datensicherheit legen oder beides kombinieren.
Sprachenunterstützung
Für nahezu alle Programmiersprachen gibt es ausgereifte Clients: Python (redis-py), Java (Jedis), Node.js (ioredis), C#/.NET (StackExchange.Redis), PHP (phpredis), Go (go-redis), Ruby (redis-rb) und viele mehr. Diese Vielfalt gewährleistet eine nahtlose Integration in Ihre bestehende IT-Umgebung.
Redis hat sich als „Wildcard“ für die Lösung von Performance- und Echtzeitproblemen in den meisten modernen Architekturen etabliert: Es kombiniert blitzschnelle Leistung, reichhaltige Datenstrukturen, konfigurierbare Persistenz, Replikation und eine Reihe praktischer Tools, die, wenn sie richtig eingesetzt werden, einen Unterschied im Benutzererlebnis ausmachen.