Redis を上手に使用するには、API の使用方法を知るだけでなく、Redis のブロックを防ぐ方法、ブロックを確認および分析する方法も知る必要があります。今日は、Redis のブロックを検出する方法、つまり、遅いクエリを通じてブロックされたコマンドを見つける方法について説明しましょう。
Mysql と同様、Redis にも低速クエリ レコードがあります。コマンドの実行時間が設定値を超えた場合、コマンドはスロークエリリストに記録されます。クエリが遅いと、プログラムを改善できます。 Redis がブロックされるのを防ぎます。
構成
スロー クエリには 2 つの構成パラメータがあります:
slowlog-log- thrower-than
slowlog-max-len
slowlog-log-slower-than は、しきい値をマイクロ秒単位で設定するために使用されます。値は 10000、つまり 10 ミリ秒です。
値が 0 未満に設定されている場合、コマンドは記録されません。
#値が 0 に等しい場合、すべてのコマンドが記録されます。が記録されます。
slowlog-max-len はレコードの最大数を示します。デフォルトは 128 です。たとえば、11 番目の低速クエリが挿入されると、10 に設定されます。列の先頭は列から外れます。
これら 2 つの構成は動的構成もサポートしています。プロジェクトが開始されたばかりで、アクセス数がそれほど多くない場合は、slow-log-slower-than の値を大きく設定できます。訪問数が増えると、その値をより小さい値に変更する必要がある場合があります。ただし、redis サービスを停止したくないので、構成を動的に変更できます。
127.0.0.1:6379> config set slowlog-log-slower-than 1000 OK # 在线修改配置 127.0.0.1:6379> config rewrite OK # 将修改的配置持久化到配置文件中
運用とメンテナンスの提案: アクセス数が多い場合は、通常、slowlog-log-slower-than を 1000 以下に設定することをお勧めします。この値が 1000 の場合、redis は最大 1000 の同時 をサポートできることを意味します。
スロー クエリ ビュー
redis のスロー クエリ ビューは、mysql のビューとは異なり、redis ビューには特別なコマンドがあります。
スロー クエリ ログの取得
slowlog get [n]、n はエントリ数を表し、デフォルトは 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) "" ……
最初のパラメータはログ ID 番号です。
2 番目のパラメータは発生タイムスタンプです。
3 番目のパラメータは、ログ ID 番号です。はコマンドの実行時間 (マイクロ秒)
最後のものはコマンドとパラメータです。
#遅いクエリの長さを取得する
slowlog len127.0.0.1:6379> slowlog len (integer) 128
スロー クエリ リストをクリアします
127.0.0.1:6379> slowlog reset OK
スロー クエリ ログを mysql に保存します
redis の長さは制限されているため、遅いクエリが多数ある場合、損失が発生します。定期的に Redis にアクセスしてスロークエリレコードリストを取得し、それを mysql に永続化することで、このような事態が起こらないようにすることができます。 疑似コードは次のとおりです: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); }上記のコードは、MYSQL への遅いクエリの永続化を実現できます。
以上がRedis の運用とメンテナンスの低速クエリ ログの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。