ホームページ データベース Redis Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

Jan 13, 2022 am 09:56 AM
redis

Redis はなぜ速いのですか?レディスはどこですか?次の記事は、Redis が高速である理由を分析するのに役立ちます。

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

Redis は、キーと値のペアに基づく NoSQL データベースです。Redis の値は、文字列、ハッシュ、リスト、セット、zset、ビットマップ、HyperLogLog で構成できます。さまざまなデータ構造とアルゴリズム。 Redis は、キーの有効期限、パブリッシュとサブスクライブ、トランザクション、Lua スクリプト、センチネル、クラスター、その他の機能も提供します。 [関連する推奨事項: Redis ビデオ チュートリアル ]

Redis はコマンドを非常に高速に実行し、公式のパフォーマンスによれば、10w qps に達することがあります。そこで、この記事では主に Redis のどこが速いのか、主に次の点を含めて紹介します:

1. 開発言語

現在、私たちは皆、高言語を使用しています。レベル言語 Java、Python などのプログラムを作成すること。 C言語というと古いイメージがあるかもしれませんが、とても便利で、なんといってもUnixシステムはCで実装されているため、C言語はオペレーティングシステムに非常に近い言語です。 RedisはC言語で開発されているため、実行が高速になります。

さらに、大学生が C をよく学ぶと、コンピューターのオペレーティング システムをより深く理解できるようになります。高級言語を学んだ後は、下位層に注意を払う必要がなくなるなどとは考えないでください。借りた借金は必ず返済しなければなりません。ここでは、より難しい本である「Deep Understanding of Computing System」をお勧めします。

2. 純粋なメモリ アクセス

Redis はすべてのデータをメモリに配置します。非データ同期は正常に機能し、メモリから取得する必要はありません。ディスク。データの読み取り、IO 回は 0 回。メモリの応答時間は約 100 ナノ秒で、これは Redis の高速性の重要な基盤です。まず CPU の速度を見てみましょう:

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

私のコンピュータを例にとると、主な周波数は 3.1G です。つまり、3.1*10^ を実行できることになります。 1 秒あたり 9 命令。つまり、CPU が世界を認識する速度は非常に遅く、メモリは CPU の 100 倍、ディスクは 100 万倍も遅いのです。

「コンピュータ システムの徹底理解」から画像を借用しましたが、これは典型的なメモリ階層を示しています。L0 層では、CPU は 1 クロック サイクルでアクセスでき、SRAM ベースのキャッシュはこれらは数 CPU クロック サイクルでアクセスでき、次に DRAM ベースのメイン メモリには数十から数百クロック サイクルでアクセスできます。

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

3. シングルスレッド

まず、シングルスレッドの簡略化されたアルゴリズムの実装、同時データの構造実装難しいだけでなく、テストも面倒です。第 2 に、シングル スレッドは、スレッドの切り替えとロックのロックと解放による消費を回避します。サーバー側の開発では、ロックとスレッドの切り替えは通常、パフォーマンスの低下につながります。もちろん、シングルスレッドにも欠点があり、それは Redis の悪夢でもあるブロッキングです。コマンドの実行が長すぎると、他のコマンドがブロックされます。これは Redis にとって非常に致命的であるため、Redis は高速実行シナリオ用のデータベースです。

Redis に加えて、Node.js もシングルスレッドであり、Nginx もシングルスレッドですが、どちらも高性能サーバーのモデルです。

4. ノンブロッキング マルチチャネル I/O 多重化メカニズム

その前に、従来のブロッキング I/O について説明します。仕組み: read または write を使用してファイル記述子 (ファイル記述子 FD) を読み書きする場合、データが受信されない場合、データが受信されるまでスレッドは一時停止されます。

ブロッキング モデルは理解しやすいですが、複数のクライアント タスクを処理する必要がある場合には使用されません。

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

#I/O 多重化とは、実際には、複数の接続を同じプロセスで管理できることを意味します。マルチチャネルとはネットワーク接続を指し、多重化は同じスレッドにすぎません。ネットワークサービスにおいて、I/O多重化の役割は複数の接続イベントを一度に業務コードに通知することであり、処理方法は業務コードによって決まります。

I/O多重化モデルにおいて最も重要な関数呼び出しはI/O多重化機能であり、このメソッドは複数のファイルディスクリプタ(fd)の読み書きを同時に監視することができます。 fd が読み取り/書き込み可能である場合、このメソッドは読み取り/書き込み可能な fd の数を返します。

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

Redis は、I/O 多重化テクノロジの実装として epoll を使用しており、Redis 独自のイベント処理モデルは、時間を無駄にすることなく epoll の読み取り、書き込み、クローズなどのイベントを変換します。ネットワーク I/O について。複数の FD の読み取りと書き込みの監視を実現し、パフォーマンスを向上させます。

Redis が高速である理由を簡単に分析します。もうすぐどこにいますか?

鮮やかな例を挙げてみましょう。たとえば、TCP サーバーは 20 個のクライアント ソケットを処理します。

A 計画: 逐次処理: ネットワーク カードが原因で最初のソケットのデータ読み取りが遅い場合、ブロックされた後にすべてが台無しになります。

プラン B: ソケット リクエストごとにクローン サブプロセスを作成します。言うまでもなく、各プロセスは大量のシステム リソースを消費します。プロセスの切り替えだけでも、オペレーティング システムに十分な負担がかかります。

C スキーム (I/O 多重化モデル、epoll): ユーザーのソケットに対応する fd を epoll に登録します (実際にサーバーとオペレーティング システム間で受け渡されるのはソケットの fd ではなくデータです) fd_set の構造)、その後 epoll はどのソケットを読み取り/書き込みする必要があるかを伝えるだけで、アクティブで変化するソケット fd を処理することだけが必要になります。

この方法では、epoll が呼び出された場合にのみプロセス全体がブロックされ、顧客メッセージの送受信はブロックされません。

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がRedis が高速である理由を簡単に分析します。もうすぐどこにいますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

Redisデータをクリアする方法 Redisデータをクリアする方法 Apr 10, 2025 pm 10:06 PM

Redisデータをクリアする方法:Flushallコマンドを使用して、すべての重要な値をクリアします。 FlushDBコマンドを使用して、現在選択されているデータベースのキー値をクリアします。 [選択]を使用してデータベースを切り替え、FlushDBを使用して複数のデータベースをクリアします。 DELコマンドを使用して、特定のキーを削除します。 Redis-CLIツールを使用してデータをクリアします。

Redisキューの読み方 Redisキューの読み方 Apr 10, 2025 pm 10:12 PM

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Centos RedisでLUAスクリプト実行時間を構成する方法 Centos RedisでLUAスクリプト実行時間を構成する方法 Apr 14, 2025 pm 02:12 PM

Centosシステムでは、Redis構成ファイルを変更するか、Redisコマンドを使用して悪意のあるスクリプトがあまりにも多くのリソースを消費しないようにすることにより、LUAスクリプトの実行時間を制限できます。方法1:Redis構成ファイルを変更し、Redis構成ファイルを見つけます:Redis構成ファイルは通常/etc/redis/redis.confにあります。構成ファイルの編集:テキストエディター(VIやNANOなど)を使用して構成ファイルを開きます:sudovi/etc/redis/redis.conf luaスクリプト実行時間制限を設定します。

Redisコマンドラインの使用方法 Redisコマンドラインの使用方法 Apr 10, 2025 pm 10:18 PM

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

Redisカウンターを実装する方法 Redisカウンターを実装する方法 Apr 10, 2025 pm 10:21 PM

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

Redisの有効期限ポリシーを設定する方法 Redisの有効期限ポリシーを設定する方法 Apr 10, 2025 pm 10:03 PM

Redisデータの有効期間戦略には2つのタイプがあります。周期削除:期限切れのキーを削除する定期的なスキャン。これは、期限切れの時間帯-remove-countおよび期限切れの時間帯-remove-delayパラメーターを介して設定できます。怠zyな削除:キーが読み取られたり書かれたりした場合にのみ、削除の有効期限が切れたキーを確認してください。それらは、レイジーフリーレイジーエビクション、レイジーフリーレイジーエクスピア、レイジーフリーラジーユーザーのパラメーターを介して設定できます。

Debian Readdirのパフォーマンスを最適化する方法 Debian Readdirのパフォーマンスを最適化する方法 Apr 13, 2025 am 08:48 AM

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする

See all articles