table des matières
1. Principe de fonctionnement de Redis
Deux, accord d'exécution redis
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
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
- envoyer la commande
- File d'attente de commandes
- Exécution de la commande
- 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