検索
ホームページPHPフレームワークThinkPHPThinkPHP6 分散ロック実装ガイド: 同時実行性の問題の解決

ThinkPHP6 分散ロック実装ガイド: 同時実行性の問題の解決

ThinkPHP6 分散ロック実装ガイド: 同時実行の問題の解決

はじめに:
同時アクセスのあるシステムでは、多くの場合、複数のユーザーまたはプロセスが同時にシステムにアクセスします。同じリソース上で動作する場合、リソースへの相互排他的アクセスを保証するメカニズムが必要です。分散ロックは同時実行性の問題を解決するために使用されるメカニズムで、同時に 1 つのスレッドだけが共有リソースにアクセスできるようにします。

この記事では、分散ロックを実装するために、ThinkPHP6 フレームワークのバックエンド ストレージとして Redis を使用する方法を紹介します。コード例を通じて、読者が分散ロックの原理と実際のプロジェクトでのその応用を理解するのに役立ちます。

1. 分散ロックの原理
分散ロックの実装原理は非常にシンプルで、その中心的な考え方は、共有リソースを通じてクリティカル セクションへのアクセスを制御することです。スレッドがクリティカル セクションにアクセスする場合、まずロックの取得を試行します。ロックの取得に成功すると、クリティカル セクションに入ることができます。取得できなかった場合は、他のスレッドがロックを解放するのを待つ必要があります。もう一度やり直してください。

Redis では、SETNX コマンドを使用して分散ロックを実装できます。 SETNX コマンドは、キーと値のペアを設定するために使用されます。キーが存在しない場合、設定は成功して 1 が返され、キーがすでに存在する場合、設定は失敗して 0 が返されます。この機能を使用すると、分散ロックの実装を次の手順に簡素化できます:

  1. SETNX コマンドを使用してロックの取得を試行します。1 が返された場合は、取得が成功したことを意味し、次の手順を実行できます。クリティカル セクションを入力してください。
  2. SETNX コマンドが 0 を返した場合、ロックが他のスレッドによって占有されていることを意味します。しばらく待ってから、再度ロックを取得してみてください。
  3. 操作を実行するためのクリティカル セクション;
  4. 操作が完了したら、DEL コマンドを呼び出してロックを解放します。

2. ThinkPHP6 での分散ロックの使用

  1. Redis 拡張機能のインストール
    Redis をバックエンド ストレージとして使用する前に、まず Redis 拡張機能をインストールする必要があります。 。次のコマンドを使用してインストールできます:
composer require topthink/think-redis
  1. Redis 構成の設定
    config/database.php ファイルに、Redis 構成情報を追加します:
'redis' => [
    'host'       => '127.0.0.1',
    'port'       => 6379,
    'password'   => '',
    'select'     => 0,
    'timeout'    => 0,
    'expire'     => 0,
    'persistent' => false,
    'prefix'     => '',
],
  1. 分散ロックの使用
    ThinkPHP6 では、Redis クラスを通じて分散ロックを実装できます。以下はサンプルコードです:
<?php
namespace appcontroller;

use thinkacadeRedis;

class Index
{
    public function index()
    {
        // 获取锁的键名
        $lockKey = 'my_lock';

        // 尝试获取锁
        $result = Redis::setnx($lockKey, 1);
        if ($result) {
            // 获取锁成功,进入临界区

            // 执行操作...

            // 释放锁
            Redis::del($lockKey);
        } else {
            // 获取锁失败,等待一段时间后再次尝试
            sleep(1);
            $this->index();
        }
    }
}

上記のサンプルコードでは、まず setnx メソッドを使用してロックの取得を試みます。1 が返された場合は、ロックの取得が成功したことを意味し、操作を実行するためにクリティカル セクションに入ります。0 が返された場合は、ロックが他のスレッドによって占有されていることを意味します。1 秒待ってから再試行してください。操作後はdelメソッドでロックを解除してください。

ネットワーク遅延や競合要因により、ロックを取得しようとすると取得失敗が発生する可能性があるため、合理的な再試行戦略を設定する必要があることに注意してください。

概要:
この記事では、Redis を使用して ThinkPHP6 フレームワークに分散ロックを実装する方法を紹介します。分散ロックの取得と解放は、setnx コマンドを使用して簡単に実行できます。実際のプロジェクトでは、複数のユーザーまたはプロセスが同じリソースを同時に操作する場合、分散ロックを使用すると同時実行の問題を効果的に回避し、システムのパフォーマンスと信頼性を向上させることができます。

分散ロックの原理と ThinkPHP6 でのその応用を習得することで、開発者は分散ロックをより適切に利用して共有リソースを保護し、システムの同時処理能力を向上させることができます。同時に、実際のアプリケーションでは、システムの安定性と高可用性を確保するために、特定のビジネス ニーズとパフォーマンス チューニングに従って再試行戦略を合理的に構成する必要があります。

以上がThinkPHP6 分散ロック実装ガイド: 同時実行性の問題の解決の詳細内容です。詳細については、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。