EQVPS
DashboardLoslegen

Redis auf einem VPS installieren: Speicherlimit, Persistenz und ein Passwort, das bleibt

Redis auf Ubuntu 24.04 installieren, den Speicher begrenzen, damit es nicht den ganzen Server belegt, das Append-only-File einschalten, ohne Daten zu löschen, und ein Passwort setzen, das Neustarts übersteht. In zwei dieser Schritte stecken Fallen, in die wir auf unserem Testserver selbst getreten sind.

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 mit OOM 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 wurdeNur Snapshots (Standard)Mit Append-only-File
systemctl restartNichts verloren: es speichert beim HerunterfahrenNichts verloren
Beendet mit kill -9Der Schlüssel nach dem letzten Snapshot fehlteEin 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:

TestAnfragen pro SekundeMedian-Latenz
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 Befehle pro Roundtrip272.1092,4 ms
GET, 16 Befehle pro Roundtrip414.9381,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.

FAQ

Wie viel RAM braucht Redis?

Redis selbst ist winzig: 13,5 MB direkt nach der Installation auf unserem Server. Was es braucht, ist Platz für Ihre Daten, denn die liegen im Arbeitsspeicher. Setzen Sie maxmemory auf das, was der Server hergibt, etwa 256 MB bei 1 GB RAM, und legen Sie fest, was passiert, wenn der Speicher voll ist.

Redis oder Valkey?

Valkey ist ein Fork von Redis, der bei Redis 7.2 begann, und spricht dasselbe Protokoll, daher funktionieren die meisten Clients mit beiden. Ubuntu 24.04 liefert nur Redis 7.0.15. Debian 13 hat Redis 8.0 und Valkey 8.1, Debian 12 bekommt Valkey 8.0 aus den Backports. Die Schritte dieser Anleitung gelten für beide.

Warum verliert Redis nach einem Absturz Daten?

Standardmäßig speichert Redis alle paar Minuten einen Snapshot auf die Platte, je nachdem, wie viele Schlüssel sich geändert haben. Als wir den Prozess beendeten, fehlte der Schlüssel, der nach dem letzten Snapshot geschrieben wurde. Schalten Sie das Append-only-File ein, das jede Sekunde schreibt, dann kostet ein Absturz höchstens etwa eine Sekunde an Schreibvorgängen.

Ich habe requirepass in redis.conf eingetragen. Warum nimmt Redis trotzdem Befehle ohne Passwort an?

Vermutlich lief irgendwann CONFIG REWRITE. Unter Redis 7 hängt es die Zeile user default on nopass ~* &* +@all an das Ende von redis.conf, und diese Zeile hebt ein weiter oben eingetragenes requirepass auf. Setzen Sie das Passwort mit CONFIG SET requirepass und danach CONFIG REWRITE, dann speichert Redis es in genau dieser Zeile.

Kann ich Port 6379 ins Internet öffnen?

Lieber nicht. Offene Redis-Ports werden ständig gescannt und sind ein häufiger Weg in fremde Server. Greifen Sie von Ihrem Rechner über einen SSH-Tunnel auf Redis zu oder lassen Sie es auf demselben Server wie die App, die es nutzt.

Kommentare

Noch keine Kommentare. Sei der Erste.

Kommentar hinterlassen

Kommentare werden vor der Anzeige moderiert.