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.