Redis ține datele în memorie și răspunde în aproximativ o milisecundă, de aceea stă în spatele atâtor aplicații, ca cache, coadă sau depozit de sesiuni. Instalarea e o singură comandă. Munca e în setările implicite: nicio limită de memorie, instantanee care pot pierde scrierile recente și două greșeli ușoare care îți șterg datele sau îți dezactivează parola fără să observi. Ghidul acesta le acoperă pe toate pe Ubuntu 24.04. Am parcurs fiecare pas pe imaginea noastră; cifrele vin de pe un server Micro (2 vCPU, 2 GB).
Ai nevoie de un utilizator cu sudo. Ghidul de configurare Ubuntu creează unul.
1. Instalare
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Instalarea a durat 13 secunde și ne-a dat Redis 7.0.15. Pornește imediat și la fiecare boot, răspunde PONG și ascultă doar pe serverul însuși: 127.0.0.1:6379 și [::1]:6379, cu protected-mode yes. Fără date, folosea 13,5 MB de RAM.
Jurnalul avea deja un avertisment:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis salvează pe disc dintr-o copie a lui creată cu fork, iar cu setarea implicită a kernelului acel fork poate eșua când memoria e strâmtă. Repară o dată:
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
După repornire, avertismentul a dispărut.
2. Limitează-i memoria
Din fabrică, maxmemory este 0, adică fără limită, iar politica e noeviction. Redis va lua RAM până rămâne serverul fără. Pune un plafon și decide ce se întâmplă când e atins:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Am testat ambele politici cu o limită de 64 MB și 400.000 de scrieri:
noeviction(implicit): memoria s-a oprit la 63 MB, iar scrierile noi au eșuat cuOOM command not allowed when used memory > 'maxmemory'. Potrivită pentru o coadă sau orice nu-ți permiți să pierzi.allkeys-lru: Redis a aruncat cheile folosite cel mai de demult, 48.606, iar toate scrierile au trecut. Potrivită pentru un cache.
CONFIG REWRITE salvează setările curente în /etc/redis/redis.conf, ca să supraviețuiască unei reporniri. Mai adaugă și o linie pe care trebuie s-o cunoști înainte de pasul 4.
3. Alege cum salvează pe disc
Implicit, Redis scrie un instantaneu (/var/lib/redis/dump.rdb) după 1 schimbare într-o oră, 100 în cinci minute sau 10.000 într-un minut. Am testat trei feluri de a-l opri:
| Cum s-a oprit Redis | Doar instantanee (implicit) | Cu fișierul AOF |
|---|---|---|
systemctl restart | Nimic pierdut: salvează la oprire | Nimic pierdut |
Oprit forțat cu kill -9 | Cheia scrisă după ultimul instantaneu dispăruse | O cheie scrisă cu 2 secunde înainte era acolo |
În ambele cazuri, systemd a repornit singur Redis în câteva secunde.
Dacă Redis ține date care ți-ar lipsi, pornește fișierul AOF (append-only file). El consemnează fiecare scriere și o trimite pe disc o dată pe secundă. Fă-o pe serverul pornit, nu editând fișierul:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Am încercat întâi cealaltă cale și ne-a costat datele. Am schimbat appendonly no în appendonly yes în redis.conf și am repornit. Redis a revenit cu un AOF gol și n-a încărcat nimic din instantaneu, așa că toate cheile existente au dispărut. La oprirea următoare, și-a scris noul conținut, fără cheile vechi, și peste dump.rdb. CONFIG SET evită asta: Redis scrie întâi AOF-ul din datele din memorie. După o repornire, toate cheile noastre erau acolo.
Dacă Redis e doar un cache care poate porni gol, fă invers și dezactivează salvarea cu redis-cli CONFIG SET save "".
4. Setează o parolă
Iată a doua capcană. După orice CONFIG REWRITE, Redis 7 adaugă această linie la finalul redis.conf:
user default on nopass ~* &* +@all
Ea înseamnă „utilizatorul implicit nu are nevoie de parolă”. Apoi am adăugat requirepass mai sus în fișier și am repornit. Redis tot răspundea PONG fără parolă, pentru că linia user o anulează. Setează parola prin 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
Păstrează parola într-un loc sigur. Acum Redis o stochează ca hash SHA-256 în aceeași linie user default. După o repornire, redis-cli ping a răspuns NOAUTH Authentication required. și mergea doar parola. Dă-i-o lui redis-cli prin variabila REDISCLI_AUTH. Cu -a apare în lista proceselor, iar redis-cli te avertizează. În aplicație, pune-o în adresa Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. Accesul de pe calculatorul tău
Lasă Redis pe 127.0.0.1 și folosește un tunel SSH. Folosește portul SSH al serverului; pe planurile cu NAT acesta este portul tău personal:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Cât timp rulează, redis-cli -p 6380 și uneltele desktop de pe calculatorul tău vorbesc cu Redis de pe server. Nimic nou nu rămâne deschis spre internet. Cu ghidul pentru chei SSH, tunelul se conectează fără parolă.
Cât de rapid este
Pe serverul de test Micro, redis-benchmark cu 50 de clienți ne-a dat:
| Test | Cereri pe secundă | Latență mediană |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 comenzi pe drum dus-întors | 272.109 | 2,4 ms |
| GET, 16 comenzi pe drum dus-întors | 414.938 | 1,3 ms |
Pentru cache-ul sau coada de sarcini a unei aplicații web, e mult mai mult decât îți va trebui. Viteza în plus vine din trimiterea comenzilor în loturi (pipelining).
Ce plan
Redis are nevoie de RAM pentru datele tale și de puțin altceva. Nano (2 vCPU, 1 GB, $3/lună) rulează Redis lângă o aplicație mică, cu maxmemory 256mb. Micro (2 GB, $5/lună) lasă loc pentru un cache mai mare plus aplicația. Dacă altceva trebuie să se conecteze direct la Redis, ia-ți propriul IPv4 (de la Nano-IP cu $8/lună) și permite în firewall doar acea adresă. Toate planurile sunt pe pagina VPS, iar plata se face în USDT, USDC sau ETH pe Base, Ethereum sau Polygon.
Comentarii
Încă nu există comentarii. Fii primul.