おそらく多くの開発者は、Redis は非常にシンプルであり、いくつかの API をマスターするだけで十分だと考えています。実際、使い方を誤ると様々な問題が発生します。今日は、Redis のバッファリングについて話しましょう。 Redis は、入力バッファーと出力バッファーをクライアントに提供し、監視バッファーを表示するための対応する API を提供します。
入力バッファ
Redis はクライアントごとに入力バッファを提供し、クライアントから送信されたコマンドを保存し、Redis が入力バッファからコマンドを抽出して実行します。
Redis がクライアントに提供する入力バッファ サイズは制限されており、1G のメモリを超えることはできません。それを超えると、Redis はクライアントを閉じます。
バッファオーバーフローの危険性
各クライアントの最大入力バッファは1Gを超えることができません。それを超えると、クライアントが閉じられ、アプリケーションの問題が発生します。
maxmory が 8G に設定されている場合、Redis が 4G データを保存し、すべてのクライアントの入力バッファーの合計サイズが 5G である場合、入力バッファーのサイズはデータ損失とキー値を引き起こす可能性があります。 OOM やその他の状況の排除。
バッファオーバーフローの原因は、redisの処理速度がバッファの入力速度に追いつかないことです。一般的な状況は、入力バッファーに多数の bigkey が含まれているか、redis がブロックされている場合です。
モニタリング
入力バッファをモニタリングするには 2 つの方法があります
1 つ目の方法は、client list コマンドを使用して、現在接続されているすべてのクライアント情報を表示することです
2 つ目の方法は、info Clients コマンドを使用することです全体的な情報を表示します。
127.0.0.1:6379> client list id=113430 addr=127.0.0.1:57244 fd=7 name= age=3115 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client id=113432 addr=127.0.0.1:57250 fd=9 name= age=3099 idle=342 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=set ……
このうち、入力バッファに関連するのは qbuf と qbuf-free で、それぞれ入力バッファのサイズと残りの入力バッファのサイズを表します。
127.0.0.1:6379> info clients # Clients connected_clients:4 client_recent_max_input_buffer:2 client_recent_max_output_buffer:0 blocked_clients:0
client_recent_max_input_buffer は、最大入力バッファのサイズを示します。
これら 2 つの方法にはそれぞれ長所と短所があります:
client list は各クライアントの状況を正確に監視できますが、実行速度が遅く、redis ブロックを引き起こす可能性があります。
info クライアントは高速に実行されますが、分析されたデータは比較的単純であり、各クライアントに対して正確であるとは言えず、クライアントの合計入力バッファ サイズは表示できず、最大のもののみが表示されます。
出力バッファ
Redis も出力バッファを提供します。入力バッファと同様に、出力バッファは maxmory によって制御されません。
ただし、入力バッファとは異なり、出力バッファは構成ファイルを通じて制限できます。
client-output-buffer-limit typehardlimitsoftlimitsecords
typeはクライアントのタイプを表します
hardlimit出力バッファの最大値、それを超えた場合はすぐに閉じられます
sortlimit と secords sortlimit を超えると、レコードの秒数を制限した後、クライアントが閉じられます。
Redis のデフォルト設定は次のとおりです:
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
Monitoring
出力バッファ監視方法と同じように、クライアントリストと情報クライアントも使用されます。
クライアント リストの出力バッファリングに関連するのは、obl、oll、および omem です。主に、出力バッファのサイズを表す omem に注目します。 info client の
client_recent_max_output_buffer は、最大出力バッファ サイズを示します。
それらの長所と短所は前述したものと同じなので、ここでは詳しく説明しません。
さらに、クライアント接続を閉じる別のコマンドを次に示します。
client kill ip:port
クライアントに異常が見つかった場合、このコマンドを使用して異常な接続を切断できます。
以上がRedis の操作およびメンテナンスのバッファーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。