オブジェクト
Redisのは、直接、いくつかのデータ構造上KVデータベースを実装していないが、彼らは異なるオブジェクトの組み合わせになります。Keyオブジェクトと値オブジェクト。
定義されたオブジェクト・データ構造は、以下:(ZSETのセットを注文しました)
以下は、オブジェクト型との実装との関係です。
--String Stringオブジェクト
- 32ビット(PTR *ために4バイト)未満の整数を整数に格納されている場合
- 32未満では、文字列をバイト場合:embstr (浮動小数点数を文字列として格納されます)
- とき生の32バイトを超えます
だから、embstr生、それはどのような違いを作るんので?
- Embstrは一度だけ割り当てられ、最適化された、優れたメモリと使用済みのSDSを割り当てるはobj
- 同上、メモリの必要性を解放しか〜一度リリース
- OBJ SDSおよび連続的な分布が、それは負荷がロードされ、それが速くなります
必要なときに加えて、3つの異なるモードの上記の文字列は、お互いを自動的に変換しますが、ノートembstr実際には彼のと本質的に読み取り専用オブジェクトの変更は、まず生に変換します
オブジェクトのリスト--list
下に示すように、LinkedListの又はzipList、それぞれ、(文字列オブジェクトは、他のオブジェクトは、ネストされたオブジェクトであってもよいです)
どのようにこれらの2つのコードを選択するには?
Ziplist:
1.各要素の長さが64バイト未満であります
2.要素の数が512未満であります
残りはLinkedListのに使用され、満たされていない上記の条件は、LinkedListのに選択されます
ハッシュオブジェクト
Ziplistまたはハッシュテーブル(辞書)
Ziplistキーフロントとリアの値は、テーブルの終わりから始まります。ハッシュテーブルは、キーと値が文字列オブジェクトとしてあり吸い込ま
ziplist使用する場合には
- すべてのキーと値は64バイト未満です
- 数が512未満であります
上記の変換。
設定されたオブジェクト
INTSETまたはハッシュテーブル(値がnull)
INTSETを使用する場合は?
- すべての要素は、整数値であり、
- 要素の数が512以下であります
変換同上。
順序集合
ZiplistまたはskipList +辞書へ
なぜ使用skipList +はそれを辞書?
状況はメモリの無駄を発生しませんので、まず、skiplist辞書オブジェクトは、両方の組み合わせを使用するので、範囲の時間の複雑さが比較的小さい見つけるために、指定された要素の値を達成し、見つけるために、続いて、要素を共有します
ziplistとシャシ侯?
- 要素の数が128未満であります
- 長さの各要素64バイト未満
変換同上。