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 medOOM 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 stoppades | Bara ögonblicksbilder (standard) | Med append-only-filen |
|---|---|---|
systemctl restart | Inget förlorat: det sparar vid avstängning | Inget förlorat |
Dödat med kill -9 | Nyckeln från efter senaste ögonblicksbilden var borta | En 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:
| Test | Förfrågningar per sekund | Medianlatens |
|---|---|---|
| SET | 30 303 | 1,0 ms |
| GET | 35 149 | 0,9 ms |
| SET, 16 kommandon per tur och retur | 272 109 | 2,4 ms |
| GET, 16 kommandon per tur och retur | 414 938 | 1,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.
Kommentarer
Inga kommentarer än. Bli först.