Maison > Article > base de données > Journal des requêtes lentes d'exploitation et de maintenance Redis
Pour bien utiliser Redis, vous devez non seulement savoir comment utiliser l'API, mais aussi savoir comment empêcher Redis de se bloquer et vérifier et analyser le blocage. Aujourd'hui, parlons de la façon de découvrir le blocage de Redis : trouver les commandes bloquées via des requêtes lentes.
Comme Mysql, Redis a également des enregistrements de requêtes lents. Lorsque le temps d'exécution de la commande dépasse la valeur définie, la commande sera enregistrée dans la liste des requêtes lentes. Avec des requêtes lentes, nous pouvons améliorer nos programmes. Empêchez Redis de se bloquer.
Configuration
Il existe deux paramètres de configuration pour les requêtes lentes :
slowlog-log- plus lent que
slowlog-max-len
slowlog-log-slower-than est utilisé pour définir un seuil en microsecondes. la valeur est 10 000, soit 10 millisecondes.
Lorsque la valeur est inférieure à 0, aucune commande ne sera enregistrée
Lorsque la valeur est égale à 0, toutes les commandes; sera enregistré.
slowlog-max-len indique le nombre maximum d'enregistrements, la valeur par défaut est 128, par exemple, définissez-la sur 10, lorsque la 11ème requête lente est insérée, puis les données à la la tête de file d'attente sera hors de la file.
Ces deux configurations prennent également en charge la configuration dynamique. Lorsque le projet vient de démarrer et que le nombre de visites n'est pas très important, la valeur de slow-log-slower-than peut être définie plus grande. À mesure que le nombre de visites augmente, vous devrez peut-être modifier sa valeur pour une valeur plus petite. Mais nous ne voulons pas arrêter le service Redis, nous pouvons donc modifier dynamiquement la configuration.
127.0.0.1:6379> config set slowlog-log-slower-than 1000 OK # 在线修改配置 127.0.0.1:6379> config rewrite OK # 将修改的配置持久化到配置文件中
Suggestions de fonctionnement et de maintenance : lorsque le nombre de visites est important, nous recommandons généralement de régler slowlog-log-slower-than à 1 000 ou moins. Lorsque cette valeur est de 1 000, cela signifie que Redis peut prendre en charge jusqu'à 1 000 accès simultanés.
Vue des requêtes lentes
La vue des requêtes lentes de Redis est différente de celle de MySQL. Il existe des commandes spéciales pour la vue Redis.
Obtenir le journal des requêtes lentes
slowlog get [n], n représente le nombre d'entrées, la valeur par défaut est 10
127.0.0.1:6379> slowlog get 1) 1) (integer) 18004 2) (integer) 1589424642 3) (integer) 50 4) 1) "slowlog" 2) "get" 5) "127.0.0.1:58364" 6) "" 2) 1) (integer) 18003 2) (integer) 1589423805 3) (integer) 47 4) 1) "slowlog" 2) "get" 5) "127.0.0.1:58364" 6) "" ……
Le premier paramètre est le numéro d'identification du journal
Le deuxième paramètre est l'horodatage de l'occurrence
Le troisième paramètre est la commande Temps d'exécution (subtil)
Le dernier est la commande et les paramètres.
Obtenir la longueur de la requête lente
slowlog len
127.0.0.1:6379> slowlog len (integer) 128
Effacer la liste des requêtes lentes
127.0.0.1:6379> slowlog reset OK
Persistance du journal des requêtes lentes vers mysql
En raison de la longueur de redis est limité, donc lorsqu'il y a beaucoup de requêtes lentes, il y aura une perte. Nous pouvons régulièrement accéder à Redis pour supprimer la liste des enregistrements de requêtes lentes et la conserver dans MySQL pour éviter que cela ne se produise.
Le pseudo-code est le suivant :
while (true) { $slowlen = $redis->slowlog('len'); $slowlogs = $redis->slowlog('get',$slowlen); $insSql = "INSERT INTO slowlog(exec_time,run_time,command) VALUES"; if (is_array($slowlogs) && count($slowlogs)) { foreach ($slowlogs as $slowlog) { $execTime = $slowlog[2]; $runTime = $slowlog[1]; $command = implode(' ', $slowlog[3]); $insSql .= "('$execTime', '$runTime','$command'),"; } $flag = mysqli_query($mysqli, substr($insSql, 0, -1)); if ($flag) { $redis->slowlog('reset'); } } unsleep(10000); }
Le code ci-dessus peut réaliser la persistance de requêtes lentes dans MYSQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!