ホームページ >バックエンド開発 >PHPチュートリアル >PHP および MySQL でのメッセージ分散とキューのタスク スケジューリングに関する設計アイデアと実装計画
PHP および MySQL でのメッセージ配信とキューのタスク スケジューリングに関する設計アイデアと実装計画
1. はじめに
インターネットの規模が拡大し続ける中、アプリケーション ユーザーのニーズが高まるにつれ、システムの同時処理機能とタスク スケジューリング機能が重要な考慮事項になっています。キューは、メッセージを効果的に配布し、タスクをスケジュールできる、一般的に使用されるソリューションです。この記事では、PHP と MySQL でキュー メッセージの分散とタスクのスケジューリングを設計および実装する方法を紹介します。
2. 設計アイデア
キューのメッセージ配信およびタスク スケジュール システムを設計するときは、次の側面を考慮する必要があります:
3. 実装計画
メッセージ ストレージ
次の構造を持つメッセージ ストレージ テーブルを MySQL に作成します:
CREATE TABLE queue ( id INT AUTO_INCREMENT PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
Message送信するときは、メッセージの内容と現在時刻をこのテーブルに挿入します。
メッセージ受信時、未処理のメッセージを作成時刻順にテーブルから読み出します。
メッセージをパブリッシュするコード例:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->publish('channel', 'message');
メッセージをサブスクライブするコード例:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->subscribe(['channel'], function ($redis, $channel, $message) { // 处理消息的逻辑 echo $message; });
タスク スケジュール
タスクスケジュールを使用できる スケジュールされたタスクを実装するには、たとえば、Linux crontab を使用して PHP スクリプトを定期的に実行します。
次の構造を持つタスク テーブルを MySQL に作成します:
CREATE TABLE tasks ( id INT AUTO_INCREMENT PRIMARY KEY, command VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
タスクを追加するコード例:
$command = 'php /path/to/script.php'; $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password'); $stmt = $pdo->prepare('INSERT INTO tasks (command) VALUES (?)'); $stmt->execute([$command]);
スケジュールされたタスクのコード例:
schedule.php的代码示例:$pdo = 新しい PDO('mysql : host=localhost;dbname=mydb', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM タスク ORDER BY created_at ASC');
$tasks = $ stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($tasks としての $task) {
exec($task['command']);
$pdo->query(' DELETE FROM タスク WHERE id = ' . $task['id']);
}
以上がPHP および MySQL でのメッセージ分散とキューのタスク スケジューリングに関する設計アイデアと実装計画の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。