Redis ist ein extrem schneller In-Memory-Datenspeicher. Er wird häufig als Cache, Session-Store oder Message-Broker eingesetzt.

Was ist Redis?

Redis (Remote Dictionary Server) speichert Daten im Arbeitsspeicher statt auf der Festplatte. Das macht ihn extrem schnell - typische Antwortzeiten liegen unter einer Millisekunde.

Einsatzgebiete

  • Caching: Datenbankabfragen zwischenspeichern
  • Session-Storage: PHP/Node.js Sessions speichern
  • Rate Limiting: API-Zugriffe begrenzen
  • Queues: Hintergrund-Jobs verwalten
  • Real-Time: Pub/Sub für Live-Updates

Installation

Ubuntu/Debian

apt update
apt install redis-server

CentOS/AlmaLinux

dnf install redis

Status prüfen

systemctl status redis
systemctl enable redis

Verbindung testen

redis-cli ping
# Antwort: PONG

Grundlegende Befehle

Verbinden

redis-cli

Strings

# Wert setzen
SET name "Max"

# Wert lesen
GET name

# Mit Ablaufzeit (60 Sekunden)
SETEX token 60 "abc123"

# Mehrere Werte
MSET key1 "value1" key2 "value2"
MGET key1 key2

Schlüssel verwalten

# Alle Schlüssel auflisten
KEYS *

# Schlüssel löschen
DEL name

# Ablaufzeit prüfen
TTL token

# Ablaufzeit setzen
EXPIRE name 300

# Prüfen ob existiert
EXISTS name

Listen

# Element hinzufügen
LPUSH tasks "Aufgabe 1"
RPUSH tasks "Aufgabe 2"

# Elemente lesen
LRANGE tasks 0 -1

# Element entfernen
LPOP tasks
RPOP tasks

Hashes

# Hash setzen
HSET user:1 name "Max" email "max@example.com"

# Hash lesen
HGET user:1 name
HGETALL user:1

# Feld löschen
HDEL user:1 email

Sets

# Elemente hinzufügen
SADD tags "linux" "server" "redis"

# Alle Elemente
SMEMBERS tags

# Prüfen ob enthalten
SISMEMBER tags "linux"

Konfiguration

Die Konfigurationsdatei liegt unter /etc/redis/redis.conf.

Wichtige Einstellungen

# An alle Interfaces binden (Vorsicht!)
bind 127.0.0.1

# Port (Standard: 6379)
port 6379

# Passwort setzen
requirepass IhrSicheresPasswort

# Maximaler Speicher
maxmemory 256mb

# Verhalten bei vollem Speicher
maxmemory-policy allkeys-lru

# Persistenz (RDB-Snapshots)
save 900 1      # Nach 900s wenn 1 Änderung
save 300 10     # Nach 300s wenn 10 Änderungen
save 60 10000   # Nach 60s wenn 10000 Änderungen

# AOF-Persistenz (sicherer)
appendonly yes

Neustart nach Änderungen

systemctl restart redis

Absicherung

Passwort setzen

In /etc/redis/redis.conf:

requirepass IhrSicheresPasswort

Verbinden mit Passwort:

redis-cli -a IhrSicheresPasswort

# Oder nach Verbindung
redis-cli
AUTH IhrSicheresPasswort

Nur localhost

Redis sollte nie direkt aus dem Internet erreichbar sein:

bind 127.0.0.1

Gefährliche Befehle deaktivieren

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""

Redis mit PHP

PHP-Redis-Extension

apt install php-redis
systemctl restart php-fpm

Beispiel

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('passwort');

// Caching
$cacheKey = 'user_123';

if ($redis->exists($cacheKey)) {
    $user = json_decode($redis->get($cacheKey), true);
} else {
    // Aus Datenbank laden
    $user = getUserFromDB(123);
    $redis->setex($cacheKey, 3600, json_encode($user));
}

WordPress mit Redis

# Redis Object Cache Plugin installieren
# In wp-config.php:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'passwort');

Redis mit Python

pip install redis
import redis

r = redis.Redis(host='localhost', port=6379, password='passwort')

# Werte setzen/lesen
r.set('name', 'Max')
name = r.get('name').decode('utf-8')

# Mit Ablaufzeit
r.setex('token', 60, 'abc123')

Redis mit Node.js

npm install redis
const redis = require('redis');
const client = redis.createClient({
    url: 'redis://:passwort@localhost:6379'
});

await client.connect();

// Werte setzen/lesen
await client.set('name', 'Max');
const name = await client.get('name');

// Mit Ablaufzeit
await client.setEx('token', 60, 'abc123');

Performance-Monitoring

Statistiken

redis-cli INFO
redis-cli INFO stats
redis-cli INFO memory

Echtzeit-Monitor

redis-cli MONITOR

Speicheranalyse

redis-cli MEMORY STATS
redis-cli MEMORY DOCTOR

Langsame Befehle

redis-cli SLOWLOG GET 10

Persistenz-Optionen

RDB (Snapshots)

  • Speichert Daten periodisch als Snapshot
  • Schnellere Neustarts
  • Potentieller Datenverlust bei Crash

AOF (Append Only File)

  • Protokolliert jeden Schreibbefehl
  • Sicherer, weniger Datenverlust
  • Größere Dateien

Hybrid (empfohlen ab Redis 4)

aof-use-rdb-preamble yes

Redis Cluster

Für hohe Verfügbarkeit und Skalierung:

Master-Slave-Replikation

Auf dem Slave:

replicaof master-ip 6379
masterauth master-passwort

Redis Sentinel

Automatisches Failover bei Master-Ausfall.

Memory-Management

Eviction-Policies

| Policy | Beschreibung | |--------|--------------| | noeviction | Fehler wenn voll (Standard) | | allkeys-lru | LRU auf alle Keys | | volatile-lru | LRU nur auf Keys mit TTL | | allkeys-random | Zufällig löschen | | volatile-ttl | Kürzeste TTL zuerst |

# In redis.conf
maxmemory 512mb
maxmemory-policy allkeys-lru

Backup

RDB-Backup

# Snapshot erstellen
redis-cli BGSAVE

# Datei kopieren
cp /var/lib/redis/dump.rdb /backup/

AOF-Backup

cp /var/lib/redis/appendonly.aof /backup/

Fazit

Redis ist unverzichtbar für performante Web-Anwendungen. Als Cache reduziert er Datenbankzugriffe drastisch. Die Einrichtung ist einfach, aber vergessen Sie nicht die Absicherung mit Passwort und Firewall.