Redisのハッシュデータ構造

一、Redisのハッシュ

基礎となるハッシュ・テーブルとして実現1、Redisの辞書は、ノードが複数のハッシュテーブルを有することができ、ハッシュテーブルは、ノードの各ハッシュ・テーブルは、辞書キーペアで保存されています。

図2に示すように、辞書で使用Redisのハッシュテーブルdict.h/dictht定義構造:

typedef 構造体dictht { 

    // ハッシュテーブルアレイ 
    dictEntry ** 表; 

    // ハッシュテーブルのサイズ 
    の符号なしロングサイズ; 

    // 指標値を算出するためのハッシュテーブルのサイズマスク
     // 常に同じサイズ- 1。 
    符号なしのロングsizemask ; 

    // 既存のノードのハッシュテーブルの数 
    、符号なしのロング使用され; 

} dictht。

1.tableプロパティ属基を指し、配列の各要素でありますdict.h/dictEntry结构的指针,每个dictEntry结构保存着一个键值对;

ノード(キーと値のペア)の数がある2.size属性はそれが、配列表のサイズであり、ハッシュ・テーブルのサイズを記録し、使用するプロパティは、ハッシュテーブルを記録します。

属性の3.sizemask値は常にサイズ-1に等しく、プロパティ値は、インデックステーブルは、アレイ上に配置する必要があり、ハッシュキーで決定。

 

3.ハッシュ・テーブル・ノードが使用するdictEntry各前記の構造dictEntry構造はキーと値のペアで保存されました:

typedefは構造体dictEntry { 

    // キー
    ボイド * キー; 

    // 
    連合{
         ボイド * ヴァル; 
        uint64_tをU64; 
        int64_tのS64; 
    } V; 

    // 点の次のノードのハッシュテーブルには、リンクされたリストが形成される
    構造体 dictEntry * 次に; 

} dictEntry。

1.key属性は、キーの鍵を保持しており、Vは、Vの値がポインタ、またはuint64_tを整数、または整数int64_tのでもよい保存されたキー値ペアの属性値です。

2.nextプロパティは、ハッシュテーブル内の別のノードへのポインタであり、ポインタのハッシュ値は、競合結合を解決するために、一緒に接続された同じキー問題複数であってもよいです。

同じキーを2つのインデックス値K1とK0に次のポインタによって接続方法を、示しています。

 

 

 図4は、辞書内のRedisは、dict.h/dictの構造を示しています。

typedef 構造体辞書{ 

    // タイプ特異的機能 
    dictType * タイプ; 

    // プライベートデータ
    ボイド * privdata; 

    // ハッシュテーブル 
    dicthtのHT [ 2 ]; 

    // 焼き直しインデックス
     // 焼き直しが行われない場合には、-1の値が
    int型 rehashidx ; / * 進捗IF rehashidx == -1にない焼き直し* / 

}のdict。

1. type特性およびprivdata多型辞書のセットを作成するために、キーと値のペアの異なるタイプの性質;

2. htプロパティは、アレイ内の各エントリは2つのエントリを含む配列であるdictht通常の状況下では、ハッシュテーブルは、辞書のみ使用ht[0]ハッシュテーブルを、ht[1]ハッシュテーブルのみをしますht[0]使用されたときにハッシュテーブル焼き直し;

加え3. ht[1]外、および別の焼き直し関連特性rehashidx:現在、次に、その値を焼き直しを行っていない場合、それは現在のペースを記録焼き直し-1

4は(ない焼き直しのための)辞書の通常の状態を示しています。

 

おすすめ

転載: www.cnblogs.com/lwhctv/p/11423939.html