この記事では、Redis に関する関連知識を提供します。主に、2 層データ構造、データ構造の内部実装、オブジェクト構造など、オブジェクトに関する関連問題を紹介します。以下の関連コンテンツが皆様のお役に立てれば幸いです。
推奨学習: Redis ビデオ チュートリアル
Redis の 2 層データ構造の概要
redis のパフォーマンスが高い理由の 1 つは、各データ構造が特別に設計され、1 つ以上のデータ構造によってサポートされていることです。これらの柔軟なデータ構造に依存して、読み取りと書き込みのパフォーマンスが向上します。 Redis のデータ構造を理解したい場合は、2 つの異なるレベルから議論できます。
最初のレベルはユーザーの観点からのもので、このレベルは Redis が公開するものでもあります。外部呼び出しインターフェイス (文字列、リスト、ハッシュ、セット、ソートされたセットなど)。
2 番目のレベルは内部実装の観点からのもので、dict、sds、ziplist、quicklist、skiplist、intset などの下位レベルの実装に属します。
Redis データ構造の内部実装
Redis ユーザーの観点から見ると、Redis ノードには複数のデータベース (非クラスターのデフォルト) が含まれています。モードでは 16、クラスター モードでは 1 のみ)、データベースはキー スペースからオブジェクト スペースへのマッピング関係を維持します。このマッピング関係のキーは文字列型であり、値は文字列、リスト、ハッシュ、セット、ソート セットなどの複数のデータ型にすることができます。キーのタイプは文字列に固定されていますが、可能な値のタイプは複数であることがわかります。
Redis の内部実装の観点から見ると、データベース内のマッピング関係は辞書を使用して維持されます。 dict のキーが固定データ構造 (動的文字列 sds) で表現されていれば十分です。値はさらに複雑です。異なる種類の値を同じ辞書に格納するには、共通のデータ構造が必要です。この共通のデータ構造は robj で、その完全名は redisObject です。
例:
値がリストの場合、その内部ストレージ構造はクイックリストです。
値が文字列の場合、その内部ストレージ構造は通常 sds です。ただし、文字列型の値が数値の場合、Redis はそれをストレージ用に内部的に long 型に変換するため、メモリ使用量が削減されます。
つまり、 robj は sds だけでなく、クイックリスト、さらには長い型も表すことができます。
redisObject の構造
redisObject の定義は次のとおりです:
typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */ int refcount; void *ptr;} robj;
A robj には次の 5 つのフィールドが含まれます:
type : オブジェクトのデータ型。 4ビットを占有します。可能な値は 5 つあります: OBJ_STRING、OBJ_LIST、OBJ_SET、OBJ_ZSET、
OBJ_HASH。これらはそれぞれ、Redis によって公開される 5 つのデータ構造に対応します。エンコーディング: の内部表現。オブジェクト (エンコーディングとも呼ばれます) は 4 ビットを占有し、10 個の可能な値を持ちます。
lru: LRU 置換アルゴリズムに使用され、24 ビットを占めます。
- #refcount: 参照カウント。これにより、特定の状況下で robj オブジェクトを共有できるようになります。
- ptr: データ ポインタ。実際のデータを指します。たとえば、文字列を表す robj は、その ptr が sds 構造を指す場合があり、リストを表す robj は、その ptr がクイックリストを指す場合があります。
同じ型が異なるエンコーディングに対応する場合もあります。これは、同じデータ型が異なる内部表現を持つ可能性があることを意味します。内部表現が異なると、メモリ使用量と検索パフォーマンスも異なります。
type = OBJ_STRING の場合、この robj には文字列が格納されることを意味し、このときのエンコーディングは次の 3 種類のいずれかになります。 OBJ_ENCODING_RAW: 文字列はネイティブ表現、つまり sds を使用します。- OBJ_ENCODING_INT: 文字列は数値で表され、実際にはlong型です。
- OBJ_ENCODING_EMBSTR: 文字列は特別な埋め込み SDS によって表されます。
- type = OBJ_HASH の場合、この robj にはハッシュが格納されることを意味し、このときのエンコーディングは次の 2 つのいずれかになります。 ##OBJ_ENCODING_HT: ハッシュは辞書で表されます。
- エンコーディングの 10 個の値は次のとおりです。
- OBJ_ENCODING_RAW: 最もネイティブな表現。実際、文字列型のみがこのエンコード値 (sds として表現) を使用します。
- OBJ_ENCODING_HT: dict として表現されます。
- OBJ_ENCODING_ZIPMAP: これは古い表現であり、現在は使用されていません。 Redis 2.6 より小さいバージョンでのみ使用できます。
OBJ_ENCODING_LINKEDLIST: これも古い表現であり、現在は使用されていません。
OBJ_ENCODING_ZIPLIST: ジップリストとして表現されます。
OBJ_ENCODING_INTSET: intset として表現されます。セットデータ構造に使用されます。
OBJ_ENCODING_SKIPLIST: スキップリストとして表現されます。ソートされたセットのデータ構造に使用されます。
OBJ_ENCODING_EMBSTR: 特別な埋め込み SDS として表されます。
OBJ_ENCODING_QUICKLIST: クイックリストとして表現されます。リストデータ構造に使用されます。
redisObject の役割
redisObject の役割は次のとおりです。
redisObjec は次のとおりです。 2 つの間のリンク データ構造のレベル間のブリッジ。
複数のデータ型の統一表現を提供します。
同じ種類のデータで異なる内部表現を使用できるようにすることで、場合によってはメモリをできるだけ節約します。
オブジェクトの共有と参照カウントをサポートします。オブジェクトが共有される場合、占有されるメモリ コピーは 1 つだけなので、メモリがさらに節約されます。
推奨される学習: Redis ビデオ チュートリアル
以上がRedis 学習スキルのオブジェクトの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Redisは、データをキャッシュし、分散ロックとデータの持続性を実装することにより、アプリケーションのパフォーマンスとスケーラビリティを向上させます。 1)キャッシュデータ:Redisを使用して頻繁にアクセスしたデータをキャッシュして、データアクセス速度を向上させます。 2)分散ロック:Redisを使用して分散ロックを実装して、分散環境での操作のセキュリティを確保します。 3)データの持続性:データの損失を防ぐために、RDBおよびAOFメカニズムを介してデータセキュリティを確保します。

Redisのデータモデルと構造には、5つの主要なタイプが含まれます。1。文字列:テキストまたはバイナリデータの保存に使用され、原子操作をサポートします。 2。リスト:キューとスタックに適した注文された要素コレクション。 3.セット:順序付けられていない一意の要素セット、セット操作をサポートします。 4。注文セット(sortedset):ランキングに適したスコアを持つ一意の要素セット。 5。ハッシュテーブル(ハッシュ):オブジェクトの保存に適したキー価値ペアのコレクション。

Redisのデータベースメソッドには、メモリ内データベースとキー価値ストレージが含まれます。 1)Redisはデータをメモリに保存し、速く読み取り、書き込みます。 2)キー価値のペアを使用してデータを保存し、キャッシュやNOSQLデータベースに適したリスト、コレクション、ハッシュテーブル、注文コレクションなどの複雑なデータ構造をサポートします。

Redisは、高速パフォーマンス、リッチデータ構造、高可用性とスケーラビリティ、持続性能力、幅広いエコシステムサポートを提供するため、強力なデータベースソリューションです。 1)非常に速いパフォーマンス:Redisのデータはメモリに保存され、非常に速い読み取り速度と書き込み速度が高く、高い並行性と低レイテンシアプリケーションに適しています。 2)豊富なデータ構造:さまざまなシナリオに適したリスト、コレクションなど、複数のデータ型をサポートします。 3)高可用性とスケーラビリティ:マスタースレーブの複製とクラスターモードをサポートして、高可用性と水平スケーラビリティを実現します。 4)持続性とデータセキュリティ:データの整合性と信頼性を確保するために、データの持続性がRDBとAOFを通じて達成されます。 5)幅広い生態系とコミュニティのサポート:巨大なエコシステムとアクティブなコミュニティにより、

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

Redisは、次のようなさまざまなデータ構造をサポートしています。1。文字列、単一価値データの保存に適しています。 2。キューやスタックに適したリスト。 3.非重複データの保存に使用されるセット。 4。ランキングリストと優先キューに適した注文セット。 5。オブジェクトまたは構造化されたデータの保存に適したハッシュテーブル。

Redisカウンターは、Redisキー価値ペアストレージを使用して、カウンターキーの作成、カウントの増加、カウントの減少、カウントのリセット、およびカウントの取得など、カウント操作を実装するメカニズムです。 Redisカウンターの利点には、高速速度、高い並行性、耐久性、シンプルさと使いやすさが含まれます。ユーザーアクセスカウント、リアルタイムメトリック追跡、ゲームのスコアとランキング、注文処理などのシナリオで使用できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
