Redis ロックは、次の手順で実装される分散ロック メカニズムです: 1. ロックの取得 (SETNX); 2. ロックの解放 (DEL); 3. 有効期限の設定 (EXPIRE); 4. ロックの競合。その利点は、分散型、シンプル、効率的、スケーラブルであることですが、デッドロック、保証されていない順序、有効期限の設定の必要性などの制限があります。
Redis ロックの実装原理
Redis ロックは、Redis を使用して実装された分散ロック メカニズムであり、原因となるリソース競合の問題を解決します。同時アクセスによる。これは主に次の手順で実装されます:
1. ロックを取得します
- クライアントは
SETNX
コマンドを Redis に送信します。サーバーは、指定されたキーの値を 1 に設定しようとしています (ロックの取得を表します)。
- キーが存在しない場合、または値が 0 の場合、Redis はキーの値を 1 に設定し、1 を返します (ロックの取得に成功)。
- それ以外の場合は、0 を返します (ロックは他のクライアントによって取得されています)。
2. ロックを解放します
- クライアントは、指定されたキーを削除するために
DEL
コマンドを Redis サーバーに送信します。 。
- キーが存在し、値が 1 に等しい場合、Redis はキーを正常に削除します (ロックを解放します)。
- それ以外の場合は、0 を返します (ロックの解放が失敗しました。おそらく、ロックが他のクライアントによってプリエンプトされたか、期限が切れたためです)。
3. 有効期限の設定
- デッドロックを回避するために、クライアントは通常、ロックの有効期限を設定します (
EXPIRE# # #注文)。
有効期限の間、他のクライアントはロックを取得できません。 - 有効期限が経過すると、ロックは自動的に解除されます。
-
4. ロックの競合
複数のクライアントが同時に同じロックを取得しようとした場合、成功できるのは 1 つのクライアントだけです。 - 他のクライアントは、ロックが正常に取得されるか、ロックの有効期限が切れるまで、継続的に再試行します。
-
利点:
分散: Redis 実装に基づいて、ロックの取得を複数のサーバー間で調整できます。 - 使いやすさ:
- SETNX
および
DEL コマンドは理解しやすく、使いやすいです。
効率的: Redis の高いパフォーマンスにより、ロックの高速な取得と解放が保証されます。 - スケーラブル: Redis のクラスター アーキテクチャにより、高い同時実行性のニーズを満たすためにロック機能を拡張できます。
-
制限事項:
デッドロックの可能性: ロックを解放する前にクライアントがクラッシュした場合、ロックが解放されない可能性があります。 - ロックの順序は保証できません。複数のクライアントが同時にロックを取得しようとする可能性があり、ロックを取得する最終的な順序は保証できません。
- 有効期限の設定が必要: デッドロックを避けるために有効期限を設定する必要がありますが、有効期限を短く設定しすぎるとロックの競合が頻繁に発生する可能性があり、有効期限を長すぎるとロックが無駄になる可能性があります。リソース。
-
以上がRedis ロックの実装原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。