ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.
WikiRedis

Redis

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

redis_logo.png Redis {en} ist ein „Key-Value Store“ (oder kurz nur KV Store), ins Deutsche übersetzt „Schlüssel-Werte Datenbank“. Hier werden die Daten immer in Form von Schlüssel-Werte-Paaren gespeichert. Man kann sich die Datenbank also so vorstellen, dass darin nur eine Tabelle mit zwei Spalten existiert, nämlich einer Spalte für den Schlüssel und einer für den Wert. Als Werte kennt Redis verschiedene Datentypen.

Im Vergleich zu anderen Datenbanken wie z.B. MySQL, PostgreSQL oder CouchDB ist Redis extrem schnell. Selbst auf halbwegs aktuellen Desktop-Rechner schafft die Datenbank über 100.000 (einfache) Schreibvorgänge und über 80.000 (einfache) Lesevorgänge pro Sekunde. Dies liegt primär auch daran, dass die Datenbank komplett im RAM gehalten wird und nur nach einer bestimmten Zeit oder einer bestimmten Anzahl geänderter Werte auf die Festplatte geschrieben wird. Des Weiteren beherrscht Redis Replikation.

Redis ist als Server-Client-Architektur ausgelegt, d.h. der Redis-Server läuft als Dienst (im Hintergrund) und kann dann per Client abgefragt werden. Weiterhin ist bei der Redis-Installation auch eine Kommandozeilen enthalten, über welche sich der volle Funktionsumfang des Servers nutzen lässt.

Wichtig ist auch noch, dass bei Redis Schlüssel „alles“ sind und Werte „nichts“. D.h. alle Abfragen beziehen sich immer auf einen Schlüssel und liefern einen Wert zurück. Abfrage zu Werten gibt es nicht - Befehle wie z.B. "Zeige mir den Schlüssel zum Wert foobar" gibt es nicht.

Installation

Paketquellen

Redis befindet sich in den Paketquellen von Ubuntu und kann über das Paket

  • redis-server (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install redis-server 

sudo aptitude install redis-server 

installiert werden - allerdings in alten (veralteten) Versionen. Von daher sollte die manuelle Installation bevorzugt werden.

Manuell

Da Redis keine weiteren Abhängigkeiten hat, ist das Selberkompilieren sehr einfach. Zuerst lädt man von der Downloadseite {en} die aktuelle stabile Version herunter und entpackt diese[4], z.B. ins Homeverzeichnis.

Hinweis:

Im folgenden wird davon ausgegangen, dass die Daten nach /home/BENUTZER/redis-2.4.16 entpackt wurden.

Dann wechselt man in das so entstandene Verzeichnis redis-2.4.16 und startet das Kompilieren[5] einfach durch den Befehl[2]:

make 

Nach dem Durchlauf des Compilers ist Redis einsatzbereit, allerdings noch nicht systemweit installiert. Zum Testen oder lokalen Einsatz ist dies aber auch nicht notwendig.

Möchte man Redis systemweit installieren und die passenden Startskripte zum automatischen Start von Redis beim Booten anlegen, sind noch die folgenden Befehle auszuführen:

sudo make install
cd utils
sudo ./install_server.sh 

Benchmark aufrufen

Bei der Installation wird direkt auch ein Benchmark-Programm mit installiert. Bei systemweiter Installation kann man dies über

redis-benchmark 

aufrufen. Bei lokaler Installation muss man ins Verzeichnis src wechseln und dort

./redis-benchmark 

aufrufen.

Benutzung

In der Standardinstallation lauscht Redis auf Port 6379 und allen Adressen. Die Einstellungen können in der Konfiguration geändert werden.

Starten des Server

Ist Redis systemweit installiert läuft der Server nach dem Booten des Rechners automatisch. Ansonsten muss die Datenbank manuell gestartet werden. Dazu wechselt man ins Verzeichnis src und ruft den Befehl

./redis-server 

auf. Der Server läuft standardmässig im Vordergrund - dies kann ebenfalls in der Konfigurationsdatei angepasst werden - und die Logausgabe erfolgt auf stdout, also in der Regel den Terminal. Zu beachten ist bei lokaler Installation noch, dass Redis beim Starten eine Standardkonfiguration verwendet und nicht die Konfigurationsdatei (zu finden im entpackten Verzeichnis) einliest. Ist dies gewünscht, muss der Pfad dorthin explizit angegeben werden:

./redis-server /home/BENUTZER/redis-2.4.16/redis.conf 

Redis Kommandozeile

Redis bringt eine eigene, interaktive Kommandozeile mit, über die der volle Funktionsumfang der Servers verfügbar ist. Bei systemweiter Installation ruft man diese über

redis-cli 

auf. Ansonsten muss man wieder ins Verzeichnis src wechseln und dort

./redis-cli 

aufrufen.

Eine Übersicht über alle Befehle findet man in der Befehlsliste {en} von Redis.

Datentypen

Redis kennt fünf verschiedenen Datentypen:

Redis Datentypen
Datentyp Beschreibung
String Eine beliebige Zeichenfolge (z.B. Text)
List Entspricht einem Array, die Elemente (=Strings) werden über einen positiven, ganzzahligen, null-basierten Index angesprochen (d.h. das erste Element der Liste hat den Index 0, das zweite 1 usw.).
Hash Entspricht einem assoziativem Array, die Elemente bestehen hier wiederum aus Schlüssel-Werten Paaren.
Set Entspricht „List", außerdem dass - eben im Gegensatz zu List - Elemente nur genau einmal vorkommen dürfen.
Sorted Set Entspricht einem Set, nur dass zusätzlich der Index des Elements explizit mit angegeben wird.

Für die Datenbank sind alle Werte einfach nur eine folge von Bytes, d.h. es gibt keine Unterscheidung, ob Textstrings oder binäre Daten gespeichert werden. Eine ausführlichere Erläuterung der Datentype findet man auf der Seite Data Types {en}.

Redis unterstützt übrigens nicht die Verschachtelung von Datentypen. Ein Set kann z.B. nur aus Strings bestehen, nicht aber aus Listen, Hashs etc.

Konfiguration

Redis wird über die zentrale Datei redis.conf konfiguriert. Bei systemweiter Installation liegt diese im Verzeichnis /etc/redis/ und kann mit einem mit einem Editor mit Root-Rechten[3] bearbeitet werden. Bei lokaler Installation liegt diese im Verzeichnis /home/BENUTZER/Redis-2.4.16 und kann mit einem Editor editiert werden. Die Datei ist sehr ausführlich kommentiert.

Eingestellt werden kann hier z.B. auf welcher IP-Adresse und auf welchem Port lauschen soll, Details zu Replikation, Passwortschutz für die Datenbank sowie in welchen Intervallen Redis die Daten auf Festplatte speichern soll.

Weiterhin kann in der Konfigurationsdatei eingestellt werden, dass Redis im sogenannten „Append-only“-Modus betrieben werden soll. Dies bedeutet, dass Redis jede Änderung in der Datenbank direkt in eine separate Datei schreibt (nicht die Datenbank selber). Dies gewährleistet - im Vergleich zum reinen asynchronen Speichern - eine höhere Datensicherheit bei einem Absturz des System, verlangsamt die Datenbank aber auch. „Append only” und asynchrones Schreiben kann kombiniert werden, die Wege schließen sich nicht aus. Nach einem Absturz wird die Datenbank aus der Datei appendonly.log rekonstruiert, so dass in der Regel kein Schreibvorgang verloren sein sollte. Um die Datei appendonly.log nicht zu groß werden zu lassen, sollte in regelmässigen Abständen der Befehl bgwriteaof ausgeführt werden.

Replikation

Redis beherrscht Ein-Weg-Replikation („Master-Slave-Replikation“) mit Bordmitteln. Innerhalb der zuvor beschriebenen Konfigurationsdatei kann im Abschnitt "Replication" festgelegt werden, ob der Redis-Server einem anderen Server, dessen IP-Adressen und Port anzugeben ist, folgen soll. D.h. alle Änderungen dieses Redis-Server („Master”) werden auf den lokalen Redis-Server „Slave“ repliziert.

Deinstallation

Hat man keine systemweite Installation reicht zu Deinstallation, einfach das Verzeichnis inklusive Unterverzeichnissen zu löschen, in das Redis entpackt wurde.

Bei systemweiter Installation ist noch etwas mehr Handarbeit notwendig. Zuerst wechselt man ins Verzeichnis /usr/local/bin und führt dort den Befehl

sudo rm redis-* 

aus[2][6]

Dann wechselt man ins Verzeichnis /etc und löscht dort das komplette Verzeichnis redis, wozu Root-Rechte[6] notwendig sind. Dann wechselt man ins Verzeichnis /etc/init.d und löscht dort, ebenfalls mit Root-Rechten, die Datei redis_6379.

Jetzt müssen noch die Log-Datei und die Datenbank(en) gelöscht werden. Dazu wechselt man ins Verzeichnis /var/log und löscht die Datei redis_6379.log. Dann wechselt man ins Verzeichnis /var/lib und löscht dort rekursiv das Verzeichnis redis. Für alles sind Root-Rechte notwendig.

  • Die Dokumentation {en} von Redis, welche viele Beispiele und Tipps enthält

  • Beispielanwendung {en} - es wird ein kleiner Twitter-Clone mit Redis als Datenbank „entwickelt“. Absolut lesenswert, da hier eine sehr gute Einführungen in die Strukturierungen des Datenbank-Schemas eines Key Value Stores gegeben wird.

  • The Little Redis Book {en} - freies, kurzes "Buch" zu Redis, welches einen sehr gute und kompakte Einführung bietet

  • Live-Version {en} von Redis online ausprobieren

ubuntuusers.local › WikiRedis