redisデータ構造--SDS

729 ワード

redisの最下位に文字列を格納するデータ構造を単純動的文字列(simple dynamicstring)と呼ぶ.
SDS定義
以下にSDSの簡単な定義を示します.
struct sdshdr {
  int len; //   buf         
  int free; //   buf         
  char buf[]; //     
}

SDSは、オリジナルのC言語の文字列に比べて、以下の利点を備えている.
  • O(1)複雑度取得文字列長
  • バッファオーバーフローを防止freeを記録した後の利点
  • である.
  • 文字の変更時にメモリが再割り当てされる回数を減らします.free長のスペースが予約されているため、スペース割り当てについては、次の2つのポリシーがあります.
  • 空間プリアサイメント具体的なアサイメントポリシーは、SDS長が1 MB未満の場合にはlenと等しいfreeが割り当てられ、SDS長が1 MBより大きい場合にはfree=1 MBが割り当てられる.
  • 不活性空間解放buf記憶コンテンツが減少すると、直ちに空間を解放するのではなく、freeの値を増加させることによって空間を予備に残す.

  • バイナリセキュリティ用lenは文字の真の長さを記録し、'0'によるコンテンツの早期遮断
  • を防止する.
  • 互換部分Cの文字列操作関数はbufに'0'の末尾を付け、直接多重部分cの文字列操作関数
  • を用いる.