Redisのメモリモデルのアプリケーションと解釈読書エッセイ

記事ソース:

Redisのメモリモデルのアプリケーションと解釈  https://dbaplus.cn/news-158-2127-1.html

 

最初の部分:Redisのメモリ統計情報

エッセイ:この退屈なビット部分、接続はこの部分でおなじみのRedisに実装され、オペレーティング・システムのより深い部分がより容易に理解されるであろうに属する、解釈結果フィールドのRedisのはRedisの-CLI infoコマンドを経由してあります。

この私の助けのために

1、Redisのプロセスは、メモリとメモリの断片化を必要としますが、仮想メモリのRedisが残っている自分自身を実行します

2は、mem_fragmentation_ratioは、メモリ不足のようなメモリの断片化の比率、mem_fragmentation_ratio <1、Redisのは、説明した仮想メモリ、タイムリーな調査を表し、メモリRedisのサーバーを増やす、Redisのノードを増やすことができ、タイムリーな治療の必要性、アプリケーションの最適化

3、libcの、jemallocとtcmallocにメモリアロケータでのRedis、デフォルトjemallocあります

この部分は、多くの場合、日常の開発で使用されていない、いくつかの識字問題Redisのない限り、この章の調査と組み合わせることができます。

 

第二部:Redisのメモリ分割

エッセイ:Redisの章も助け最初の部分を理解するために、簡潔な、メモリ部門を説明し、また、次のことを理解するために非常に重要でなければなりません

この私の助けのために

メモリ、プロセス自体を実行するのに必要なメモリ、バッファメモリとメモリの断片に1、Redisのメモリデータ

2、Redisのは、このようにしてキー値を使用してデータを格納するデータベース、同様のハッシュマップ」、文字列、ハッシュリストを含む格納されたデータタイプ、設定および順序集合であります

3、メモリの断片化が原因の変化に頻繁にこのによって生成メモリ解放を処理Redisのデータにつながる、私はMySQLのデータはインデックスが大幅に小さく類推しませんでした削除拾うよ、それが不適切なストレージ管理のためのロジックの両方になっています、MySQLの分析表はRedisの安全な再起動、本質的に同じ操作することによっても、処理するために使用することができます

この章では、同時に上記を理解することができ、より良いの導入後、より多くの理解を持っているメモリのRedisとさせて頂いており、非常に良いネクサスセクションです。

 

パートIII:Redisのデータストアの詳細

エッセイ:ハイサイドの3番目の部分の内容だけでなく、乾燥品がたくさん。Redisのは、主に基礎となるデータストレージの構造、jemallocメモリアロケータプロファイル、基本的な構造やオブジェクトのRedis RedisObjectこのフィールドを意味し、SDSの利点を説明します

この私の助けのために

1は、基盤となるストレージ・インターフェースのRedisはdictEntry、redisObjectの意味とSDS、構造との関係を理解理解します

図2に示すように、メモリパーティショニングとの管理のためjemallocメモリアロケータを理解

3、ストレージメカニズムを理解するために、すべてのオブジェクトのメモリの特性とLRU回復参照カウントフィールド、および共有フィールドの使用を含むRedisObject、および、redisObjectの意味と役割の詳細な理解が重要な役割をRedisのを演じます

4は、SDSは、独自のストレージ構造Redisの文字列は、SDSとC列のコントラストのこの章を取る、我々は、SDSが簡単にC文字列の多くそれらに対処するために非常に面倒なシーンに対応できる、非常に巧妙な、美しいコードの構造で学びました

この章では、根本的なバイアスを説明しますが、簡単に章が理解できないだけで良い基盤を築くだけでなく、システムから、将来的に美しいデザインとロジックの設計これに参照できるの下の深い理解に、デザインのアイデアやRedisの保存方法を説明します。

 

パートIV:Redisのオブジェクトイントラ符号化さタイプ

エッセイ:この記事では、大きなスペースを占め、主に5つのデータ構造の種類導入Redisの、およびそれらのコードの構造と変換ルール

この私の助けのために

図1に示すように、データ列型構造は、符号化の三種類を含む、最大512Mを超えることができない、INT整数符号化された値は、embstrは読み取り専用されている間、<= 39バイト文字列をコードembstrのみ格納、文字列のみが格納されます必要に変更するときに自動的に複数の最大長さまたは長さの符号化された文字列よりも長いと修飾embstr embstrにわたって生、符号化された生INTストアにエンコード、留意すべき大型のすべてのコード変更Redisのわずかな変換このプロセスは不可逆的です。

図2に示すように、データ構造の種類のリストは、リスト構造の端部によって、二重リンクリスト(LinkedListの)、二重リンクリストからリスト(ziplist)コンパクトな内部コードのリストを含む、2 ^ 32-1要素に格納されていてもよい、文字列を順序付けられそして構造のlistNodeの複数、連続圧縮メモリブロックリスト特殊コードの一連の(というより、各ノードのダブルエンドリストとしては、へのポインタである)されているシーケンシャルタイプからなるデータ構造、リスト要素の数は512未満であり、64文字未満とき祭りは、圧縮リストを使用するか、ダブルエンドリストを使用します。

図3に示すように、圧縮符号化リスト(ziplist)とハッシュテーブル(ハッシュテーブル)は、2つの種類を含むタイプのハッシュの内部データ構造が、Redisの外側のハッシュテーブル、ハッシュキーの要素数未満512及び文字列長の値であります構造リストを圧縮符号化を使用して64バイト未満、そうでなければ、ハッシュテーブル構造です。

図4に示すように、データ構造、リスト構造の類似したタイプのセットが、セットは順不同であり、要素がコレクションは、従来のCRUDをサポートすることに加えて、最大2 ^ 32-1の要素を格納することができ、コレクションを繰り返すことができない、Redisのは、複数のサポート交差点、労働組合、差に設定します。内部コードは整数(INTSET)またはハッシュテーブル(ハッシュテーブル)のセットです。コレクション内の要素の数は、使用される未満512は、整数の整数のセット、または、ハッシュテーブルを使用する場合。

図5に示すように、類似の順序付けられたコレクションのセットは、それ以外は、各ソート要素のスコア(スコア)、内部圧縮符号化リスト(ziplist)またはジャンプテーブル(skiplist)を設定します。表は、順序付けられたデータ構造、高速アクセス・ノードを達成するように、各ノードにおける複数のポインタを維持することにより、他のノードへのリンク、テーブル支持体であるジャンプ平均O(logN個)、最悪O(N)の複雑さをホップポイントのノードを検索し、一連の動作をサポートしています。Redisのは、二つの構造のテーブルをジャンプしzskiplist zskiplistNodeにより実現:ジャンプテーブル情報を保持するため、前者をノードに対してジャンプテーブルを示し、(例えば、ヘッドノード、テール・ノード、長さ、等のような)。順序付きリスト要素128の数より少ない圧縮永久歪みを使用して、すべてのメンバーは、長さを64バイト未満、そうでなければジャンプテーブルを持っている場合。

Redisのこのセクションでは、すべてのストレージタイプは、大きな助けのRedisの内部ストレージ構造を理解するための符号化構造の詳細な紹介を行っています。残念ながら、ジャンプテーブル構造のためにあまりにも多くの詳細をしませんでした。

 

パートV:アプリケーション例

 エッセイ:Redisのメモリのための主にこのセクションでは、見積もり、最適化手法を提唱し、実際には例のためにメモリ圧力が参考にRedisのだろうあり

この私の助けのために

図1に示すように、推定されたメモリ使用量は、構造のサイズ及び構造は、上述した符号化データ、ケースに詳細に記載紙に従って推定してもよいです

図2は、メモリはバイトまたはキー列の数を減少させることによって最適化することができ、そして過度の追加の設計を回避するために、整数達成共有オブジェクトを利用すること

図3に示すように、この値のためにいくつかの処理及びリサイクル政策を行い、メモリの断片化率、上述mem_fragmentation_ratio値に集中する必要があります

 

概要:この論文では、ストレージ構造に焦点を当てることは、ストレージのより詳細な説明のために、物品に非常に包括的導入ではない、いくつかのメモリの最適化に関連するコンテンツとRedisの内部記憶方法、符号化構造、ワーキングメモリアロケータを導入し、しかし、そこにはストレージ構造がなく、同様の圧縮ジャンプリストとテーブルをご紹介DBAの学生が知識のポイントを習得しなければならないため、この記事では、バックエンドの開発は大まかに理解することができています。

おすすめ

転載: www.cnblogs.com/dtt-java/p/11767197.html