Redisの設計と実現-読書ノート(二)
897 ワード
文書ディレクトリ
せいすうしゅうごう
集合要素がすべて整数であり、数が少ない場合、redisは整数集合を最下位実装として選択します.
整数集合の実装
typedef struct intset{
uint32_t encoding; //
uint32_t length; //
int8_t contents[]; encoding 16,32,64
}intset;
整数セットのアップグレード
現在のタイプの保存できない数値が表示されたら、すべての要素を直接アップグレードします.
アップグレードによりメモリの節約と柔軟性の向上
降格できません
リストの圧縮
圧縮リストは連続メモリブロックからなる順序データ構造であり、リストとハッシュの要素内容が小さな整数または短い文字列である場合、ziplistは両者の下位実装に戻る
圧縮リストの構成
zlbytes ztail allen entry 1 entry 2...zlend総メモリヘッダノードノード2末尾
entryの構成:preLength encoding content
遍歴は後からpreLengthによって位置を特定すればよい
チェーン更新
前のノードのpreLengthが大きくなると,後の記憶が下がらなくなり,大きくなるというプロセスが後に起こる.
前のノード長が254バイト以下の場合preLengthが1バイト以上の場合5バイト目のバイトをフラグビットとする
typedef struct intset{
uint32_t encoding; //
uint32_t length; //
int8_t contents[]; encoding 16,32,64
}intset;
圧縮リストは連続メモリブロックからなる順序データ構造であり、リストとハッシュの要素内容が小さな整数または短い文字列である場合、ziplistは両者の下位実装に戻る
圧縮リストの構成
zlbytes ztail allen entry 1 entry 2...zlend総メモリヘッダノードノード2末尾
entryの構成:preLength encoding content
遍歴は後からpreLengthによって位置を特定すればよい
チェーン更新
前のノードのpreLengthが大きくなると,後の記憶が下がらなくなり,大きくなるというプロセスが後に起こる.
前のノード長が254バイト以下の場合preLengthが1バイト以上の場合5バイト目のバイトをフラグビットとする