ホームページ  >  記事  >  データベース  >  Redisのデータ構造とデータ操作の詳細な分析

Redisのデータ構造とデータ操作の詳細な分析

coldplay.xixi
coldplay.xixi転載
2021-02-08 16:20:072219ブラウズ

Redisのデータ構造とデータ操作の詳細な分析

推奨 (無料): redis

Redis がデータ操作を完了する速度は、マイクロ秒レベルに達することがあります。 Redis がこのような卓越したパフォーマンスを実現できる主な理由は 2 つあります:

  • Redis はインメモリ データベースであり、すべての操作がメモリ内で完了し、メモリ アクセス速度自体が非常に高速です。 ##Redis 効率的なデータ型とデータ構造を持っています。
  • キーから値への高速アクセスを実現するために、Redis はハッシュ テーブルを使用してキーと値のペアを保存します。ハッシュ バケット内のエントリは、実際のキーと値へのポインターを保存します。値が であっても、値ポインタを通じてコレクションを見つけることもできます。

ハッシュ テーブル内のデータが増えると、ハッシュの競合が発生します。つまり、複数のキーのハッシュ値が同じハッシュ バケットに対応する可能性があります。 Redis は、連鎖ハッシュを使用してハッシュの競合を解決します。つまり、同じハッシュ バケット内の複数の要素がリンクされたリストに格納され、要素がポインターによって順番にリンクされます。

ハッシュの競合が増えると、ハッシュの競合チェーンが長くなり、要素の検索に時間がかかり、効率が低下します。この問題を解決するために、Redis はハッシュ テーブルに対して再ハッシュ操作を実行して複数のエントリ要素を分散して格納し、単一のハッシュ バケット内の要素の数を減らし、それによって単一のバケット内の競合を減らします。

Redis は、効率的な再ハッシュのために、デフォルトで 2 つのグローバル ハッシュ テーブルを使用します。最初はハッシュ テーブル 1 がデフォルトで使用され、ハッシュ テーブル 2 はスペースを割り当てません。データが増加し続けると、redis は、次の手順:

ハッシュ テーブル 2 にさらにスペースを割り当てます。
  1. ハッシュ テーブル 1 のデータをハッシュ テーブル 2 にコピーします。
  2. ハッシュ テーブル 1 を解放します。スペースは予約されています。次の再ハッシュ拡張のために
  3. ただし、手順 2 で一度に大量のデータがコピーされると、Redis スレッドがブロックされ、他のリクエストを処理できなくなる可能性があるため、Redis はリハッシュとは、リクエストが処理されるたびに、このインデックス位置にあるすべてのエントリがコピーされることを意味します。

文字列型の値の場合は、ハッシュ バケットを見つけた後、直接 CRUD 操作を実行できます。セットの場合は、グローバル ハッシュ テーブルから対応するハッシュ バケットを見つけた後、セット内で CRUD を実行します。コレクションの操作効率は、基礎となるデータ構造と操作の複雑さに関係します。

#単一要素の演算が基本であり、演算の複雑さは O(1);

    ハッシュ: HGET、HSET、HDEL;
    • タイプ SADD、SREM、SRANDMEMBER などを設定します。
    • 範囲操作は非常に時間がかかり、操作の複雑さは O(N) です。
  1. ハッシュ:HGETALL;
    • セット:SMEMBERS;
    • リスト:LRANGE
    • Zセット:ZRANGE
    • 通常、統計演算は効率的であり、演算の複雑さは O(1) です。
  2. 例外はわずかで、演算の複雑さは O(1) です。
  3. リスト: LPOP、RPOP、LPUSH、RPUSH

以上がRedisのデータ構造とデータ操作の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。