ホームページ データベース Redis Redisをロックする方法

Redisをロックする方法

Jun 28, 2019 pm 03:24 PM

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Redisのさまざまなバージョンの互換性はどのようにありますか Redisのさまざまなバージョンの互換性はどのようにありますか Mar 04, 2025 pm 05:57 PM

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

Redisクラスターでシャードキーを選択するにはどうすればよいですか? Redisクラスターでシャードキーを選択するにはどうすればよいですか? Mar 17, 2025 pm 06:55 PM

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

Redisバージョンを表示するためのショートカットはありますか? Redisバージョンを表示するためのショートカットはありますか? Mar 04, 2025 pm 05:59 PM

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

コマンドライン経由でRedisからバージョンを表示する方法 コマンドライン経由でRedisからバージョンを表示する方法 Mar 04, 2025 pm 06:00 PM

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

Redisバージョン番号は何ですか Redisバージョン番号は何ですか Mar 04, 2025 pm 06:01 PM

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

Redisでキャッシュ無効化戦略を実装するにはどうすればよいですか? Redisでキャッシュ無効化戦略を実装するにはどうすればよいですか? Mar 17, 2025 pm 06:46 PM

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

Redisで認証と承認を実装するにはどうすればよいですか? Redisで認証と承認を実装するにはどうすればよいですか? Mar 17, 2025 pm 06:57 PM

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

ジョブキューとバックグラウンド処理にRedisを使用するにはどうすればよいですか? ジョブキューとバックグラウンド処理にRedisを使用するにはどうすればよいですか? Mar 17, 2025 pm 06:51 PM

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

See all articles