実装方法: 1. 各データ構造には独自の基礎となる内部エンコーディング実装があり、Redis が適切なシナリオで適切な内部エンコーディングを選択できるように複数の実装があります; 2. 各データ構造には次のものがあります。 3 つ以上の内部エンコード実装; 3. 内部エンコードは、さまざまな外部データ構造の内部実装として使用できます。
このチュートリアルの動作環境: 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"
free: 残りのスペースの量 len: 文字列の長さ buf: 格納された文字配列
スペースの事前割り当て
変更された文字列エージェントのメモリ再割り当ての数を減らすために、SDS は「一度の管理で十分」戦略を採用します:遅延スペース解放
文字列を短縮する際のメモリ再割り当て操作を回避するために、SDS はデータが削減されたときにすぐにはスペースを解放しません。 。int
は、意図的に「」を追加した set ゲーム「111」を含む、redis に保存されているさまざまな数値です。 " ”##二重リンクリストlpush、rpush、lpop、rpop
などの二重リンクリストは次のようになります。
は 2 つの部分に分かれています:
「調整部分」: オレンジ色推奨される関連チュートリアル:
以上がRedis の 5 つのデータ構造を基礎レベルで実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。