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-serverCentOS/AlmaLinux
dnf install redisStatus prüfen
systemctl status redis
systemctl enable redisVerbindung testen
redis-cli ping
# Antwort: PONGGrundlegende Befehle
Verbinden
redis-cliStrings
# 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 key2Schlü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 nameListen
# Element hinzufügen
LPUSH tasks "Aufgabe 1"
RPUSH tasks "Aufgabe 2"
# Elemente lesen
LRANGE tasks 0 -1
# Element entfernen
LPOP tasks
RPOP tasksHashes
# 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 emailSets
# 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 yesNeustart nach Änderungen
systemctl restart redisAbsicherung
Passwort setzen
In /etc/redis/redis.conf:
requirepass IhrSicheresPasswortVerbinden mit Passwort:
redis-cli -a IhrSicheresPasswort
# Oder nach Verbindung
redis-cli
AUTH IhrSicheresPasswortNur localhost
Redis sollte nie direkt aus dem Internet erreichbar sein:
bind 127.0.0.1Gefä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-fpmBeispiel
<?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 redisimport 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 redisconst 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 memoryEchtzeit-Monitor
redis-cli MONITORSpeicheranalyse
redis-cli MEMORY STATS
redis-cli MEMORY DOCTORLangsame Befehle
redis-cli SLOWLOG GET 10Persistenz-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 yesRedis Cluster
Für hohe Verfügbarkeit und Skalierung:
Master-Slave-Replikation
Auf dem Slave:
replicaof master-ip 6379
masterauth master-passwortRedis 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-lruBackup
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.