In diesem Blogbeitrag gehe ich auf die In-Memory Datenbank Redis ein. Ziel des Artikels ist, einen Überblick über Redis zu geben und technisches Verständnis zu schaffen.
Hier ein kurzer Überblick über die behandelten Themen:
Redis ist eine In-Memory Datenbank, die weit über die klassische Key-Value Speicherung hinausgeht.
Es steht für Remote Dictionary Server und hält seine Daten im Arbeitsspeicher (RAM) statt auf der Festplatte – dadurch ist es extrem schnell. Redis zählt zur Kategorie der NoSQL-Datenbanken.
Persistenz ist optional und kann entweder periodisch über Snapshots mittels RDB (Redis Database Backup) oder über ein Append Only File (AOF) realisiert werden. Ausserdem ist es möglich, beide Mechanismen (RDB sowie AOF) zu kombinieren.
Es ist in der Programmiersprache C geschrieben (-> sehr ressourcenschonend) und bietet Clients für viele aktuelle Programmiersprachen (Python, Node.js, Go, Java, C# etc.) an.
Zu den typischen Einsatzgebieten von Redis zählen:
Die folgende Tabelle zeigt die zeitliche Entwicklung von der Entstehung, bis zur Übernahme und Lizenzwechsel durch Redis Inc. sowie der Entstehung des Forks Valkey auf:
| Jahr | Ereignis | Lizenz |
| 2009 | Redis wird von Salvatore Sanfilippo („antirez“) in Italien entwickelt. | BSD-3-Clause |
| 2015 | Redis Inc. übernimmt zentrale Entwicklung. Redis wird populär. | BSD-3-Clause |
| März 2024 | Der Community-Fork „Valkey“ entsteht unter der Linux Foundation. Dies wurde u.a. initiiert von AWS, Google, Oracle, Snap, VMware. Ziel: Echte Open-Source-Fortsetzung von Redis (bzw. nun Valkey) unter der BSD-3-Clause. | BSD-3-Clause |
| April 2024 | Redis Inc. kündigt neue Lizenzpolitik an: Redis 7.4 und 8.0 erscheinen unter RSALv2 / SSPLv1, später zusätzlich unter AGPLv3. AGPLv3 ist zwar open source, jedoch mit Einschränkungen. | RSALv2 / SSPLv1 / AGPLv3 (Tri-Lizenz) |
Redis bietet eine Menge verschiedener Datentypen an. Nachfolgend werden die wichtigsten Datentypen von Redis mit ein paar konkreten Use Cases aufgezeigt:
| Datentyp | Beschreibung | Use Cases |
| Strings | Einfachster und häufigster Datentyp in Redis | Cache für einfache Werte (z. B. JSON, Tokens, Counter) |
| Hashes | Wie JSON-Objekt oder Dictionary, Key-Value Paare innerhalb eines Keys | Objekte, User-Profile, Settings |
| Lists | Verkettete Liste von Strings | Queues, Stacks (FIFO/LIFO), Task- oder Message-Buffer |
| Sets | Unsortierte Mengen einzigartiger Werte | Tagging-Systeme, Membership-Prüfungen |
| Sorted Sets | Wie Sets, wobei jedes Element einen Score hat | Leaderboards, Priority Queues, Zeitbasierte Scores |
| Streams | Ideal für Event Streams und Message Queues | Event Sourcing, Logverarbeitung, Messaging zwischen Services |
| Bitmaps | Erlauben effizientes Speichern und Abfragen von Flags / Booleans pro Bit | Nutzeraktivitäten, Feature-Flags, Zähler mit minimalem Speicherverbrauch |
| HyperLogLog | Platzsparender (~12 KB), probabilistischer Datentyp zur Zählung einzigartiger Elemente | Unique Besucher zählen, Kardinalitätsschätzungen |
| Geospatial | Speichert geografische Koordinaten und erlaubt Distanz- und Radiusabfragen | Standortsuche (z. B.: „Shops in der Nähe“), Entfernungsmessung |
Ausserdem gibt es zahlreiche Redis-Module, welche entweder über die Redis-Distribution Redis Stack genutzt oder alternativ manuell geladen werden können.
Hier die gängigsten Redis-Module und deren Nutzen:
| Redis-Modul | Nutzen |
| RedisJSON | Speicherung & Abfrage von JSON-Dokumenten |
| RediSearch | Volltextsuche, Filter, Aggregation |
| RedisGraph | Graphdatenbank (ähnlich wie Neo4j) |
| RedisTimeSeries | Zeitreihen-Speicherung & -Abfragen |
| RedisBloom | Probabilistische Datenstrukturen (z. B. Bloom-, Cuckoo-Filter) |
| RedisAI | Machine Learning Modelle direkt in Redis ausführen |
| RedisGears | Event-Processing & serverseitige Logik mit Python/JavaScript |
Redis kann auf vielfältige Weise eingesetzt werden. Je nach Anforderungen an das System eignet sich eine der folgenden Hauptarchitekturen:
In den nachfolgenden Kapiteln wird auf die Redis-Hauptarchitekturen näher eingegangen.
Redis als Single-Node ist die einfachste Art, Redis zu betreiben.
Hierbei ist mit Node eine einzelne Redis-Instanz gemeint.
Wichtigste Eigenschaften von Redis Single-Node:
-> Einfach, aber kein Schutz vor Ausfall.

Redis Single-Node Architektur
Redis Replication wird manchmal auch Redis Primary-Replica Replication genannt (ehemals Redis Master-Slave Replication).
Wichtigste Eigenschaften von Redis Replication:
-> Bessere Performance + Datenredundanz, aber kein automatisches Failover.

Redis Replication Architektur
Wichtigste Eigenschaften von Redis Replication mit Sentinel:
-> Automatisches Failover + Monitoring, hohe Verfügbarkeit.

Redis Replication mit Sentinel Architektur
Wichtigste Eigenschaften von Redis Cluster:
-> Hohe Skalierbarkeit + Ausfallsicherheit.

Redis Cluster Architektur
Ebenfalls besteht die Möglichkeit, Redis über einen Cloud-Anbieter zu betreiben. Dabei muss man sich selber nicht mehr um Aspekte wie Hochverfügbarkeit, Backups, Skalierung, Sicherheit, Updates und Monitoring kümmern.
Hier eine Übersicht bekannter Anbieter und dem entsprechenden Produkt:
| Anbieter | Produkt |
| AWS | Amazon ElastiCache for Redis |
| Azure | Azure Cache for Redis |
| Google Cloud | Memorystore for Redis |
| Upstash | Upstash Redis |
| Redis Inc. | Redis Cloud / Redis Enterprise Cloud |
Bemerkung: Hinter den Kulissen eines Cloud-gemanagedem Redis läuft eine Form der oben genannten Architekturen.
Je nach Architektur ändern sich die CAP-Eigenschaften (Consistency, Availability und Partition Tolerance).
Das CAP-Theorem besagt, dass ein verteiltes System bei Netzwerkausfällen nur zwei der drei CAP-Eigenschaften gleichzeitig garantieren kann.
Im Single-Node-Betrieb handelt es sich nicht um ein verteiltes System. Da es keine Replicas gibt und Cluster Partitionen nicht möglich sind, müssen in diesem Betrieb keine Partitionen toleriert werden. Somit wird die Eigenschaft P nicht erfüllt, jedoch A und C.
Redis Replication und Redis Replication mit Sentinel erfüllen die Eigenschaften A und P. Gibt es bspw. einen Netzwerkunterbruch zwischen dem Primary und seinen Replicas, akzeptiert der Primary trotzdem Schreibbefehle vom Client. Sollten jedoch die Daten direkt von den Replicas gelesen werden, kann die Konsistenz der Daten, aufgrund der asynchronen Replikation, nicht gewährleistet werden (-> eventual consistency).
Grundsätzlich ist Redis Cluster AP. Bei einem Quorum-Verlust zeigt es jedoch CP-Verhalten, da es Schreiboperationen stoppt, um die Konsistenz zu wahren.
Die folgende Abbildung zeigt auf, welche Redis-Architekturen welche Eigenschaften des CAP-Theorems erfüllen:

CAP-Eigenschaften der Redis-Architekturen
Da Redis eine In-Memory Datenbank ist, muss man im Fall eines Ausfalls seiner Redis-Instanz mit einem Datenverlust rechnen. Möchte man seine Daten dennoch persistieren, so bietet Redis mehrere Persistenz-Mechanismen an:
| Persistenz-Mechanismus | Beschreibung | Fazit |
| RDB (Redis Database Backup) | Redis erstellt periodisch Snapshots des gesamten Datenbestands und speichert sie anschliessend als komprimierte Binärdatei (z. B. als dump.rdb). | Ein Vorteil ist das schnelle Wiederherstellen des Datenbestands bei einem Startvorgang. Ein Nachteil ist, dass Datenänderungen seit dem letzten Snapshot bei einem Absturz verloren gehen.
RDB -> schnelle Wiederherstellung |
| AOF (Append Only File) | Redis hängt jede Write-Operation, die es ausführt, an das Ende eines Logfiles (appendonly.aof). Bei einem allfälligen Neustart von Redis kann das Logfile „abgespielt“ und dadurch der exakte Zustand wiederhergestellt werden. | Die Datensicherheit ist höher verglichen mit RDB. Jedoch ist AOF langsamer als RDB aufgrund von mehr I/O-Zugriffe.
AOF -> hohe Datensicherheit |
| Hybrid (RDB + AOF) | Kombination für Balance zwischen Speed und Sicherheit | Falls eine schnelle Wiederherstellung des Datenbestands sowie auch eine hohe Datensicherheit gefordert sind, wird der hybride Ansatz empfohlen. |
Selbstverständlich kann Redis auch ohne Persistenz-Mechanismen betrieben werden. Dies ist standardmässig der Fall, wenn man Redis als Cache nutzt (bspw. vor einer Datenbank).
Redis läuft standardmäßig auf Port 6379. Man sprichst Redis über ein einfaches Textprotokoll (RESP=Redis Serialization Protocol) oder eine Client-Library an.
Zugriff über CLI:
redis-cli 127.0.0.1:6379> SET user:1 "Anna" OK 127.0.0.1:6379> GET user:1 "Anna"
Ausserdem bietet Redis Client-Bibliotheken für praktisch jede Sprache an:
| Programmiersprache | Redis Client-Bibliothek |
| C# | StackExchange.Redis |
| Go | go-redis |
| Java | Jedis, Lettuce |
| JavaScript | ioredis |
| PHP | predis, phpredis |
| Python | redis-py |
Das folgende Code-Beispiel in Python illustriert, wie einfach es ist, Redis als Cache zu nutzen:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# Daten cachen
r.set("user:42:name", "Anna", ex=60) # ex = Ablaufzeit in Sekunden
# Daten abrufen
print(r.get("user:42:name"))
Redis kann auf folgende Arten eingesetzt werden:
| Deployment | Beschreibung | Code-Befehl |
| Lokal | Direkt auf dem Rechner oder Server installieren |
apt install redis-server |
| Docker | Schnell testbar oder für DevOps-Workflows |
docker run -p 6379:6379 redis |
| Redis-Stack | Erweiterte Distribution von Redis: Besteht aus Redis plus offiziellen Redis Inc. Modulen (JSON, Search, Graph, TimeSeries, Bloom) |
docker run -p 6379:6379 -p 8001:8001 redis/redis-stack |
| Cloud-Service | Managed Redis von AWS (ElastiCache), Azure Cache for Redis, Google Memorystore, Upstash etc. |
Nachfolgend werden die Vor- und Nachteile von Redis bezogen auf die jeweilige Kategorie aufgezeigt:
| Kategorie | Vorteile | Nachteile |
| Performance | Sehr schnell, da In-Memory (Zugriffszeiten im Mikrosekundenbereich) | RAM ist teuer |
| Datenstruktur | Vielfältig (Strings, Sets, Hashes etc.) | Keine komplexen Queries möglich, keine SQL-ähnliche Abfragesprache |
| Persistenz | Optional mittels RDB / AOF | Keine ACID-Transaktionen möglich |
| Skalierung | Möglich mit Cluster, Replication, Sentinel | Komplexe Architektur |
Redis ist ein High-Performance-Baustein, ideal für Szenarien, die eine niedrige Latenz und einen hohen Datendurchsatz erfordern. Es ergänzt relationale Datenbanken perfekt, z. B. als Cache, Queue oder Echtzeit-Analytics-Backend. Redis kann lokal, in Docker Containern oder in der Cloud betrieben und über viele Programmiersprachen genutzt werden. Je nach Anwendungsfall ist es aufgrund der BSD-Lizenz sinnvoller, den Redis-Fork Valkey zu verwenden.
Schreiben Sie einen Kommentar