blog

Redisオブジェクト・システム

redisはキー・バリュー・ベースのデータベースですが、メモリを最大限に利用するために、すべてのオブジェクトをsdsを使って値として格納するのではなく、値として格納します。 つまり、このように5つのデ...

Apr 28, 2020 · 2 min. read

redisはキー・バリュー・ベースのデータベースですが、メモリを最大限に利用するために、すべてのオブジェクトを値ストレージとしてsdsを使用するのではなく、値ストレージとしてredisobjectを使用します。具体的な構造は以下の通りです:

typedef struct redisObject{
 //  
 unsigned type:4;
 //  
 unsigned encoding:4
 基礎となるデータ構造へのポインタ
 void *ptr
}

つまり、redisObjectはそれが含む5つのデータ構造をカプセル化します。エンコーディングは、どのデータ構造が使われるかを示すものです。どの場合にどのデータ構造が使われるかがredisObjectの鍵です。

ストリング

  1. sds
  2. トランスコード操作

リストオブジェクト

  1. エンコード
  2. トランスコード操作

ハッシュオブジェクト

  1. エンコード
  2. トランスコード操作

集合体

  1. エンコード
  2. トランスコード操作

集合体

  1. エンコード
  2. トランスコード操作

順序付き集合オブジェクト(数学。)

  1. zset
  2. トランスコード操作

参照数

  1. redisは独自のオブジェクトシステムに参照カウント技術を組み込み、メモリ再利用メカニズムを実装しています。
  2. 参照カウントはオブジェクトの共有という目的にも役立ちます。例えば、キーAが整数値100を値オブジェクトとして含むStringオブジェクトを作成したとします。キーBも値オブジェクトとして整数値100を含むStringオブジェクトを作成した場合、 サーバには2つの選択肢があります。2. キーAとキーBに同じ文字列オブジェクトを共有させ、共有されているオブジェクトの参照カウントを1増やします。
Read next

flutter-AnimationControllerを使う

インポート ''; インポート ''; mat として 'dart:math' をインポートします。

Apr 27, 2020 · 1 min read