Princípio de execução de quatro redis do Redis que você não conhece

índice

1. Princípio operacional do Redis

 Dois, acordo de execução de redis 

Protocolo RESP

Simular protocolo resp para redis write

Três, teste de desempenho redis

Análise de consulta lenta do Redis

Configuração de valor extremo da consulta lenta do Redis

Princípio de consulta lenta

Comando de consulta lento


1. Princípio operacional do Redis

O servidor redis processa comandos em um único thread, mas o nível de E / S fornece serviços a vários clientes simultaneamente, e a conversão de simultaneidade em um único thread interno é implementada por meio de uma estrutura de multiplexação. Os quatro processos a seguir, desde o envio do comando redis ao gerente executivo

  1. enviar comando
  2. Fila de comando
  3. Execução de comando
  4. Resultado devolvido

 Dois, acordo de execução de redis 

Capture a solicitação de redis e visualize o conteúdo capturado

1. Execute o comando de captura

2. Veja o conteúdo do pacote capturado 

O protocolo redis está localizado acima da camada TCP, ou seja, o cliente e a instância redis mantêm uma conexão duplex, e a troca é serializada de dados de protocolo

Protocolo RESP

O servidor e o cliente Redis se comunicam por meio do protocolo RESP (REdis Serialization Protocol).

A camada inferior do RESP adota o modo de conexão TCP, que transmite dados por meio do tcp e, em seguida, analisa as informações correspondentes de acordo com as regras de análise para completar a interação.

Podemos testar, primeiro execute um monitor serverSocket 6379 para receber as informações de solicitação do cliente redis. A implementação é a seguinte

1. Estabeleça uma conexão de soquete e monitore a porta 6379 para receber solicitações e enviar

/**
 * /**
 * <p>模拟redis</p>
 *
 * @author DK
 * @version V1.0
 */
public class SimulatedRedis {

    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(6379);
        Socket rec = server.accept();
        byte[] result = new byte[2048];
        rec.getInputStream().read(result);
        System.out.println(new String(result));
    }
}

2. Use o cliente jedis para solicitar a porta local 6379

/**
 * /**
 * <p>模拟redis</p>
 *
 * @author DK 
 * @version V1.0
 */
public class SimulatedRedisClient {

    public static void main(String[] args) throws IOException {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.set("user:2", "9999");
        jedis.close();
    }
} 

 Imprimir

Constatou que o conteúdo é consistente com o pacote capturado

O significado de cada campo é:

* 3 significa que existem vários conjuntos de dados 

$ 3 significa que o comprimento definido é 3

Definir comando

$ 6 significa que o comprimento da chave é 6

Usuário: 2 chaves

$ 1 significa que o comprimento do valor é 1

 2 valor

As principais características são as seguintes: A partir dos exemplos acima, descobriu-se que os benefícios de usar o protocolo resp para redis são fáceis de implementar, rápido de analisar, legível por humanos e transmitidos na camada TCP, o que pode reduzir a transmissão desnecessária de informações

Simular protocolo resp para redis write

/**
 * /**
 * <p>模拟redis</p>
 *
 * @author DK 
 * @version V1.0
 */
public class RespRedis {

    public static void main(String[] args) {
        SocketAddress addr = new InetSocketAddress("10.1.253.188", 6379);
        Socket sk = new Socket();
        try {
            sk.connect(addr);
            OutputStream out = sk.getOutputStream();
            StringBuffer sb = new StringBuffer();
            sb.append("*3\r\n");
            sb.append("$3\r\n");
            sb.append("SET\r\n");
            sb.append("$6\r\n");
            sb.append("user:0\r\n");
            sb.append("$5\r\n");
            sb.append("11111\r\n");
            System.out.println(sb.toString());
            byte[] b = sb.toString().getBytes();
            out.write(b);
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Três, teste de desempenho redis

Análise de consulta lenta do Redis

Igual ao mysql: quando o tempo de execução excede o valor máximo, o comando demorado será registrado

Ciclo de vida do comando redis: Enviar retornos de execução enfileirados, apenas estatísticas de consulta lentas de 3 Ge executam as etapas de tempo

Configuração de valor extremo da consulta lenta do Redis

Geralmente, existem duas maneiras, o tempo padrão é 10 ms

1. Método de comando

configuração definida lento-log-log-mais lento-que 10000 // 10 毫秒

Depois de usar o conjunto de configurações, se você quiser manter a configuração para redis.conf, execute config rewrite

2. Modificação do arquivo de configuração

Modificação do Redis.conf: encontre slowlog-log-slower-than 10000, modifique e salve

Nota: slowlog-log-slower-than = 0 registra todos os comandos -1 comandos não registram

Princípio de consulta lenta

Os registros de consulta lenta também são armazenados na fila, o número máximo de registros armazenados em slow-max-len,

Por exemplo, se você definir slow-max-len = 10, quando o 11º comando de consulta lenta é inserido, o primeiro comando na fila

Será listado, e a 11ª entrada será listada na fila de consulta lenta, que pode ser definida dinamicamente pelo conjunto de configurações,

Você também pode modificar redis.conf para completar a configuração

Comando de consulta lento

Obtenha o comando de consulta lenta na fila: slowlog get

Obtenha o comprimento atual da lista de consulta lenta: slowlog len // Há apenas 1 consulta lenta acima, retornar 1;

1) , para limpar a lista de consulta lenta (redefinir): redefinir slowlog // então verificar len de slowlog retorna 0 vazio neste momento;

2 ) , para recomendar configurações on-line slow-max-len: as linhas podem aumentar o valor de slow-max-len, o armazenamento de registros longo consulta lenta truncada quando o comando redis fará, não ocupará muita memória, pode ser definido online Acima de 1000

3 ) , para recomendação on-line lento-log-mais lento-do que a configuração: O padrão é 10 ms, é ajustado de acordo com a quantidade de redis de simultaneidade, recomendações para alta simultaneidade de 1 milissegundo

4 ) . A consulta lenta é uma fila first-in-first-out. Os registros de log de acesso são perdidos ao retirar da fila, e slowlog get precisa ser executado periodicamente para armazenar os resultados em outros dispositivos (como mysql)

1 、redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 10000

     100 conexões simultâneas, 10.000 solicitações, verifique o desempenho do servidor

 

Acho que você gosta

Origin blog.csdn.net/b379685397/article/details/108637784
Recomendado
Clasificación