redisはキー・バリュー・ベースのデータベースですが、メモリを最大限に利用するために、すべてのオブジェクトを値ストレージとしてsdsを使用するのではなく、値ストレージとしてredisobjectを使用します。具体的な構造は以下の通りです:
typedef struct redisObject{
//
unsigned type:4;
//
unsigned encoding:4
基礎となるデータ構造へのポインタ
void *ptr
}
つまり、redisObjectはそれが含む5つのデータ構造をカプセル化します。エンコーディングは、どのデータ構造が使われるかを示すものです。どの場合にどのデータ構造が使われるかがredisObjectの鍵です。
ストリング
- sds
- トランスコード操作
リストオブジェクト
- エンコード
- トランスコード操作
ハッシュオブジェクト
- エンコード
- トランスコード操作
集合体
- エンコード
- トランスコード操作
集合体
- エンコード
トランスコード操作
順序付き集合オブジェクト(数学。)
- zset
- トランスコード操作
参照数
- redisは独自のオブジェクトシステムに参照カウント技術を組み込み、メモリ再利用メカニズムを実装しています。
- 参照カウントはオブジェクトの共有という目的にも役立ちます。例えば、キーAが整数値100を値オブジェクトとして含むStringオブジェクトを作成したとします。キーBも値オブジェクトとして整数値100を含むStringオブジェクトを作成した場合、 サーバには2つの選択肢があります。2. キーAとキーBに同じ文字列オブジェクトを共有させ、共有されているオブジェクトの参照カウントを1増やします。