ホームページ  >  記事  >  データベース  >  Redis は主にどのようなリソースを消費しますか?

Redis は主にどのようなリソースを消費しますか?

(*-*)浩
(*-*)浩オリジナル
2019-06-17 14:39:484801ブラウズ

Redis のプロセス内消費には主に、独自のメモリ、オブジェクト メモリ、バッファ メモリ、メモリの断片化が含まれます。 ###########################メモリ。 Redis データはメモリに保存されるためです。一般的なリレーショナル データベースと比較して、インメモリ データベースは読み取り速度が速いですが、より多くのメモリ リソースを消費します。

オブジェクト メモリ Redis は主にどのようなリソースを消費しますか?(推奨学習: Redis ビデオ チュートリアル

)

オブジェクト メモリは Redis メモリの最大の部分であり、ユーザーのすべてを保存します。データ。 Redis のすべてのデータはキーと値のデータ型を採用しており、キーと値のペアが作成されるたびに、少なくとも 2 つの型オブジェクト (キー オブジェクトと値オブジェクト) が作成されます。メモリ消費量は、単純に sizeof(keys) sizeof(values) として理解できます。キー オブジェクトはすべて文字列です。Redis を使用する場合、メモリ消費に対するキーの影響は無視されがちです。長すぎるキーの使用は避けてください。値オブジェクトはより複雑で、主に 5 つの基本データ型 (文字列、リスト、ハッシュ、セット、順序付きセット) が含まれます。各値オブジェクト タイプは、使用規模に応じて異なるメモリを占有します。これを使用する場合は、メモリ オーバーフローを避けるために、値オブジェクトの占有率を合理的に見積もって監視する必要があります。

バッファ メモリバッファ メモリには主に、クライアント バッファ、コピー バックログ バッファ、および AOF バッファが含まれます。

クライアント バッファリングとは、Redis サーバーへのすべての TCP 接続の入力および出力バッファリングを指します。入出力バッファの制御はできません、最大容量は1Gです、それを超えると接続が切断されます。入力バッファリングはパラメータ client-output-buffer-limit:

1 によって制御されます。通常のクライアント: レプリケートされたクライアントとサブスクライブされたクライアントを除くすべての接続の場合、Redis のデフォルト構成は次のとおりです: client-output-buffer-limitnormal 0 0 0, Redis は一般クライアントの出力バッファを制限しません。通常、一般クライアントのメモリ消費量は無視できますが、接続速度の遅いクライアントが多数接続した場合、この部分のメモリ消費量は無視できません。 maxclients を制限します。 Monitor コマンドなど、大量のデータを出力し、データを時間内にクライアントにプッシュできないコマンドだけを使用しないように注意してください。これにより、Redis サーバーのメモリが突然急増する可能性があります。

スレーブ クライアント: マスター ノードは、コマンド レプリケーションのために各スレーブ ノードに個別の接続を確立します。デフォルトの構成は次のとおりです: client-output-buffer-limit スレーブ 256mb 64mb 60。マスター ノードとスレーブ ノード間のネットワーク遅延が大きい場合、またはマスター ノードが多数のスレーブ ノードをマウントしている場合、この部分のメモリ消費が大きな部分を占めます。マスター ノードがマウントするスレーブ ノードは 2 つ以下にすることをお勧めします。 、マスター ノードとスレーブ ノードは、劣悪な場所に展開しないでください。異なるコンピューター ルームなど、特定のネットワーク環境では、レプリケーション クライアントの接続が遅いことによって引き起こされるオーバーフローを防ぎます。

サブスクリプション クライアント: パブリッシュおよびサブスクライブ機能を使用する場合、接続クライアントは別の出力バッファを使用します。デフォルトの構成は次のとおりです: client-output-buffer-limit pubsub 32mb 8mb 60. サブスクリプションのメッセージ生成時サービスが高速である 消費速度では、出力バッファによってバックログが生成され、出力バッファ領域がオーバーフローします。

レプリケーション バックログ バッファ: Redis は、バージョン 2.8 以降、部分レプリケーション機能を実装するために再利用可能な固定サイズ バッファを提供します。これは repl-backlog-size パラメータに従って制御され、デフォルトは 1MB です。コピー バックログ バッファはマスター ノード全体で 1 つだけあり、すべてのスレーブ ノードがこのバッファを共有するため、100MB など、より大きなバッファ領域を設定できます。

AOF バッファ: スペースのこの部分は、Redis の再書き込み中に最近の書き込みコマンドを保存するために使用されます。

3. メモリの断片化

Redis のデフォルトのメモリ アロケータは jemalloc を使用し、オプションのアロケータには glibc および tcmalloc が含まれます。メモリの管理と再利用を改善するために、メモリ アロケータは通常、固定範囲のメモリ ブロックを使用してメモリを割り当てます。

次のシナリオでは、メモリ断片化の問題が発生する傾向があります。

既存のキーに対して追加、setrange、その他の更新操作を頻繁に実行するなど、頻繁な更新操作。

期限切れのキーが大量に削除されます。キー オブジェクトの期限が切れて削除されると、解放された領域を十分に利用できなくなり、断片化率が増加します。

Redis 関連の技術記事の詳細については、

「Redis データベース チュートリアルの使用方法の概要」

列にアクセスして学習してください。

以上がRedis は主にどのようなリソースを消費しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。