EQVPS
KontrollpanelKom igång

Så installerar du Redis på en VPS: minnesgräns, beständighet och ett lösenord som sitter kvar

Installera Redis på Ubuntu 24.04, begränsa minnet så att det inte tar hela servern, slå på append-only-filen utan att radera dina data och sätt ett lösenord som överlever omstarter. Två av stegen har fällor som vi själva gick i på vår testserver.

Redis håller data i minnet och svarar på ungefär en millisekund, och därför finns det bakom så många appar som cache, kö eller sessionslagring. Installationen är ett kommando. Arbetet ligger i standardinställningarna: ingen minnesgräns, ögonblicksbilder som kan tappa de senaste skrivningarna, och två lätta misstag som tyst raderar dina data eller stänger av ditt lösenord. Den här guiden går igenom allt på Ubuntu 24.04. Vi körde varje steg på vår avbild; siffrorna kommer från en Micro-server (2 vCPU, 2 GB).

Du behöver en användare med sudo. Guiden för att sätta upp Ubuntu skapar en.

1. Installera

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

Installationen tog 13 sekunder och gav oss Redis 7.0.15. Det startar direkt och vid varje uppstart, svarar PONG och lyssnar bara på själva servern: 127.0.0.1:6379 och [::1]:6379, med protected-mode yes. Utan data använde det 13,5 MB RAM.

Loggen hade redan en varning:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis sparar till disk från en kopia av sig själv som skapas med fork, och med kärnans standardinställning kan den forken misslyckas när minnet är trångt. Rätta det en gång:

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

Efter omstarten var varningen borta.

2. Begränsa minnet

Från start är maxmemory 0, alltså ingen gräns, och policyn är noeviction. Redis tar RAM tills servern tar slut. Sätt ett tak och bestäm vad som händer när det nås:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Vi testade båda policyerna med en gräns på 64 MB och 400 000 skrivningar:

  • noeviction (standard): minnet stannade på 63 MB och nya skrivningar misslyckades med OOM command not allowed when used memory > 'maxmemory'. Rätt för en kö eller allt du inte har råd att tappa.
  • allkeys-lru: Redis kastade de minst nyligen använda nycklarna, 48 606 stycken, och alla skrivningar gick igenom. Rätt för en cache.

CONFIG REWRITE sparar de aktuella inställningarna i /etc/redis/redis.conf, så att de överlever en omstart. Det lägger också till en rad som du behöver känna till före steg 4.

3. Välj hur det sparar till disk

Som standard skriver Redis en ögonblicksbild (/var/lib/redis/dump.rdb) efter 1 ändring på en timme, 100 på fem minuter eller 10 000 på en minut. Vi testade tre sätt att stoppa det:

Hur Redis stoppadesBara ögonblicksbilder (standard)Med append-only-filen
systemctl restartInget förlorat: det sparar vid avstängningInget förlorat
Dödat med kill -9Nyckeln från efter senaste ögonblicksbilden var bortaEn nyckel skriven 2 sekunder före var kvar

I båda fallen startade systemd om Redis av sig självt inom några sekunder.

Om Redis har data du skulle sakna, slå på append-only-filen (AOF). Den loggar varje skrivning och skriver den till disk en gång per sekund. Gör det på den körande servern, inte genom att redigera filen:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Vi provade först den andra vägen, och den kostade oss våra data. Vi ändrade appendonly no till appendonly yes i redis.conf och startade om. Redis kom tillbaka med en tom AOF och läste inget från ögonblicksbilden, så alla befintliga nycklar var borta. När det stängdes av nästa gång skrev det dessutom sitt nya innehåll, utan de gamla nycklarna, över dump.rdb. CONFIG SET undviker det: Redis skriver först AOF-filen från datan i minnet. Efter en omstart fanns alla våra nycklar kvar.

Är Redis en ren cache som får starta tom, gör tvärtom och stäng av sparandet med redis-cli CONFIG SET save "".

4. Sätt ett lösenord

Här är den andra fällan. Efter varje CONFIG REWRITE lägger Redis 7 till den här raden sist i redis.conf:

user default on nopass ~* &* +@all

Den betyder "standardanvändaren behöver inget lösenord". Sedan lade vi till requirepass högre upp i filen och startade om. Redis svarade fortfarande PONG utan lösenord, eftersom raden user vinner. Sätt i stället lösenordet via 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

Spara lösenordet på ett säkert ställe. Redis lagrar det nu som en SHA-256-hash på samma user default-rad. Efter en omstart svarade redis-cli ping med NOAUTH Authentication required. och bara lösenordet fungerade. Ge det till redis-cli via variabeln REDISCLI_AUTH. Med -a syns det i processlistan, och redis-cli varnar för det. I din app lägger du det i Redis-adressen: redis://:PASSWORD@127.0.0.1:6379/0.

5. Nå det från din dator

Låt Redis ligga kvar på 127.0.0.1 och använd en SSH-tunnel. Använd serverns SSH-port, som på NAT-planer är din personliga port:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Medan det körs pratar redis-cli -p 6380 och skrivbordsverktyg på din dator med serverns Redis. Inget nytt är öppet mot internet. Med guiden om SSH-nycklar loggar tunneln in utan lösenord.

Hur snabbt det är

På Micro-testservern gav redis-benchmark med 50 klienter:

TestFörfrågningar per sekundMedianlatens
SET30 3031,0 ms
GET35 1490,9 ms
SET, 16 kommandon per tur och retur272 1092,4 ms
GET, 16 kommandon per tur och retur414 9381,3 ms

För en webbapps cache eller jobbkö är det mycket mer än du kommer att behöva. Den extra farten kommer från att skicka kommandon i omgångar (pipelining).

Vilken plan

Redis behöver RAM för dina data och inte mycket mer. Nano (2 vCPU, 1 GB, $3/mån) kör Redis bredvid en liten app med maxmemory 256mb. Micro (2 GB, $5/mån) ger plats för en större cache plus appen. Om något annat måste ansluta direkt till Redis, ta en egen IPv4 (från Nano-IP för $8/mån) och släpp bara in den adressen i brandväggen. Alla planer finns på sidan VPS, och betalning sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon.

FAQ

Hur mycket RAM behöver Redis?

Redis själv är pyttelitet: 13,5 MB direkt efter installationen på vår server. Det som behövs är plats för dina data, som ligger i minnet. Sätt maxmemory till vad servern kan avvara, till exempel 256 MB på en server med 1 GB, och välj vad som ska hända när det blir fullt.

Redis eller Valkey?

Valkey är en fork av Redis som utgick från Redis 7.2 och talar samma protokoll, så de flesta klienter fungerar med båda. Ubuntu 24.04 har bara Redis 7.0.15. Debian 13 har både Redis 8.0 och Valkey 8.1, och Debian 12 får Valkey 8.0 från backports. Stegen i guiden gäller för båda.

Varför förlorar Redis data efter en krasch?

Som standard sparar Redis en ögonblicksbild till disk med några minuters mellanrum, beroende på hur många nycklar som ändrats. När vi dödade processen var nyckeln som skrevs efter den senaste ögonblicksbilden borta. Slå på append-only-filen, som skriver varje sekund, så kostar en krasch dig som mest ungefär en sekunds skrivningar.

Jag lade till requirepass i redis.conf, varför tar Redis fortfarande emot kommandon utan lösenord?

Troligen för att CONFIG REWRITE har körts någon gång. I Redis 7 lägger det till raden user default on nopass ~* &* +@all sist i redis.conf, och den raden upphäver ett requirepass högre upp. Sätt lösenordet med CONFIG SET requirepass och sedan CONFIG REWRITE, så sparar Redis det på just den raden.

Kan jag öppna port 6379 mot internet?

Låt bli. Öppna Redis-portar skannas hela tiden och är en vanlig väg in i servrar. Nå Redis från din dator via en SSH-tunnel, eller håll det på samma server som appen som använder det.

Kommentarer

Inga kommentarer än. Bli först.

Lämna en kommentar

Kommentarer modereras innan de visas.