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 medOOM 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 Redis | Kun øjebliksbilleder (standard) | Med append-only-filen |
|---|---|---|
systemctl restart | Intet tabt: den gemmer ved nedlukning | Intet tabt |
Dræbt med kill -9 | Nøglen fra efter det seneste øjebliksbillede var væk | En 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:
| Test | Forespørgsler pr. sekund | Medianlatens |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 kommandoer pr. tur-retur | 272.109 | 2,4 ms |
| GET, 16 kommandoer pr. tur-retur | 414.938 | 1,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.
Kommentarer
Ingen kommentarer endnu. Vær den første.