Redisをロックする方法
redis のロック分類
redis で使用できるロック コマンドは、INCR、SETNX、SET です。
1. 最初のロック コマンド INCR
この種のロックの考え方は、キーが存在しない場合、キーの値は 0 に初期化されるということです。まず、それを追加するために INCR 操作が実行されます。
その後、他のユーザーが INCR 操作を実行して 1 を追加したときに、返された数値が 1 より大きい場合、ロックが使用されていることを意味します。
1. クライアント A は、ロックが取得されたことを示すキー値 1 の取得をサーバーに要求します。
2. クライアント B もサーバーにキー値 2 の取得を要求します。
3. クライアント A はコードの実行を完了し、ロックを削除します。
4. クライアント B は一定時間待機し、次のキー値を取得します。リクエストを行うときは 1 で、ロックの取得が成功したことを示します
5. クライアント B がコードを実行し、ロックを削除します。
$redis->incr($key); $redis->expire($key, $ttl); //设置生成时间为1秒
2. 2 番目のロック SETNX
このロックの背後にある考え方は、キーが存在しない場合はキーを value に設定するというものです。
キーがすでに存在する場合、SETNX は何もアクションを実行しません
1. クライアント A がサーバーに要求しますキーの値を設定します。設定が成功した場合は、ロックが成功したことを意味します。
2. クライアント B もサーバーにキーの値を設定するように要求します。返されなかった場合は、ロックが解除されたことを意味しますfailed
3. クライアント A はコードの実行を完了し、ロックを削除します
4. クライアント 一定時間待機した後、クライアント B がキー値の設定を要求し、設定は成功します。
5. クライアント B はコードの実行を完了し、ロックを削除します
$redis->setNX($key, $value); $redis->expire($key, $ttl);
3. 3 番目のタイプのロック SET
上記の 2 つの方法には問題があります。キーの有効期限を設定する必要があることがわかります。では、なぜキーの有効期限を設定する必要があるのでしょうか?リクエストの実行が何らかの理由で予期せず終了し、ロックが作成されても削除されなかった場合、ロックは常に存在するため、今後キャッシュが更新されることはありません。したがって、予期しないイベントを防ぐためにロックに有効期限を追加する必要があります。
ただし、Expire を使用して設定することはアトミックな操作ではありません。したがって、トランザクションを通じてアトミック性も確保できるが、まだいくつかの問題があるため、公式は別の点を挙げ、バージョン2.6.12からはSETコマンド自体に有効期限を設定する機能を追加したとしている。
1. クライアント A は、サーバーにキー値の設定を要求します。設定が成功すると、ロックは成功します。
2. クライアント B も、サーバーにキー値の設定を要求します。戻りが失敗した場合、ロックが失敗したことを意味します
3. クライアント A はコードの実行を完了し、ロックを削除します
4. クライアント B は待機後にキー値の設定を要求します
5. クライアント B がコードを実行し、ロックを削除します
$redis->set($key, $value, array('nx', 'ex' => $ttl)); //ex表示秒
Redis 関連の知識の詳細については、Redis の使用法チュートリアルをご覧ください。 ### カラム!
以上がRedisをロックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











この記事では、Redisバージョンの互換性の課題について説明します。 メジャーバージョンのアップグレードは、コマンド、データ構造、構成の変更により、大きな互換性リスクをもたらします。 この記事は、Redis-Cliを利用して、徹底的なテストを強調しています

この記事では、Redisクラスターでシャードキーを選択し、パフォーマンス、スケーラビリティ、データ分布への影響を強調しています。重要な問題には、データ分布の確保、アクセスパターンの調整、一般的な間違いの回避lが含まれます。

この記事では、Redisサーバーバージョンをチェックする方法について詳しく説明しています。 Redis-Cli -VersionとInfo Serverを使用して、構成ファイル、プロセスリスト、パッケージマネージャーを調べることを比較します。 redis-cli内の情報サーバーコマンドはtとして識別されます

この記事では、コマンドラインを介してRedisサーバーバージョンを確認する方法について詳しく説明します。 主要な方法であるRedis-Cli Info Serverは、サーバーの出力からバージョン情報を効率的に取得し、直接的で信頼できるソリューションを提供します。 代替a

この記事では、Redisバージョン番号、その文字列データ型、およびバージョンをチェックする方法(Redis-Cli、構成ファイル、またはプログラムで)を詳しく説明しています。 また、主要バージョン間の違いを調査し、パフォーマンスの拡張器に焦点を当てています

この記事では、時間ベースの有効期限、イベント駆動型の方法、バージョン化など、Redisでキャッシュの無効化を実装および管理するための戦略について説明します。また、キャッシュの有効期限と監視とオートマットのツールのベストプラクティスもカバーしています

この記事では、Redisでの認証と承認の実装について説明し、ACLSを使用し、Redisを保護するためのベストプラクティスの有効化に焦点を当てています。また、Redisセキュリティを強化するためのユーザー許可とツールの管理をカバーしています。

この記事では、ジョブキューとバックグラウンド処理にRedisを使用し、セットアップ、ジョブの定義、実行の詳細を使用しています。アトミックオペレーションやジョブの優先順位付けなどのベストプラクティスをカバーし、Redisが処理効率を高める方法を説明します。
