ホームページ データベース Redis Redis によって実装された分散ロックのパフォーマンス比較

Redis によって実装された分散ロックのパフォーマンス比較

Jun 20, 2023 pm 05:46 PM
redis 配布された ロック

インターネット アプリケーションの規模がますます大きくなるにつれて、分散システムがますます一般的になってきています。これらのシステムでは、分散ロックが不可欠な機能です。分散ロックに対する強い需要があるため、さまざまな実装方法があります。その中でも、Redis は分散ロックの実装で広く使用されている人気のツールです。この記事では、Redis によって実装された分散ロックのパフォーマンスの比較について説明します。

1. Redis の基本概念

Redis の分散ロックのパフォーマンスについて説明する前に、Redis のいくつかの基本概念を理解する必要があります。

  1. Redis

Redis は、キャッシュやメッセージ キューなどのシナリオでよく使用される、高性能のキー/値ストレージ システムです。

  1. SETNX コマンド

SETNX コマンドは、Redis に値を設定するために使用されます。キーが存在しない場合にのみ正常に設定できます。このコマンドは、分散ロックを実装するために使用することもできます。

  1. EXPIRE コマンド

EXPIRE コマンドは、キーの有効期限を設定するために使用されます。有効期限が切れると、キーは自動的に削除されます。

  1. DEL コマンド

DEL コマンドは、キーとそれに対応する値を削除するために使用されます。

2. Redis が分散ロックを実装する方法

Redis は、SETNX コマンドを通じて分散ロックを実装できます。具体的な実装手順は次のとおりです。

  1. ロックの取得をリクエストするとき、クライアントは SETNX コマンドを Redis に送信して、キーの設定と有効期限の設定をリクエストします。キーが存在しない場合、設定は成功し、クライアントはロックを取得します。
  2. SETNX が失敗した場合は、キーがすでに存在し、クライアントがロックの取得に失敗したことを意味します。
  3. ロックを取得した後、クライアントはロックの有効性を維持するためにハートビート パケットを継続的に送信する必要があります。
  4. クライアントはロックを解放するときに、DEL コマンドを Redis に送信してキーを削除する必要があります。

3. Redis 分散ロックのパフォーマンスの比較

さまざまな Redis 分散ロック実装のパフォーマンスを比較するために、次のようなベンチマーク テスト モデルを使用しました。

  1. 単一の Redis ノードを使用してテストします。
  2. Redis クラスターを使用してテストします。
  3. 2 つの Redis ノードで実行される複数のクライアント テストを使用します。

上記 3 つのモデルをテストした結果、次の結果が得られました。

  1. 単一 Redis ノードのテスト

単一 Redis ノードでは、テストに単一クライアントを使用し、ロック時間を 1 秒に設定します。テスト結果は次のとおりです。

  • ロックを正常に取得するためのリクエストの数: 498614
  • 操作時間: 10.02 秒
  1. Redisクラスター テスト

Redis クラスターでは、テストに 8 つのノードを使用し、ロック時間を 1 秒に設定しました。テスト結果は次のとおりです。

  • ロックを正常に取得するためのリクエストの数: 337854
  • 操作時間: 10.11 秒
  1. 複数クライアント テスト

2 つの独立した Redis ノードで 2 つのクライアントを起動し、各クライアントが 1000 リクエストを送信しました。 2 つのクライアントはそれぞれ SET コマンドを使用して、分散ロックを実装するためのキーを競合します。一方のクライアントが SET コマンドを送信すると、もう一方のクライアントは GET リクエストを送信してキーが存在するかどうかを確認し、キーが存在しない場合は再度 SET コマンドを送信します。テスト結果は次のとおりです:

    #ロックの取得に成功したリクエストの数: 7220
  • 操作時間: 1.66 秒
IV. 結論

テスト後、次の結論を導き出すことができます:

    単一の Redis ノードでは、分散ロック実装のパフォーマンスにほとんど違いはありません。
  1. Redis クラスターでは、分散ロック実装のパフォーマンスが若干異なりますが、それほど明らかではありません。
  2. 複数クライアントのテストでは、SETNX コマンドによる分散ロックのパフォーマンスが悪く、同時実行数が小さい場合は安定性が良いですが、同時実行数が大きい場合は、多数の再試行とエラー。
要約すると、SETNX に基づく分散ロック実装のパフォーマンスは理想的ではありません。パフォーマンスを向上させるために、複数の Redis ノードを使用して分散ロックを実装し、より安定したパフォーマンスを実現する Redlock アルゴリズムの使用を検討できます。ただし、実際の状況に基づいて最適な分散ロックの実装を選択して実装する必要があります。

以上が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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 Windows 11 10.0.22000.100 のインストール時の 0x80242008 エラーの解決策 May 08, 2024 pm 03:50 PM

1. [スタート]メニューを起動し、[cmd]と入力し、[コマンドプロンプト]を右クリックし、[管理者として実行]を選択します。 2. 次のコマンドを順番に入力します (注意してコピーして貼り付けてください): SCconfigwuauservstart=auto、Enter キーを押す SCconfigbitsstart=auto、Enter キーを押す SCconfigcryptsvcstart=auto、Enter キーを押す SCconfigtrustedinstallerstart=auto、Enter キーを押す SCconfigwuauservtype=share、Enter キーを押す netstopwuauserv 、enter netstopcryptS を押す

Golang API のキャッシュ戦略と最適化 Golang API のキャッシュ戦略と最適化 May 07, 2024 pm 02:12 PM

GolangAPI のキャッシュ戦略により、パフォーマンスが向上し、サーバーの負荷が軽減されます。一般的に使用される戦略は、LRU、LFU、FIFO、TTL です。最適化手法には、適切なキャッシュ ストレージの選択、階層型キャッシュ、無効化管理、監視とチューニングが含まれます。実際には、データベースからユーザー情報を取得する API を最適化するために LRU キャッシュが使用されます。それ以外の場合は、データベースからデータを取得した後にキャッシュを更新できます。

PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 PHP 開発におけるキャッシュ メカニズムとアプリケーションの実践 May 09, 2024 pm 01:30 PM

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

golang関数のロックはどのように実装されていますか? golang関数のロックはどのように実装されていますか? Jun 05, 2024 pm 12:39 PM

Go 言語のロックは、データの競合を防ぐために同期された同時実行コードを実装します。 Mutex: Mutex ロック。同時に 1 つのゴルーチンだけがロックを取得し、クリティカル セクションの制御に使用されます。 RWMutex: 複数の goroutine が同時にデータを読み取ることを許可する読み取り/書き込みロック。ただし、同時にデータを書き込むことができるのは 1 つの goroutine のみです。共有データの頻繁な読み取りと書き込みが必要なシナリオに適しています。

PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? PHP 配列のページネーションで Redis キャッシュを使用するにはどうすればよいですか? May 01, 2024 am 10:48 AM

Redis キャッシュを使用すると、PHP 配列ページングのパフォーマンスを大幅に最適化できます。これは、次の手順で実現できます。 Redis クライアントをインストールします。 Redisサーバーに接続します。キャッシュ データを作成し、データの各ページをキー「page:{page_number}」を持つ Redis ハッシュに保存します。キャッシュからデータを取得し、大規模な配列での高コストの操作を回避します。

Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法_Win11 英語 21996 を簡体字中国語 22000 にアップグレードする方法 May 08, 2024 pm 05:10 PM

まず、システム言語を簡体字中国語表示に設定して再起動する必要があります。もちろん、以前に表示言語を簡体字中国語に変更したことがある場合は、この手順をスキップできます。次に、レジストリ regedit.exe の操作を開始し、左側のナビゲーション バーまたは上部のアドレス バーで HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage に直接移動し、InstallLanguage キーの値と Default キーの値を 0804 に変更します (英語に変更する場合)。まずシステムの表示言語を en-us に設定し、システムを再起動してから、すべてを 0409 に変更します) この時点でシステムを再起動する必要があります。

Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する Win11でダウンロードしたアップデートファイルの探し方_Win11でダウンロードしたアップデートファイルの場所を共有する May 08, 2024 am 10:34 AM

1. まず、デスクトップ上の[このPC]アイコンをダブルクリックして開きます。 2. 次に、マウスの左ボタンをダブルクリックして [C ドライブ] に入ります。システム ファイルは通常、自動的に C ドライブに保存されます。 3. 次に、C ドライブで [windows] フォルダーを見つけ、ダブルクリックしてに入ります。 4. [windows]フォルダーに入ったら、[SoftwareDistribution]フォルダーを見つけます。 5. 入力後、win11 のダウンロード ファイルとアップデート ファイルがすべて含まれている [ダウンロード] フォルダーを見つけます。 6. これらのファイルを削除したい場合は、このフォルダー内で直接削除してください。

PHP Redis キャッシュ アプリケーションとベスト プラクティス PHP Redis キャッシュ アプリケーションとベスト プラクティス May 04, 2024 am 08:33 AM

Redis は、高性能のキー/値キャッシュです。 PHPRedis 拡張機能は、Redis サーバーと対話するための API を提供します。 Redis に接続し、データを保存および取得するには、次の手順を使用します。 接続: Redis クラスを使用してサーバーに接続します。ストレージ: set メソッドを使用してキーと値のペアを設定します。取得: get メソッドを使用してキーの値を取得します。

See all articles