DevSecOps

Erori de Conexiune Redis: Ghid Complet de Depanare

Nicu Constantin
--6 min lectura
#redis#caching#troubleshooting#database#devops

Problemele de conexiune Redis pot paraliza performanta aplicatiei. Acest ghid acopera toate erorile frecvente Redis si solutiile lor.

Error: ECONNREFUSED - Conexiune Refuzata

Simptom:

Error: connect ECONNREFUSED 127.0.0.1:6379
Redis connection to localhost:6379 failed - connect ECONNREFUSED

Solutia 1 - Verifica daca Redis ruleaza:

# Verifica statusul Redis
sudo systemctl status redis
 
# Porneste Redis
sudo systemctl start redis
 
# Docker
docker ps | grep redis
docker start redis-container
 
# Testeaza conexiunea
redis-cli ping
# Ar trebui sa returneze: PONG

Solutia 2 - Verifica binding-ul Redis:

# Verifica pe ce asculta Redis
sudo netstat -tlnp | grep 6379
# sau
ss -tlnp | grep 6379
 
# Editeaza redis.conf
sudo nano /etc/redis/redis.conf
 
# Schimba bind pentru a permite conexiuni
# bind 127.0.0.1       # doar localhost
bind 0.0.0.0           # toate interfetele (atentie in productie!)
 
# Reporneste Redis
sudo systemctl restart redis

Solutia 3 - Networking Docker:

# docker-compose.yml
services:
  app:
    environment:
      - REDIS_HOST=redis  # Foloseste numele serviciului, nu localhost
    depends_on:
      - redis
 
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

Error: NOAUTH Authentication Required

Simptom:

NOAUTH Authentication required
Error: ERR invalid password
ReplyError: WRONGPASS invalid username-password pair

Solutia 1 - Furnizeaza parola:

// Node.js cu ioredis
const Redis = require('ioredis');
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  password: 'your-password'
});
 
// Format URL de conexiune
const redis = new Redis('redis://:your-password@localhost:6379');
 
// Cu username (Redis 6+)
const redis = new Redis('redis://username:password@localhost:6379');
# Python
import redis
r = redis.Redis(
    host='localhost',
    port=6379,
    password='your-password',
    decode_responses=True
)

Solutia 2 - Verifica parola in redis.conf:

# Verifica parola curenta
grep "requirepass" /etc/redis/redis.conf
 
# Seteaza parola
requirepass your-strong-password
 
# Pentru Redis 6+ ACL
# redis-cli
ACL SETUSER default on >password ~* &* +@all

Solutia 3 - Reseteaza parola:

# Conecteaza-te fara autentificare (daca e posibil)
redis-cli
 
# Seteaza parola noua
CONFIG SET requirepass "new-password"
 
# Persista modificarea
CONFIG REWRITE

Error: Max Number of Clients Reached

Simptom:

ERR max number of clients reached
OOM command not allowed when used memory > 'maxmemory'

Solutia 1 - Creste limita maxima de clienti:

# Verifica setarea curenta
redis-cli CONFIG GET maxclients
 
# Creste limita (necesita redis.conf sau CONFIG SET)
maxclients 10000
 
# Verifica conexiunile curente
redis-cli INFO clients

Solutia 2 - Gaseste scurgerile de conexiuni:

# Listeaza toti clientii conectati
redis-cli CLIENT LIST
 
# Gaseste conexiunile inactive de mult timp
redis-cli CLIENT LIST | grep "idle=[0-9][0-9][0-9][0-9]"
 
# Inchide un client specific
redis-cli CLIENT KILL ID <client-id>
 
# Seteaza timeout-ul clientului
timeout 300  # 5 minute

Solutia 3 - Foloseste connection pooling:

// ioredis connection pool
const Redis = require('ioredis');
 
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  maxRetriesPerRequest: 3,
  enableOfflineQueue: false,
  lazyConnect: true,
  // Connection pool (via cluster pentru un singur nod)
  family: 4,
  keepAlive: 10000
});
# Python connection pool
import redis
 
pool = redis.ConnectionPool(
    host='localhost',
    port=6379,
    max_connections=50,
    password='your-password'
)
 
r = redis.Redis(connection_pool=pool)

Error: Connection Timeout

Simptom:

Error: Connection timeout
ETIMEDOUT: connection timed out
Redis connection lost. Reconnecting...

Solutia 1 - Creste timeout-urile:

const Redis = require('ioredis');
 
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  connectTimeout: 10000,    // 10 secunde
  commandTimeout: 5000,     // 5 secunde per comanda
  retryDelayOnFailover: 100,
  retryDelayOnClusterDown: 100,
  maxRetriesPerRequest: 3
});

Solutia 2 - Verifica latenta retelei:

# Testeaza latenta
redis-cli --latency
 
# Latenta intrinseca (pe server)
redis-cli --intrinsic-latency 10
 
# Depaneaza slowlog
redis-cli SLOWLOG GET 10

Solutia 3 - Configureaza TCP keepalive:

# redis.conf
tcp-keepalive 300
 
# Pe partea de aplicatie
const redis = new Redis({
  keepAlive: 10000,  // 10 secunde
  noDelay: true
});

Error: READONLY - Mod Replica

Simptom:

READONLY You can't write against a read only replica
Error: READONLY

Cauza: Te-ai conectat la o replica in loc de nodul primar.

Solutia 1 - Conecteaza-te la nodul primar:

# Gaseste nodul primar
redis-cli INFO replication
 
# Cauta:
# role:master (acesta e nodul primar)
# role:slave (aceasta e replica)
// Sentinel pentru failover automat
const redis = new Redis({
  sentinels: [
    { host: 'sentinel-1', port: 26379 },
    { host: 'sentinel-2', port: 26379 }
  ],
  name: 'mymaster'
});

Solutia 2 - Activeaza scrierile pe replica (temporar):

# Nu e recomandat pentru productie
redis-cli CONFIG SET replica-read-only no

Error: Probleme de Conexiune Cluster

Simptom:

CLUSTERDOWN The cluster is down
MOVED 12345 192.168.1.100:6379
ASK 12345 192.168.1.101:6379

Solutia 1 - Foloseste un client compatibil cu cluster:

// ioredis cluster mode
const Redis = require('ioredis');
 
const cluster = new Redis.Cluster([
  { host: '192.168.1.100', port: 6379 },
  { host: '192.168.1.101', port: 6379 },
  { host: '192.168.1.102', port: 6379 }
], {
  redisOptions: {
    password: 'cluster-password'
  },
  scaleReads: 'slave',
  natMap: {
    // Daca e in spatele NAT/proxy
    '10.0.0.1:6379': { host: 'public-host', port: 6379 }
  }
});

Solutia 2 - Verifica sanatatea clusterului:

# Informatii cluster
redis-cli CLUSTER INFO
 
# Noduri cluster
redis-cli CLUSTER NODES
 
# Repara clusterul
redis-cli --cluster fix 192.168.1.100:6379

Error: Out of Memory

Simptom:

OOM command not allowed when used memory > 'maxmemory'
-OOM: Redis is out of memory

Solutia 1 - Configureaza politica de memorie:

# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru
 
# Politici disponibile:
# noeviction - returneaza erori
# allkeys-lru - evacueaza cheile cel mai putin recent folosite
# volatile-lru - evacueaza LRU dintre cheile cu TTL
# allkeys-random - evacueaza chei aleatorii
# volatile-ttl - evacueaza cheile cu cel mai scurt TTL

Solutia 2 - Monitorizeaza utilizarea memoriei:

# Statistici memorie
redis-cli INFO memory
 
# Utilizarea memoriei pe pattern de chei
redis-cli --bigkeys
 
# Utilizarea memoriei pentru o cheie specifica
redis-cli MEMORY USAGE mykey

Solutia 3 - Curatenie:

# Sterge chei dupa pattern
redis-cli --scan --pattern "temp:*" | xargs redis-cli DEL
 
# Goleste baza de date (atentie!)
redis-cli FLUSHDB  # DB-ul curent
redis-cli FLUSHALL # Toate DB-urile

Strategie de Reconectare

const Redis = require('ioredis');
 
const redis = new Redis({
  host: 'localhost',
  port: 6379,
  retryStrategy(times) {
    if (times > 10) {
      // Opreste incercarile dupa 10 tentative
      return null;
    }
    // Backoff exponential: 50ms, 100ms, 200ms...
    const delay = Math.min(times * 50, 2000);
    return delay;
  },
  reconnectOnError(err) {
    const targetError = 'READONLY';
    if (err.message.includes(targetError)) {
      // Reconecteaza cand replica devine nod primar
      return true;
    }
    return false;
  }
});
 
redis.on('error', (error) => {
  console.error('Redis error:', error);
});
 
redis.on('connect', () => {
  console.log('Redis connected');
});
 
redis.on('reconnecting', () => {
  console.log('Redis reconnecting...');
});

Referinta Rapida: Comenzi de Depanare

| Task | Comanda | |------|---------| | Testeaza conexiunea | redis-cli PING | | Verifica informatii | redis-cli INFO | | Statistici memorie | redis-cli INFO memory | | Lista clienti | redis-cli CLIENT LIST | | Query-uri lente | redis-cli SLOWLOG GET 10 | | Latenta | redis-cli --latency | | Chei mari | redis-cli --bigkeys | | Status cluster | redis-cli CLUSTER INFO |

Performanta Redis la Scara Mare?

Deploymenturile Redis de inalta performanta necesita tuning atent. Echipa noastra ofera:

  • Design de arhitectura Redis cluster
  • Strategii de optimizare a memoriei
  • Configurare high-availability
  • Setup de monitorizare a performantei

Obtine expertiza Redis

Ai nevoie de ajutor cu conformitatea EU AI Act sau securitatea AI?

Programeaza o consultatie gratuita de 30 de minute. Fara obligatii.

Programeaza un Apel

Weekly AI Security & Automation Digest

Get the latest on AI Security, workflow automation, secure integrations, and custom platform development delivered weekly.

No spam. Unsubscribe anytime.