EQVPS
DashboardKom i gang

Sådan installerer du Redis på en VPS: hukommelsesgrænse, persistens og en adgangskode, der bliver

Installér Redis på Ubuntu 24.04, begræns hukommelsen, så den ikke tager hele serveren, slå append-only-filen til uden at slette dine data, og sæt en adgangskode, der overlever genstarter. To af trinene har fælder, som vi selv faldt i på vores testserver.

Redis holder data i hukommelsen og svarer på omkring et millisekund, og derfor sidder den bag så mange apps som cache, kø eller sessionslager. Installationen er én kommando. Arbejdet ligger i standardindstillingerne: ingen hukommelsesgrænse, øjebliksbilleder der kan tabe de seneste skrivninger, og to lette fejl, der stille sletter dine data eller slår din adgangskode fra. Denne guide gennemgår det hele på Ubuntu 24.04. Vi kørte hvert trin på vores image; tallene kommer fra en Micro-server (2 vCPU, 2 GB).

Du skal bruge en bruger med sudo. Guiden til opsætning af Ubuntu opretter en.

1. Installér

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

Installationen tog 13 sekunder og gav os Redis 7.0.15. Den starter med det samme og ved hver opstart, svarer PONG og lytter kun på selve serveren: 127.0.0.1:6379 og [::1]:6379, med protected-mode yes. Uden data brugte den 13,5 MB RAM.

Loggen havde allerede en advarsel:

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

Redis gemmer på disken fra en kopi af sig selv, der laves med fork, og med kernens standardindstilling kan den fork mislykkes, når hukommelsen er knap. Ret det én gang:

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 genstarten var advarslen væk.

2. Begræns hukommelsen

Fra start er maxmemory 0, altså ingen grænse, og politikken er noeviction. Redis bliver ved med at tage RAM, til serveren løber tør. Sæt et loft, og bestem, hvad der sker, når det nås:

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

Vi testede begge politikker med en grænse på 64 MB og 400.000 skrivninger:

  • noeviction (standard): hukommelsen stoppede ved 63 MB, og nye skrivninger fejlede med OOM command not allowed when used memory > 'maxmemory'. Rigtig til en kø eller alt, du ikke har råd til at miste.
  • allkeys-lru: Redis smed de mindst nyligt brugte nøgler ud, 48.606 af dem, og alle skrivninger gik igennem. Rigtig til en cache.

CONFIG REWRITE gemmer de aktuelle indstillinger i /etc/redis/redis.conf, så de overlever en genstart. Den tilføjer også en linje, du skal kende før trin 4.

3. Vælg, hvordan den gemmer på disken

Som standard skriver Redis et øjebliksbillede (/var/lib/redis/dump.rdb) efter 1 ændring på en time, 100 på fem minutter eller 10.000 på et minut. Vi testede tre måder at stoppe den på:

Sådan stoppede RedisKun øjebliksbilleder (standard)Med append-only-filen
systemctl restartIntet tabt: den gemmer ved nedlukningIntet tabt
Dræbt med kill -9Nøglen fra efter det seneste øjebliksbillede var vækEn nøgle skrevet 2 sekunder før var der

I begge tilfælde startede systemd selv Redis igen inden for få sekunder.

Hvis Redis holder data, du ville savne, så slå append-only-filen (AOF) til. Den logger hver skrivning og skriver den til disken én gang i sekundet. Gør det på den kørende server, ikke ved at redigere filen:

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

Vi prøvede først den anden vej, og den kostede os vores data. Vi ændrede appendonly no til appendonly yes i redis.conf og genstartede. Redis kom op med en tom AOF og indlæste intet fra øjebliksbilledet, så alle eksisterende nøgler var væk. Ved næste nedlukning skrev den desuden sit nye indhold, uden de gamle nøgler, oven i dump.rdb. CONFIG SET undgår det: Redis skriver først AOF-filen ud fra dataene i hukommelsen. Efter en genstart var alle vores nøgler der.

Er Redis en ren cache, der godt må starte tom, så gør det modsatte og slå gemning fra med redis-cli CONFIG SET save "".

4. Sæt en adgangskode

Her er den anden fælde. Efter enhver CONFIG REWRITE tilføjer Redis 7 denne linje sidst i redis.conf:

user default on nopass ~* &* +@all

Den betyder "standardbrugeren behøver ingen adgangskode". Bagefter tilføjede vi requirepass længere oppe i filen og genstartede. Redis svarede stadig PONG uden adgangskode, fordi user-linjen har forrang. Sæt i stedet adgangskoden gennem 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

Gem adgangskoden et sikkert sted. Redis gemmer den nu som en SHA-256-hash i samme user default-linje. Efter en genstart svarede redis-cli ping med NOAUTH Authentication required., og kun adgangskoden virkede. Giv den til redis-cli via variablen REDISCLI_AUTH. Med -a dukker den op i proceslisten, og redis-cli advarer om det. I din app hører den til i Redis-adressen: redis://:PASSWORD@127.0.0.1:6379/0.

5. Nå den fra din computer

Lad Redis blive på 127.0.0.1, og brug en SSH-tunnel. Brug serverens SSH-port, som på NAT-planer er din personlige port:

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

Mens det kører, taler redis-cli -p 6380 og skrivebordsværktøjer på din computer med serverens Redis. Intet nyt er åbent mod internettet. Med guiden til SSH-nøgler logger tunnelen ind uden adgangskode.

Hvor hurtig den er

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

TestForespørgsler pr. sekundMedianlatens
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 kommandoer pr. tur-retur272.1092,4 ms
GET, 16 kommandoer pr. tur-retur414.9381,3 ms

Til en webapps cache eller jobkø er det langt mere, end du får brug for. Den ekstra fart kommer af at sende kommandoer i bundter (pipelining).

Hvilken plan

Redis har brug for RAM til dine data og ikke meget andet. Nano (2 vCPU, 1 GB, $3/md.) kører Redis ved siden af en lille app med maxmemory 256mb. Micro (2 GB, $5/md.) giver plads til en større cache plus appen. Hvis noget andet skal forbinde direkte til Redis, så tag en egen IPv4 (fra Nano-IP til $8/md.), og tillad kun den ene adresse i firewallen. Alle planer står på siden VPS, og betaling sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon.

FAQ

Hvor meget RAM har Redis brug for?

Redis selv er bitte lille: 13,5 MB lige efter installationen på vores server. Det, den har brug for, er plads til dine data, som ligger i hukommelsen. Sæt maxmemory til det, serveren kan undvære, for eksempel 256 MB på en server med 1 GB, og vælg, hvad der skal ske, når den er fuld.

Redis eller Valkey?

Valkey er en fork af Redis, der startede fra Redis 7.2 og taler samme protokol, så de fleste klienter virker med begge. Ubuntu 24.04 har kun Redis 7.0.15. Debian 13 har både Redis 8.0 og Valkey 8.1, og Debian 12 får Valkey 8.0 fra backports. Trinene i denne guide gælder for begge.

Hvorfor mister Redis data efter et nedbrud?

Som standard gemmer Redis et øjebliksbillede på disken med få minutters mellemrum, alt efter hvor mange nøgler der er ændret. Da vi dræbte processen, var nøglen skrevet efter det seneste øjebliksbillede væk. Slå append-only-filen til, som skriver hvert sekund, så koster et nedbrud dig højst omkring et sekunds skrivninger.

Jeg tilføjede requirepass i redis.conf, hvorfor tager Redis stadig imod kommandoer uden adgangskode?

Sandsynligvis fordi CONFIG REWRITE er blevet kørt på et tidspunkt. I Redis 7 tilføjer den linjen user default on nopass ~* &* +@all sidst i redis.conf, og den linje ophæver et requirepass længere oppe. Sæt adgangskoden med CONFIG SET requirepass og derefter CONFIG REWRITE, så gemmer Redis den i netop den linje.

Kan jeg åbne port 6379 mod internettet?

Lad være. Åbne Redis-porte bliver scannet hele tiden og er en almindelig vej ind i servere. Nå Redis fra din computer gennem en SSH-tunnel, eller hold den på samme server som appen, der bruger den.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.