EQVPS
DashboardInizia

Come installare Redis su un VPS: limite di memoria, persistenza e una password che resta

Installa Redis su Ubuntu 24.04, limita la sua memoria perché non occupi tutto il server, attiva il file AOF senza cancellare i dati e imposta una password che sopravvive ai riavvii. Due di questi passaggi nascondono trappole in cui siamo caduti sul nostro server di prova.

Redis tiene i dati in memoria e risponde in circa un millisecondo, ed è per questo che sta dietro a tante app come cache, coda o archivio delle sessioni. L'installazione è un comando. Il lavoro sta nelle impostazioni di default: nessun limite di memoria, istantanee che possono perdere le scritture recenti e due errori facili che cancellano i dati o disattivano la password senza che te ne accorga. Questa guida copre tutto su Ubuntu 24.04. Abbiamo eseguito ogni passaggio sulla nostra immagine; i numeri vengono da un server Micro (2 vCPU, 2 GB).

Ti serve un utente con sudo. La guida alla configurazione di Ubuntu ne crea uno.

1. Installare

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

L'installazione ha richiesto 13 secondi e ci ha dato Redis 7.0.15. Parte subito e a ogni avvio, risponde PONG e ascolta solo sul server stesso: 127.0.0.1:6379 e [::1]:6379, con protected-mode yes. Senza dati usava 13,5 MB di RAM.

Il log conteneva già un avviso:

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

Redis salva su disco da una copia di sé creata con fork, e con l'impostazione predefinita del kernel quel fork può fallire quando la memoria scarseggia. Correggilo una volta:

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

Dopo il riavvio l'avviso era sparito.

2. Limitare la memoria

Di fabbrica maxmemory vale 0, cioè nessun limite, e la politica è noeviction. Redis continuerà a prendere RAM finché il server non la esaurisce. Fissa un tetto e decidi cosa succede quando viene raggiunto:

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

Abbiamo provato entrambe le politiche con un limite di 64 MB e 400.000 scritture:

  • noeviction (default): la memoria si è fermata a 63 MB e le nuove scritture fallivano con OOM command not allowed when used memory > 'maxmemory'. Giusta per una coda o per tutto ciò che non puoi perdere.
  • allkeys-lru: Redis ha scartato le chiavi usate meno di recente, 48.606, e ogni scrittura è andata a buon fine. Giusta per una cache.

CONFIG REWRITE salva le impostazioni correnti in /etc/redis/redis.conf, così sopravvivono a un riavvio. Aggiunge anche una riga che devi conoscere prima del passaggio 4.

3. Scegliere come salvare su disco

Di default Redis scrive un'istantanea (/var/lib/redis/dump.rdb) dopo 1 modifica in un'ora, 100 in cinque minuti o 10.000 in un minuto. Abbiamo provato tre modi di fermarlo:

Come si è fermato RedisSolo istantanee (default)Con il file AOF
systemctl restartNiente perso: salva allo spegnimentoNiente perso
Ucciso con kill -9La chiave scritta dopo l'ultima istantanea era sparitaUna chiave scritta 2 secondi prima c'era

In entrambi i casi systemd ha riavviato Redis da solo in pochi secondi.

Se Redis contiene dati che ti mancherebbero, attiva il file AOF (append-only file). Registra ogni scrittura e la scarica su disco una volta al secondo. Fallo sul server in funzione, non modificando il file:

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

Prima abbiamo provato l'altra strada, e ci è costata i dati. Abbiamo cambiato appendonly no in appendonly yes in redis.conf e riavviato. Redis è ripartito con un AOF vuoto e non ha caricato nulla dall'istantanea, quindi tutte le chiavi esistenti erano sparite. Allo spegnimento successivo ha anche scritto il suo nuovo contenuto, senza le vecchie chiavi, sopra dump.rdb. CONFIG SET lo evita: Redis scrive prima l'AOF dai dati in memoria. Dopo un riavvio tutte le nostre chiavi c'erano.

Se Redis è una cache pura che può ripartire vuota, fai il contrario e disattiva il salvataggio con redis-cli CONFIG SET save "".

4. Impostare una password

Ecco la seconda trappola. Dopo qualunque CONFIG REWRITE, Redis 7 aggiunge questa riga in fondo a redis.conf:

user default on nopass ~* &* +@all

Significa «l'utente predefinito non ha bisogno di password». Poi abbiamo aggiunto requirepass più in alto nel file e riavviato. Redis rispondeva ancora PONG senza password, perché la riga user ha la precedenza. Imposta invece la password tramite 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

Conserva la password in un posto sicuro. Ora Redis la memorizza come hash SHA-256 in quella stessa riga user default. Dopo un riavvio redis-cli ping ha risposto NOAUTH Authentication required. e funzionava solo la password. Passala a redis-cli con la variabile REDISCLI_AUTH. Con -a compare nell'elenco dei processi, e redis-cli ti avvisa. Nella tua app mettila nell'URL di Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. Raggiungerlo dal tuo computer

Lascia Redis su 127.0.0.1 e usa un tunnel SSH. Usa la porta SSH del tuo server, che sui piani NAT è la tua porta personale:

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

Finché è attivo, redis-cli -p 6380 e gli strumenti desktop del tuo computer parlano con il Redis del server. Verso internet non si apre nulla di nuovo. Con la guida alle chiavi SSH il tunnel accede senza password.

Quanto è veloce

Sul server di prova Micro, redis-benchmark con 50 client ci ha dato:

TestRichieste al secondoLatenza mediana
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 comandi per andata e ritorno272.1092,4 ms
GET, 16 comandi per andata e ritorno414.9381,3 ms

Per la cache o la coda di job di un'app web è molto più di quanto ti servirà. La velocità in più viene dall'invio dei comandi a gruppi (pipelining).

Quale piano

Redis ha bisogno di RAM per i tuoi dati e di poco altro. Nano (2 vCPU, 1 GB, $3/mese) fa girare Redis accanto a una piccola app con maxmemory 256mb. Micro (2 GB, $5/mese) lascia spazio a una cache più grande più l'app. Se qualcos'altro deve collegarsi direttamente a Redis, usa un tuo IPv4 (da Nano-IP a $8/mese) e consenti solo quell'indirizzo nel firewall. Tutti i piani sono nella pagina VPS, e il pagamento è in USDT, USDC o ETH su Base, Ethereum o Polygon.

FAQ

Quanta RAM serve a Redis?

Redis in sé è minuscolo: 13,5 MB subito dopo l'installazione sul nostro server. Gli serve spazio per i tuoi dati, che stanno in memoria. Imposta maxmemory su quanto il server può concedere, per esempio 256 MB su un server da 1 GB, e scegli cosa succede quando si riempie.

Redis o Valkey?

Valkey è un fork di Redis nato da Redis 7.2 e parla lo stesso protocollo, quindi la maggior parte dei client funziona con entrambi. Ubuntu 24.04 fornisce solo Redis 7.0.15. Debian 13 ha sia Redis 8.0 sia Valkey 8.1, e Debian 12 riceve Valkey 8.0 dai backports. I passaggi di questa guida valgono per tutti e due.

Perché Redis perde dati dopo un crash?

Di default Redis salva un'istantanea su disco ogni pochi minuti, a seconda di quante chiavi sono cambiate. Quando abbiamo ucciso il processo, la chiave scritta dopo l'ultima istantanea era sparita. Attiva il file AOF, che scrive ogni secondo, e un crash ti costerà al massimo circa un secondo di scritture.

Ho aggiunto requirepass a redis.conf, perché Redis accetta ancora comandi senza password?

Probabilmente perché a un certo punto è stato eseguito CONFIG REWRITE. Su Redis 7 aggiunge la riga user default on nopass ~* &* +@all in fondo a redis.conf, e quella riga annulla un requirepass scritto più in alto. Imposta la password con CONFIG SET requirepass e poi CONFIG REWRITE: Redis la salverà in quella riga.

Posso aprire la porta 6379 a internet?

Meglio di no. Le porte Redis aperte vengono scansionate di continuo e sono una via d'accesso comune ai server. Raggiungi Redis dal tuo computer con un tunnel SSH, oppure tienilo sullo stesso server dell'app che lo usa.

Commenti

Ancora nessun commento. Sii il primo.

Lascia un commento

I commenti sono moderati prima di comparire.