ホームページ  >  記事  >  Redis の 5 つのデータ構造を基礎レベルで実装する方法

Redis の 5 つのデータ構造を基礎レベルで実装する方法

醉折花枝作酒筹
醉折花枝作酒筹オリジナル
2021-07-07 10:38:505763ブラウズ

実装方法: 1. 各データ構造には独自の基礎となる内部エンコーディング実装があり、Redis が適切なシナリオで適切な内部エンコーディングを選択できるように複数の実装があります; 2. 各データ構造には次のものがあります。 3 つ以上の内部エンコード実装; 3. 内部エンコードは、さまざまな外部データ構造の内部実装として使用できます。

Redis の 5 つのデータ構造を基礎レベルで実装する方法

このチュートリアルの動作環境: Windows 7 システム、Redis バージョン 5.0.10、DELL G3 コンピューター。

Redis には、string、hash、set、zset、list の 5 つの基本的なデータ構造があります。以下では、Redis 3.0.6 バージョンをダウンロードする際に、最下位層がこれらをどのように実装するかを説明します。

要約すると、

(1) 各データ構造には独自の基礎となる内部コーディング実装があり、複数の実装があるため、Redis は適切なシナリオを選択します。エンコーディング。

(2) 各データ構造には 3 つ以上の内部エンコーディング実装があることがわかります。たとえば、文字列データ構造には、raw、int、embstr の 3 つの内部エンコーディングが含まれています。

(3) 同時に、一部の内部エンコーディングは、さまざまな外部データ構造の内部実装として使用できます。たとえば、ziplist は、ハッシュ、リスト、および zset に共通の内部エンコーディングです。

ダイナミック ストリング SDS

SDS は、「シンプル ダイナミック ストリング」の略称です。 Redis のすべてのシナリオに表示される文字列は、基本的に SDS によって実装されます。

  • すべての非数値キー (例: key msg

    in set msg "hello"
  • )
  • 文字列データ型の値 (例: set msg "hello" の value "hello")

  • " 非文字列データ型の文字 String value"例: rpush フルーツ "apple" "apple" in "banana" "banana"

##SDS は次のようになります:

Redis の 5 つのデータ構造を基礎レベルで実装する方法

free: 残りのスペースの量

len: 文字列の長さ

buf: 格納された文字配列

スペースの事前割り当て

変更された文字列エージェントのメモリ再割り当ての数を減らすために、SDS は「一度の管理で十分」戦略を採用します:

  • 変更後の SDS 長が
  • 変更後の SDS 長さが 1MB 以上の場合、拡張では変更された長さを満たすだけでなく、追加の 1MB スペースも追加されます。

遅延スペース解放

文字列を短縮する際のメモリ再割り当て操作を回避するために、SDS はデータが削減されたときにすぐにはスペースを解放しません。 。

int

は、意図的に「」を追加した

set ゲーム「111」を含む、redis に保存されているさまざまな数値です。 " ”

##二重リンクリストlpush、rpush、lpop、rpop

などの二重リンクリストは次のようになります。

Redis の 5 つのデータ構造を基礎レベルで実装する方法 は 2 つの部分に分かれています:

「調整部分」: オレンジ色
    • head: を指します。特定の二重リンクリストの先頭
    • tail: 特定の二重リンクリストの末尾を指します
    • len: 二重リンクの長さリンク リスト
    「特定の実装」: blue
    • #先行する pre と後続する next
  • 二重リンクリストはlistとlistNodeで構成されるデータ構造構成です。

推奨される関連チュートリアル:

Redis チュートリアル

以上がRedis の 5 つのデータ構造を基礎レベルで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。