(三)、Redisオブジェクトタイプと下位データ構造の対応関係---Redis設計と読書ノートの実現

2372 ワード

5つの基本タイプ


Redisは、1つのキー値ペアを作成すると、少なくとも2つのオブジェクトが作成され、1つのオブジェクトがキー値ペアのキー(キーオブジェクト)として使用され、もう1つのオブジェクトがキー値ペアの値(値オブジェクト)として使用されます.キーは常に1つの文字列オブジェクトであり、値は以下の5つのオブジェクトのうちの1つであってもよい.
タイプ定数
オブジェクトの名前
typeコマンド出力
REDIS_STRING
文字列オブジェクト
“string”
REDIS_LIST
リストオブジェクト
“list”
REDIS_HASH
ハッシュ・オブジェクト
“hash”
REDIS_SET
集合オブジェクト
“set”
REDIS_ZSET
整列集合オブジェクト
“zset”
Redis内の各オブジェクトは、RedisObject構造で表されます.
typedef struct redisObject {  
    //     
    unsigned type:4;          
    //    (   )  
    unsigned notused:2;  
    //       
    unsigned encoding:4;  
    // LRU   (    server.lruclock)  
    unsigned lru:22;  
    //       
    int refcount;  
    //              
    void *ptr;  
} robj; 

コーディングと最下位実装


コーディング定数
最下位データ構造
object encodingコマンド出力
REDIS_ENCODING_INT
longタイプの整数
“int”
REDIS_ENCODING_EMBSTR
Embstr符号化の単純な動的文字列
“embstr”
REDIS_ENCODING_RAW
単純な動的文字列
“raw”
REDIS_ENCODING_HT
辞書
“hashtable”
REDIS_ENCODING_LINKEDLIST
にたんチェーンけい
“linkedlist”
REDIS_ENCODING_ZIPLIST
リストの圧縮
“ziplist”
REDIS_ENCODING_INTSET
せいすうしゅうごう
“intset”
REDIS_ENCODING_SKIPLIST
ジャンプテーブルと辞書
“skiplist”
##文字列オブジェクトのエンコーディングタイプ:
  • int:文字列オブジェクトが整数値で保存され、longタイプで表すことができる場合、文字列オブジェクトの符号化はintに設定される.
  • embstr:1つの文字列オブジェクトが文字列値を保存し、文字列長が39バイト未満の場合、文字列オブジェクトの符号化はembstrに設定される.
  • raw:1つの文字列オブジェクトが文字列値を保存し、文字列長が39バイトより大きい場合、文字列オブジェクトの符号化はrawに設定される.

  • ##リストオブジェクト符号化タイプ:【注意:3.2バージョン以降、符号化タイプとしてquicklistを統一する】
  • ziplist:次の2つの条件を満たします.
  • リストオブジェクトが保存するすべての文字列要素の長さは64バイト
  • 未満である.
  • リストオブジェクトが保存する要素の数は512個未満である.

  • linkedlist:以上の2つの条件を満たさない
  • ##ハッシュオブジェクト符号化タイプ:
  • ziplist:次の2つの条件を満たします.
  • ハッシュオブジェクトが保存するすべてのキー値ペアのキーと値文字列の長さは64バイト
  • 未満である.
  • ハッシュオブジェクトが保持するキー値のペア数は512個未満
  • である.
  • hashtable:以上の2つの条件を満たさない
  • ##集合オブジェクト符号化タイプ:
  • intset:次の2つの条件を満たす
  • コレクションオブジェクトに保存されているすべての要素は、整数
  • です.
  • コレクションオブジェクトが保存する要素の数は512個未満
  • である.
  • hashtable:以上の2つの条件を満たさない
  • ##整列集合オブジェクト符号化タイプ:
  • ziplist:次の2つの条件を満たします.
  • 秩序化集合オブジェクトによって保存されるすべての要素メンバーの長さは、64バイトの
  • 未満である.
  • 整列集合オブジェクトに保存する要素の数は、128個の
  • 未満である.
  • skiplist:以上の2つの条件を満たさない