Redis hält Daten im Arbeitsspeicher und antwortet in etwa einer Millisekunde. Deshalb steckt es hinter so vielen Apps, als Cache, als Warteschlange oder als Session-Speicher. Die Installation ist ein Befehl. Die Arbeit liegt in den Voreinstellungen: kein Speicherlimit, Snapshots, die neue Schreibvorgänge verlieren können, und zwei leichte Fehler, die unbemerkt Ihre Daten löschen oder Ihr Passwort abschalten. Diese Anleitung behandelt alles auf Ubuntu 24.04. Wir haben jeden Schritt auf unserem Image ausgeführt; die Zahlen stammen von einem Micro-Server (2 vCPU, 2 GB).
Sie brauchen einen Benutzer mit sudo. Die Ubuntu-Einrichtungsanleitung legt einen an.
1. Installieren
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Die Installation dauerte 13 Sekunden und brachte Redis 7.0.15. Es startet sofort und bei jedem Boot, antwortet mit PONG und lauscht nur auf dem Server selbst: 127.0.0.1:6379 und [::1]:6379, mit protected-mode yes. Ohne Daten belegte es 13,5 MB RAM.
Im Log stand schon eine Warnung:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis speichert auf die Platte aus einer per fork erzeugten Kopie seiner selbst, und mit der Standardeinstellung des Kernels kann dieser fork scheitern, wenn der Speicher knapp ist. Einmal beheben:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Nach dem Neustart war die Warnung weg.
2. Den Speicher begrenzen
Ab Werk steht maxmemory auf 0, also ohne Limit, und die Richtlinie ist noeviction. Redis nimmt sich RAM, bis der Server keinen mehr hat. Setzen Sie eine Obergrenze und legen Sie fest, was beim Erreichen passiert:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Wir haben beide Richtlinien mit 64 MB Limit und 400.000 Schreibvorgängen getestet:
noeviction(Standard): Der Speicher blieb bei 63 MB stehen, und neue Schreibvorgänge scheiterten mitOOM command not allowed when used memory > 'maxmemory'. Richtig für eine Warteschlange oder alles, was nicht verloren gehen darf.allkeys-lru: Redis verwarf die am längsten nicht genutzten Schlüssel, 48.606 Stück, und jeder Schreibvorgang ging durch. Richtig für einen Cache.
CONFIG REWRITE speichert die laufenden Einstellungen in /etc/redis/redis.conf, damit sie einen Neustart überstehen. Außerdem fügt es eine Zeile hinzu, die Sie vor Schritt 4 kennen sollten.
3. Festlegen, wie gespeichert wird
Standardmäßig schreibt Redis einen Snapshot (/var/lib/redis/dump.rdb) nach 1 Änderung pro Stunde, 100 in fünf Minuten oder 10.000 in einer Minute. Wir haben drei Arten getestet, es zu stoppen:
| Wie Redis gestoppt wurde | Nur Snapshots (Standard) | Mit Append-only-File |
|---|---|---|
systemctl restart | Nichts verloren: es speichert beim Herunterfahren | Nichts verloren |
Beendet mit kill -9 | Der Schlüssel nach dem letzten Snapshot fehlte | Ein Schlüssel von 2 Sekunden vor dem Kill war da |
In beiden Fällen startete systemd Redis innerhalb von Sekunden von selbst neu.
Wenn in Redis Daten liegen, die Ihnen fehlen würden, schalten Sie das Append-only-File (AOF) ein. Es protokolliert jeden Schreibvorgang und schreibt ihn einmal pro Sekunde auf die Platte. Machen Sie das am laufenden Server, nicht durch Bearbeiten der Datei:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Wir haben zuerst den anderen Weg probiert, und er hat uns unsere Daten gekostet. Wir änderten appendonly no in redis.conf auf appendonly yes und starteten neu. Redis kam mit einem leeren AOF hoch und lud nichts aus dem Snapshot, also waren alle vorhandenen Schlüssel weg. Beim nächsten Herunterfahren schrieb es seinen neuen Inhalt, ohne die alten Schlüssel, auch noch über dump.rdb. CONFIG SET vermeidet das: Redis schreibt das AOF zuerst aus den Daten im Speicher. Nach einem Neustart waren alle unsere Schlüssel da.
Ist Redis ein reiner Cache, der leer starten darf, gehen Sie den umgekehrten Weg und schalten das Speichern mit redis-cli CONFIG SET save "" ab.
4. Ein Passwort setzen
Hier ist die zweite Falle. Nach jedem CONFIG REWRITE fügt Redis 7 diese Zeile am Ende von redis.conf an:
user default on nopass ~* &* +@all
Sie bedeutet „der Standardbenutzer braucht kein Passwort“. Danach trugen wir requirepass weiter oben in der Datei ein und starteten neu. Redis antwortete weiterhin ohne Passwort mit PONG, weil die user-Zeile es überschreibt. Setzen Sie das Passwort stattdessen über Redis:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Bewahren Sie das Passwort sicher auf. Redis speichert es jetzt als SHA-256-Hash in derselben user default-Zeile. Nach einem Neustart antwortete redis-cli ping mit NOAUTH Authentication required., und nur das Passwort funktionierte. Übergeben Sie es redis-cli über die Variable REDISCLI_AUTH. Mit -a taucht es in der Prozessliste auf, und redis-cli warnt davor. In Ihrer App gehört es in die Redis-URL: redis://:PASSWORD@127.0.0.1:6379/0.
5. Vom eigenen Rechner zugreifen
Lassen Sie Redis auf 127.0.0.1 und nutzen Sie einen SSH-Tunnel. Verwenden Sie den SSH-Port Ihres Servers, bei NAT-Tarifen ist das Ihr persönlicher Port:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Solange das läuft, sprechen redis-cli -p 6380 und Desktop-Tools auf Ihrem Rechner mit dem Redis auf dem Server. Zum Internet hin ist nichts Neues offen. Mit der Anleitung zu SSH-Schlüsseln meldet sich der Tunnel ohne Passwort an.
Wie schnell es ist
Auf dem Micro-Testserver lieferte redis-benchmark mit 50 Clients:
| Test | Anfragen pro Sekunde | Median-Latenz |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 Befehle pro Roundtrip | 272.109 | 2,4 ms |
| GET, 16 Befehle pro Roundtrip | 414.938 | 1,3 ms |
Für den Cache oder die Job-Warteschlange einer Web-App ist das weit mehr, als Sie brauchen werden. Die zusätzliche Geschwindigkeit kommt vom Senden der Befehle in Paketen (Pipelining).
Welcher Tarif
Redis braucht RAM für Ihre Daten und sonst wenig. Nano (2 vCPU, 1 GB, $3/Monat) betreibt Redis neben einer kleinen App mit maxmemory 256mb. Micro (2 GB, $5/Monat) lässt Platz für einen größeren Cache plus die App. Muss etwas anderes direkt auf Redis zugreifen, nehmen Sie eine eigene IPv4 (ab Nano-IP für $8/Monat) und erlauben in der Firewall nur diese eine Adresse. Alle Tarife finden Sie auf der Seite VPS, bezahlt wird in USDT, USDC oder ETH über Base, Ethereum oder Polygon.
Kommentare
Noch keine Kommentare. Sei der Erste.