Teste de Desempenho do Redis

O teste de desempenho é uma forma importante de avaliar o desempenho do Redis. Esta lição aborda o uso do redis-benchmark para testes.

Introdução ao redis-benchmark

redis-benchmark é a ferramenta de teste de desempenho integrada do Redis que pode testar várias operações do Redis.

Uso Básico

BASH
# Teste básico (padrão 100000 requisições, 50 clientes concorrentes)
redis-benchmark

# Especificar host e porta
redis-benchmark -h 127.0.0.1 -p 6379

# Especificar contagem de requisições e concorrência
redis-benchmark -n 100000 -c 100

Parâmetros Comuns

Parâmetro Descrição Padrão
-h Endereço do host 127.0.0.1
-p Porta 6379
-n Número de requisições 100000
-c Número de clientes paralelos 50
-d Tamanho dos dados (bytes) 3
-k Usar keepalive 1
-q Saída silenciosa false
-t Comandos a testar todos
-P Tamanho do pipeline 1

Interpretando Resultados de Teste

Exemplo de Saída

TEXT
====== SET ======
  100000 requisições concluídas em 1.23 segundos
  50 clientes paralelos
  3 bytes de carga útil
  keep alive: 1

99.00% <= 1 milissegundos
99.80% <= 2 milissegundos
100.00% <= 3 milissegundos
81300.81 requisições por segundo

====== GET ======
  100000 requisições concluídas em 1.15 segundos
  50 clientes paralelos
  3 bytes de carga útil
  keep alive: 1

99.00% <= 1 milissegundos
99.90% <= 2 milissegundos
100.00% <= 3 milissegundos
86956.52 requisições por segundo
▶ Experimente

Métricas Principais

Métrica Descrição
requests per second QPS (Queries Per Second)
99.00% <= 1 milliseconds 99% das requisições concluídas em 1 ms
parallel clients Número de clientes concorrentes
payload Tamanho dos dados

Cenários Comuns de Teste

1. Testando Operações SET

BASH
# Testar operação SET
redis-benchmark -t set -n 100000 -c 50

# Testar SET com pipeline
redis-benchmark -t set -n 100000 -c 50 -P 10

2. Testando Operações GET

BASH
# Testar operação GET
redis-benchmark -t get -n 100000 -c 50

3. Testando Comandos Específicos

BASH
# Testar comandos específicos
redis-benchmark -t set,get,incr,lpush,rpush,lpop,rpop,sadd,hset -n 100000 -c 50

4. Testando Pipeline

BASH
# Usar pipeline (enviar comandos em lote)
redis-benchmark -t set -n 100000 -c 50 -P 10

# Comparar desempenho com e sem pipeline
redis-benchmark -t set -n 100000 -c 50 -P 1
redis-benchmark -t set -n 100000 -c 50 -P 10
redis-benchmark -t set -n 100000 -c 50 -P 100

5. Testando Dados Grandes

BASH
# Testar com tamanho de dados grande
redis-benchmark -t set -n 100000 -c 50 -d 1024

# Testar diferentes tamanhos de dados
redis-benchmark -t set -n 100000 -c 50 -d 64
redis-benchmark -t set -n 100000 -c 50 -d 256
redis-benchmark -t set -n 100000 -c 50 -d 1024

Dicas de Otimização de Desempenho

1. Usar Pipeline

Pipelining pode melhorar significativamente o desempenho reduzindo as viagens de ida e volta na rede:

BASH
# Sem pipeline
redis-benchmark -t set -n 100000 -c 50 -P 1
# Resultado: ~80000 QPS

# Com pipeline
redis-benchmark -t set -n 100000 -c 50 -P 10
# Resultado: ~200000 QPS

2. Usar Comandos em Lote

Comandos em lote são mais eficientes que comandos individuais:

BASH
# Comandos individuais
redis-benchmark -t set -n 100000 -c 50
# Resultado: ~80000 QPS

# Comandos em lote (MSET)
redis-benchmark -t mset -n 100000 -c 50
# Resultado: ~150000 QPS

3. Ajustar Configuração

BASH
# Ajustar memória máxima
redis-cli CONFIG SET maxmemory 256mb

# Ajustar conexões máximas de cliente
redis-cli CONFIG SET maxclients 10000

# Desabilitar persistência (para teste)
redis-cli CONFIG SET save ""
redis-cli CONFIG SET appendonly no

Referência de Desempenho Base

Desempenho de Instância Única

Operação QPS (sem pipeline) QPS (pipeline P=10)
SET 80.000 200.000
GET 90.000 250.000
INCR 85.000 220.000
LPUSH 80.000 200.000
LRANGE (100) 30.000 80.000
💡 Observação: O desempenho real depende do hardware, ambiente de rede, tamanho dos dados e outros fatores.

Scripts de Teste Personalizados

Usando Scripts Lua

BASH
# Criar um script de teste
cat > test.lua << 'EOF'
for i = 1, 100000 do
  redis.call('SET', 'key:' .. i, 'value:' .. i)
end
EOF

# Executar o teste
redis-cli --eval test.lua

Usando Python

PYTHON
import redis
import time

r = redis.Redis(host='localhost', port=6379)

# Testar operação SET
inicio = time.time()
for i in range(100000):
    r.set(f'key:{i}', f'value:{i}')
fim = time.time()

print(f'SET: {100000 / (fim - inicio):.0f} QPS')

❓ Perguntas Frequentes

P Os resultados do redis-benchmark diferem da produção?
R Sim. redis-benchmark executa em um ambiente ideal. O desempenho real de produção é afetado por rede, concorrência, tamanho dos dados, etc.
P Como testo o desempenho do cluster Redis?
R Use redis-benchmark com parâmetros de nó específicos, ou use ferramentas de teste de cluster dedicadas.
P Qual tamanho de pipeline é recomendado?
R Tipicamente 10-100, dependendo do ambiente de rede e tamanho dos dados.

📖 Resumo

📝 Atividades

  1. Teste básico: Use redis-benchmark para testar operações SET e GET
  2. Teste de pipeline: Compare desempenho com e sem pipelining
  3. Teste de otimização: Tente diferentes parâmetros de configuração e observe mudanças no desempenho

Próxima Lição

Na próxima lição, nós aprenderemos sobre Pipelining do Redis, entendendo os princípios e o uso do pipelining.

100%