Pruebas de rendimiento en Redis mediante redis-benchmark

La herramienta oficial redis-benchmark permite evaluar el desempeño de una instancia de Redis simulando cargas de trabajo bajo diversos escenarios y tipos de datos. Este componente es esencial para establecer líneas base de hardware y ajustar la configuración del servidor.

1. Parámetros principales de configuración

Al ejecutar el comando, se pueden definir múltiples variables para ajustar la intensidad y el comportamiento de la prueba:

-h <hostname>      Dirección IP del servidor (por defecto 127.0.0.1).
-p <port>          Puerto del servicio Redis (por defecto 6379).
-a <password>      Contraseña para servidores con autenticación activa.
-c <clients>       Número de conexiones simultáneas (por defecto 50).
-n <requests>      Cantidad total de peticiones a realizar (por defecto 100,000).
-d <size>          Tamaño en bytes del valor para operaciones SET/GET (por defecto 3).
-q                 Modo silencioso: solo muestra las peticiones por segundo.
-r <keyspacelen>   Usa llaves aleatorias para evitar colisiones constantes, aplicando un sufijo numérico.
-P <numreq>        Habilita el uso de Pipelining para enviar N peticiones por paquete.
-t <tests>         Lista separada por comas de comandos específicos a probar (ej. SET,GET,INCR).
-k <boolean>       Mantener la conexión activa (1) o reconectar en cada petición (0).
--cluster          Activa el modo de pruebas para entornos de Redis Cluster.
--threads <num>    Habilita el uso de múltiples hilos en la herramienta de benchmark.

2. Escenarios de prueba predeterminados

Si no se especifica el parámetro -t, la herramienta ejecutará una suite completa que incluye las siguientes operaciones:

  • PING_INLINE / PING_MBULK: Mide la latencia básica de red y respuesta del servidor.
  • SET / GET: Pruebas estándar de escritura y lectura de cadenas de texto.
  • INCR: Incremento atómico de valores numéricos.
  • LPUSH / RPUSH / LPOP / RPOP: Rendimiento de estructuras de lista en ambos extremos.
  • SADD / SPOP: Operaciones con conjuntos (Sets).
  • HSET: Inserción en tablas hash.
  • ZADD / ZPOPMIN: Pruebas con conjuntos ordenados (Sorted Sets).
  • LRANGE_100 a LRANGE_600: Recuperación de rangos de elementos en listas.
  • MSET: Escritura múltiple en una sola operación.

3. Ejemplos prácticos de ejecución

Para realizar una prueba básica de 500,000 peticiones con 100 clientes concurrentes en un servidor local:

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 500000

Si se desea evaluar solo comandos específicos (SET y LPUSH) con un tamaño de datos de 100 bytes y de forma resumida:

redis-benchmark -t set,lpush -d 100 -q

Para simular una carga real con 1 millón de llaves aleatorias y evitar que Redis acceda siempre al mismo espacio de memoria:

redis-benchmark -t set,get -r 1000000 -n 1000000 -c 200

4. Análisis del reporte de resultados

Al finalizar la ejecución, el sistema genera un desglose estadístico. Tomando como ejemplo una prueba de comandos SET:

====== SET ======
  1000000 requests completed in 12.40 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

Latency by percentile distribution:
50.000% <= 1.123 milliseconds
95.000% <= 2.451 milliseconds
99.000% <= 3.890 milliseconds
100.000% <= 10.211 milliseconds

Summary:
  throughput summary: 80645.16 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        1.240     0.512     1.123     2.451     3.890    10.211

Los puntos clave a observar son:

  • Throughput: Indica cuántas operaciones por segundo es capaz de procesar la instancia.
  • Percentiles: El valor p99 indica que el 99% de las peticiones se resolvieron en un tiempo igual o inferior al mostrado, lo cual es crítico para medir la consistencia del servicio.
  • Min/Max Latency: Ayuda a identificar picos de latencia que podrían deberse a procesos de limpieza de memoria (GC) o persistencia en disco.

5. Optimización con Pipelining

Redis permite agrupar comandos para minimizar el impacto del RTT (Round Trip Time) de la red. Al usar el parámetro -P, se puede observar un incremento drástico en el rendimiento bruto, ya que se procesan múltiples instrucciones en un solo ciclo de red.

# Prueba con pipeline de 16 comandos simultáneos
redis-benchmark -c 50 -n 1000000 -t get -P 16 -q

Este modo es útil para simular aplicaciones que ya utilizan técnicas de procesamiento por lotes para maximizar la eficiencia.

Etiquetas: Redis Benchmarking performance NoSQL Database-Optimization

Publicado el 10-25 04:13