デザインとオリジナルのRedisの実現 - データ構造(5)Redisの目的を達成します

オブジェクト

       Redisのは、直接、いくつかのデータ構造上KVデータベースを実装していないが、彼らは異なるオブジェクトの組み合わせになります。Keyオブジェクトと値オブジェクト。

定義されたオブジェクト・データ構造は、以下:(ZSETのセットを注文しました)

以下は、オブジェクト型との実装との関係です。

--String Stringオブジェクト

  1. 32ビット(PTR *ために4バイト)未満の整数を整数に格納されている場合
  2. 32未満では、文字列をバイト場合:embstr (浮動小数点数を文字列として格納されます)
  3. とき生の32バイトを超えます

    だから、embstr生、それはどのような違いを作るんので?  

  1. Embstrは一度だけ割り当てられ、最適化された、優れたメモリと使用済みのSDSを割り当てるはobj
  2. 同上、メモリの必要性を解放しか〜一度リリース
  3. OBJ SDSおよび連続的な分布が、それは負荷がロードされ、それが速くなります

必要なときに加えて、3つの異なるモードの上記の文字列は、お互いを自動的に変換しますが、ノートembstr実際には彼のと本質的に読み取り専用オブジェクトの変更は、まず生に変換します

オブジェクトのリスト--list

       下に示すように、LinkedListの又はzipList、それぞれ、(文字列オブジェクトは、他のオブジェクトは、ネストされたオブジェクトであってもよいです

     どのようにこれらの2つのコードを選択するには?

              Ziplist:

                    1.各要素の長さが64バイト未満であります

                    2.要素の数が512未満であります

                   残りはLinkedListのに使用され、満たされていない上記の条件は、LinkedListのに選択されます

ハッシュオブジェクト

       Ziplistまたはハッシュテーブル(辞書)

       Ziplistキーフロントとリアの値は、テーブルの終わりから始まります。ハッシュテーブルは、キーと値が文字列オブジェクトとしてあり吸い込ま

       ziplist使用する場合には

  1. すべてのキーと値は64バイト未満です
  2. 数が512未満であります

上記の変換。

設定されたオブジェクト

       INTSETまたはハッシュテーブル(値がnull)

       INTSETを使用する場合は?

  1. すべての要素は、整数値であり、
  2. 要素の数が512以下であります

変換同上。

順序集合

       ZiplistまたはskipList +辞書へ

       なぜ使用skipList +はそれを辞書?

              状況はメモリの無駄を発生しませんので、まず、skiplist辞書オブジェクトは、両方の組み合わせを使用するので、範囲の時間の複雑さが比較的小さい見つけるために、指定された要素の値を達成し、見つけるために、続いて、要素を共有します

      ziplistとシャシ侯?

  1. 要素の数が128未満であります
  2. 長さの各要素64バイト未満

変換同上。

 

公開された47元の記事 ウォンの賞賛8 ビュー30000 +

おすすめ

転載: blog.csdn.net/nanchengyu/article/details/89321250
おすすめ