%
% redis.tex
% Last Update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel Redis %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Achtung: Dateien muessen mit latin1-Encoding gespeichert werden!
% Attention: Files must be saved using latin1 encoding!
%

\chapter{Das Redis-Paket}

\section{Die Einleitung}

   Der Name `Redis' leitet sich aus dem englischen Begriff `Remote
   Dictionary Server' her, welcher schon darauf hindeutet wozu dieser
   Server haupts"achlich verwendet wird. Die einfache Struktur der
   Datenbank eignet sich weniger f"ur komplexe Datenstrukturen, welche
   "uberwiegend in der origin"aren Datenbank selbst abgebildet werden
   sollten, als um einfache Datenstrukturen auf die extrem schnell
   zugegriffen werden soll. `Redis' ist schneller als relationale
   Datenbanken, wie z.B. MySQL. Bis zu ca. 100.000 Schreibvorg"ange
   und ca. 80.000 Lesevorg"ange pro Sekunde sind dabei auf herk"ommlicher
   Hardware durchaus m"oglich.\\
   `Redis' bietet dar"uber hinaus Persistenz durch automatisiertes
   regelm"a"siges Abspeichern oder per Protokolldatei, wodurch bei
   entsprechender Konfiguration auch eine ACID-konforme Dauerhaftigkeit
   erreichbar ist. (Siehe \url{http://redis.io/topics/persistence})

\section{Die Funktionen}

   Das Redis-Paket besteht aus folgenden Komponenten:

   * Redis in-Memory Datenbank - Programmdateien f"ur den Betrieb des
     Datenbank-Servers.
     (\url{http://redis.io/})

\section{Die Voraussetzungen}

   Dieses Paket ben"otigt keine weiteren Pakete um funktionieren zu
   k"onnen.

\section{Die Installation}

   Das Redis-Paket wird "uber das Setup-Men"u installiert. Wird eine
   "altere Paketversion vorgefunden, so wird diese deinstalliert bevor die
   neuen Programmdateien installiert werden.

\section{Das Men"u im Setup-Programm}

   Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \begin{itemize}
        \item Redis administration
        \begin{itemize}
            \item View documentation: Anzeigen der Dokumentation
            \item Edit configuration: Bearbeiten der Konfiguration
            \item Advanced configuration file handling: Konfigurationen
                  verwalten
            \item Show status: Status der Redis-Servers anzeigen
            \item Start service: Starten des Redis-Servers
            \item Stop service: Stoppen des Redis-Servers
            \item Restart service: Neustarten des Redis-Servers
            \item Start Redis Client: Starten des Redis-Klienten
            \item Check database files: Die Datenbankdateien pr"ufen
            \item View log file: Die Logmeldungen anzeigen
            \item Exit: Untermen"u verlassen
        \end{itemize}
    \end{itemize}

   Die Men"upunkte d"urften selbsterkl"arend sein, da sie keinerlei
   weitere Eingaben erwarten. Aus diesem Grund wird auf deren Funktion
   nicht weiter eingegangen.

\section{Die "Anderung der Konfiguration}

   Die Konfiguration kann "uber den Men"upunkt 'Edit configuration'
   ge"andert werden. Standardm"a"sig wird der Editor aufgerufen, der in
   der Environment-Konfiguration "uber die Variable 'EDITOR' festgelegt
   wurde. Nachdem der Editor beendet wurde wird abgefragt, ob die
   Konfiguration aktiviert werden soll. Wird dies best"atigt, werden "uber
   ein Skript die Anpassungen umgehend wirksam gemacht.

\section{Die Konfigurationsdatei}

   In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind
   folgende Parameter vorhanden; wer sie von Hand editieren will findet
   sie unter /etc/config.d/redis.

\section{Die Parameter}

\begin{description}
%% JED - show this description only in the help file
 % \config{REDIS\_DO\_DEBUG (Optionaler Parameter)}{REDIS\_DO\_DEBUG}{REDISDODEBUG}
 %      Um den Debug-Modus zu aktivieren muss diese Parameter
 %      lediglich auf den Wert `yes' gestellt werden, die Einstellung
 %      `no' deaktiviert den Debug-Modus.
 %
 %      G"ultige Werte: yes, no
 %
 %      Standardeinstellung: \texttt{REDIS\_DO\_DEBUG='no'}

   \config{START\_REDIS}{START\_REDIS}{STARTREDIS}
        F"ur die Aktivierung des Redis-Paketes muss diese Variable
        lediglich auf den Wert `yes' gestellt werden. Die Einstellung
        'no' deaktiviert das Redis-Paket.

        G"ultige Werte: yes, no

        Standardeinstellung: \texttt{START\_REDIS='no'}

    \config{REDIS\_LISTEN\_ADDRESSES (Optionaler Parameter)}{REDIS\_LISTEN\_ADDRESSES}{REDISLISTENADDRESSES}
        "Uber diesen Parameter wird die IP-Adresse bzw. werden die
        IP-Adressen festgelegt, auf welchen der Redis-Server
        Verbindungsanfragen entgegen nehmen soll.

        \hinweis{Standardm"a"sig wird nur die IP-Adresse 127.0.0.1 verwendet.}

        G"ultige Werte: IP-Adresse bzw. Adressen

        Beispiel: \texttt{REDIS\_LISTEN\_ADDRESSES='127.0.0.1 192.168.6.10'}

    \config{REDIS\_DB\_PASS (Optionaler Parameter)}{REDIS\_DB\_PASS}{REDISDBPASS}
        "Uber diesen Parameter kann ein Kennwort f"ur den Zugriff auf
        die Redis-Datenbank festgelegt werden.

        \hinweis{Standardm"a"sig wird kein Kennwort f"ur den Datenbankzugriff gesetzt.}

        G"ultige Werte: Kennwort

        Beispiel: \texttt{REDIS\_DB\_PASS='GeheimesPW'}

    \config{REDIS\_MAX\_CLIENTS (Optionaler Parameter)}{REDIS\_MAX\_CLIENTS}{REDISMAXCLIENTS}
        "Uber diesen Parameter kann die maximale Anzahl gleichzeitiger
        Verbindungen zum Server festgelegt werden. Wird der gesetzte
        Grenzwert erreicht, lehnt der Redis-Server alle neuen
        Verbindungsanfragen mit der Fehlermeldung `max number of clients
        reached' ab.

        G"ultige Werte: Zahl

        Standardeinstellung: \texttt{REDIS\_MAX\_CLIENTS='100'}

    \config{REDIS\_MAX\_MEMORY (Optionaler Parameter)}{REDIS\_MAX\_MEMORY}{REDISMAXMEMORY}
        "Uber diesen Parameter kann der vom Redis-Server maximal nutzbare
        Arbeitsspeicher festgelegt werden. Wenn der gesetzte Grenzwert
        erreicht wird, versucht Redis, gem"a"s den eingestellten Vorgaben,
        Schl"ussel aus der Datenbank zu entfernen.

        G"ultige Werte: Speichergr"o"se (zul"assige Einheiten: k,KB,m,MB,g,GB)

        Standardeinstellung: \texttt{REDIS\_MAX\_MEMORY='256MB'}

    \config{REDIS\_SET\_OVERCOMMIT\_MEMORY (Optionaler Parameter)}{REDIS\_SET\_OVERCOMMIT\_MEMORY}{REDISSETOVERCOMMITMEMORY}
        "Uber diesen Parameter kann die "Uberpr"ufung und das Setzen
        des Systemparameters `vm.overcommit\_memory` deaktiviert
        werden, welcher standardm"a"sig auf den Wert `1' gesetzt wird
        um eventuellen Problemen bei der Speicherung der Datenbank
        vorzubeugen.\\
        Weitergehende Informationen findet man hierzu in der Redis FAQ
        \url{http://redis.io/topics/faq} unter dem Punkt ` Background
        saving is failing with a fork() error under Linux even if I've
        a lot of free RAM'.

        G"ultige Werte: yes, no

        Standardeinstellung: \texttt{REDIS\_SET\_OVERCOMMIT\_MEMORY='yes'}

    \config{REDIS\_THP\_DISABLED (Optionaler Parameter)}{REDIS\_THP\_DISABLED}{REDISTHPDISABLED}
% See https://redis.io/topics/latency for more details
        "Uber diesen Parameter kann der Transparent Hugepage Support (THP)
        abgeschaltet werden, welcher die Redis-Latenz negativ beeinflussen
        und zu Problemen bei der Speichernutzung f"uhren kann.

        G"ultige Werte: yes, no

        Standardeinstellung: \texttt{REDIS\_THP\_DISABLED='yes'}

    \config{REDIS\_HOUSE\_KEEPING\_CRON\_SCHEDULE (Optionaler Parameter)}{REDIS\_HOUSE\_KEEPING\_CRON\_SCHEDULE}{REDISHOUSEKEEPINGCRONSCHEDULE}
        "Uber diesen Parameter wird festgelegt zu welchem Zeitpunkt bzw. in
        welchem Intervall das Redis-House-Keeping, z.B. die Konsolidierung
        der AOF-Datei, durchgef"uhrt werden soll. Die f"unf Teilparameter
        haben dabei folgende Bedeutung:

        1 - Minuten, 2 - Stunden, 3 - Tag des Monats, 4 - Monat, 5 - Wochentag

        D.h. wird dieser Parameter nicht gesetzt, so wird standardm"a"sig
        jeden Tag um 02:05h dieser Prozess angesto"sen. Wer n"aheres
        "uber die verwendete Befehlssyntax erfahren m"ochte, sollte
        "uber eine Internet- Suchmaschine nach 'man' und 'crontab'
        suchen.

        G"ultige Werte: Crontab-spezifischer Parametereintrag

        Standardeinstellung: \texttt{REDIS\_HOUSE\_KEEPING\_CRON\_SCHEDULE=$''$}

    \config{REDIS\_LOG\_COUNT}{REDIS\_LOG\_COUNT}{REDISLOGCOUNT}
        "Uber diesen Parameter wird eingestellt, wie viele Logdateien
        vorgehalten werden sollen. Wird dieser Wert "uberschritten, so
        wird die "alteste Logdatei gel"oscht.

        G"ultige Werte: Zahl

        Standardeinstellung: \texttt{REDIS\_LOG\_COUNT='10'}

    \config{REDIS\_LOG\_INTERVAL}{REDIS\_LOG\_INTERVAL}{REDISLOGINTERVAL}
        "Uber diesen Parameter wird eingestellt, in welchen Intervallen
        die Logdateien archiviert werden sollen. Zur Auswahl stehen die
        Schl"usselw"orter `daily' - t"aglich, `weekly' - w"ochentlich
        und `monthly - monatlich.

        G"ultige Werte: daily, weekly, monthly

        Standardeinstellung: \texttt{REDIS\_LOG\_INTERVAL='weekly'}

    \config{REDIS\_LOG\_LEVEL (Optionaler Parameter)}{REDIS\_LOG\_LEVEL}{REDISLOGLEVEL}
        "Uber diesen Parameter wird eingestellt, in welchem Detailgrad
        Informationen in die Logdatei geschrieben werden sollen. Wird
        der Parameter nicht gesetzt, so wird standardm"a"sig `notice'
        angenommen:

        G"ultige Werte: debug, verbose, notice, warning

        Standardeinstellung: \texttt{REDIS\_LOG\_LEVEL=$''$}
\end{description}

