Le principe d'exécution Redis Four-Redis que vous ne connaissez pas

table des matières

1. Principe de fonctionnement de Redis

 Deux, accord d'exécution redis 

Protocole REEE

Simuler le protocole resp pour l'écriture redis

Troisièmement, test de performance Redis

Analyse de requête lente Redis

Paramètre de valeur extrême de requête lente Redis

Principe de requête lente

Commande de requête lente


1. Principe de fonctionnement de Redis

Le serveur redis traite les commandes dans un seul thread, mais le niveau d'E / S fournit des services à plusieurs clients simultanément, et la conversion de la concurrence en un seul thread interne est implémentée via une infrastructure de multiplexage. Les quatre processus suivants depuis l'envoi de la commande redis au directeur exécutif

  1. envoyer la commande
  2. File d'attente de commandes
  3. Exécution de la commande
  4. Résultat renvoyé

 Deux, accord d'exécution redis 

Capturez la requête redis et affichez le contenu capturé

1. Exécutez la commande de capture

2. Afficher le contenu du paquet capturé 

Le protocole redis est situé au-dessus de la couche TCP, c'est-à-dire que le client et l'instance redis maintiennent une connexion duplex, et l'échange est des données de protocole sérialisées

Protocole REEE

Le serveur et le client Redis communiquent via le protocole RESP (REdis Serialization Protocol).

La couche inférieure du RESP adopte le mode de connexion TCP, qui transmet les données via TCP, puis analyse les informations correspondantes selon les règles d'analyse pour terminer l'interaction.

Nous pouvons tester, d'abord exécuter un moniteur serverSocket 6379 pour recevoir les informations de demande du client redis. La mise en œuvre est la suivante

1. Établissez une connexion socket et surveillez le port 6379 pour recevoir les demandes et sortir

/**
 * /**
 * <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. Utilisez le client jedis pour demander le port 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();
    }
} 

 Imprimer

Trouvé que le contenu est cohérent avec le paquet capturé

La signification de chaque champ est:

* 3 signifie qu'il existe plusieurs ensembles de données 

3 $ signifie que la longueur définie est de 3

Définir la commande

6 $ signifie que la longueur de la clé est de 6

Utilisateur: 2 clés

1 $ signifie que la longueur de la valeur est 1

 2 valeur

Les principales caractéristiques sont les suivantes: à partir des exemples ci-dessus, il s'avère que les avantages de l'utilisation du protocole resp pour redis sont faciles à mettre en œuvre, rapides à analyser, lisibles par l'homme et transmis à la couche TCP, ce qui peut réduire la transmission d'informations inutiles

Simuler le protocole resp pour l'écriture redis

/**
 * /**
 * <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();
        }
    }
}

Troisièmement, test de performance Redis

Analyse de requête lente Redis

Identique à mysql: lorsque le temps d'exécution dépasse la valeur maximale, la commande chronophage sera enregistrée

cycle de vie de la commande redis: envoyer les retours d'exécution en file d'attente, seules les statistiques de requête lentes de 3 Ge effectuent les étapes de temps

Paramètre de valeur extrême de requête lente Redis

Il y a généralement deux façons, le temps par défaut est de 10 ms

1. Méthode de commande

config set slowlog-log-slow-than 10000 // 10 毫秒

Après avoir utilisé le jeu de configuration, si vous souhaitez conserver la configuration dans redis.conf, exécutez la réécriture de la configuration

2. Modification du fichier de configuration

Modification de Redis.conf: trouver slowlog-log-slow-than-10000, modifier et sauvegarder

Remarque: slowlog-log-slower-than = 0 enregistre toutes les commandes -1 commandes n'enregistre pas

Principe de requête lente

Les enregistrements de requêtes lentes sont également stockés dans la file d'attente, le nombre maximum d'enregistrements stockés dans slow-max-len,

Par exemple, si vous définissez slow-max-len = 10, lorsque la 11e commande de requête lente est insérée, la première commande de la file d'attente

Sera répertorié, et la 11e entrée sera répertoriée dans la file d'attente de requêtes lentes, qui peut être définie dynamiquement par le jeu de configuration,

Vous pouvez également modifier redis.conf pour terminer la configuration

Commande de requête lente

Obtenez la commande de requête lente dans la file d'attente: slowlog get

Récupère la longueur actuelle de la liste des requêtes lentes: slowlog len // Il n'y a qu'une seule requête lente ci-dessus, return 1;

1) , pour nettoyer la liste des requêtes lentes (reset): slowlog reset // puis check slowlog len renvoie 0 vide à ce moment;

2 ) , pour recommander des configurations en ligne slow-max-len: les lignes peuvent augmenter la valeur de slow-max-len, la requête longue et lente du magasin de disques tronquée lorsque la commande redis fera l'affaire, ne prendra pas beaucoup de mémoire, peut être définie en ligne Au-dessus de 1000

3 ) , pour la configuration en ligne slowlog-log-slow-than-than: la valeur par défaut est de 10 ms, est ajustée en fonction de la quantité de concurrence redis, recommandations pour une concurrence élevée de 1 milliseconde

4 ) . La requête lente est une file d'attente du premier entré, premier sorti. Les enregistrements du journal d'accès sont perdus lors du retrait de la file d'attente, et slowlog get doit être exécuté périodiquement pour stocker les résultats sur d'autres appareils (comme mysql)

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

     100 connexions simultanées, 10000 demandes, vérifier les performances du serveur

 

Je suppose que tu aimes

Origine blog.csdn.net/b379685397/article/details/108637784
conseillé
Classement