序文
Redisの直接(以下、Cストリングと呼ばnull終端文字配列、)は、従来の文字列C言語表現を使用しますが、動的な文字列(シンプルダイナミック文字列、SDS)という名前のシンプルな抽象型を作っていたのではありません、それはSDSのように、デフォルトの文字列のRedisを表します。
個人的な感情SDSは、 Javaのに似ているArrayListに、我々は効率がより高い2、の間のコントラストの一部を取ることができます。
SDSの定義
1 構造体sdshdr { 2 3。 // アレイBUFバイトに使用されるレコードの数 4 //はSDS格納されている文字列の長さに等しい 5。 INT LEN; 6 。7 //は未使用BUFバイト配列の数を記録する 。8 INT 無料; 9 10 // 文字列を保持するためのバイト配列、 11。 チャーBUF []; 12は 13です }。
ここで注意してください。チャーC言語はあるの1バイト。Javaのcharとは異なり、2バイトです。それは、わずか8である-127--128。
C列の利点と比較SDS
1.取得文字列の長さ一定の複雑さ
- これは、LENフィールドとして存在SDS、より良く理解され、長さを直接得ることができます
2.をもたらしたメモリの再割り当ての数が変更された文字列を削減します
- 従来の列cので、自動拡張はありません。そのメモリのサイズは、文字列の長さ+1に等しく、したがって、文字列を変更するたびに、メモリ一度再割り当てすることが、非常に時間がかかります
- SDSは自動的に拡張、およびスペースを事前に割り当てることができます。例えば、今そこにあるハロー文字列。メモリサイズは二回こんにちは、5 * 2 = 10であるかもしれません。場合は、文字列の拡大は、再び、時に必ずもう一度メモリを割り当てる必要はありません。そして自動的に拡張、と仮定すると、10十分にサイズの文字列を加えた後13は、割り当てられているメモリである13 = 2 * 26メモリサイズ。
3.バイナリセーフな、とあなたは空の文字を保存することができます
- 文字のC文字列は、特定の(例えば、ASCIIなど)コーディング、および文字列の最後に加えて、満たさなければならないNULL文字が含まれていないか、または最初になるようにヌル文字プログラムを読み出し文字列を誤解される文字列を終了 -これらの制限は、C文字列がテキストデータのみを保存することができ作るが、そのようなバイナリデータなどの画像、オーディオ、ビデオ、圧縮ファイルとして保存することはできません。
- したがって、APIは、すべてのSDSであろうバイナリハンドルに格納された処理SDS
buf
配列データを - すべてはかどうか、内部の配列bufに格納され、英語、中国語、音声や画像、バイナリデータストリームです。