PHP および MySQL におけるメッセージ重複排除とメッセージべき等性におけるキュー テクノロジの適用
要約: インターネット アプリケーションの継続的な開発により、メッセージ キューは重要な要素の 1 つになりました。高度な同時実行性と非同期操作を処理するためのツール。 PHP と MySQL では、キューを使用してメッセージの重複排除とメッセージのべき等性の問題を解決するにはどうすればよいでしょうか?この記事では、Redis と MySQL を使用してこれら 2 つの機能を実装する具体的なコード例を紹介します。
サンプル コードは次のとおりです:
// 连接Redis $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 消息去重 function deduplicate($message) { if ($redis->sismember('processed_messages', $message)) { return false; // 已处理过的消息,不再处理 } // 处理消息的逻辑... $redis->sadd('processed_messages', $message); return true; }
上記のコードでは、Redis の sismember メソッドとsadd メソッドを使用して、メッセージが処理されたかどうかを判断します。メッセージが Redis コレクションの処理済み_messages に既に存在する場合、メッセージは処理されたことを意味し、直接 false が返されます。それ以外の場合は、メッセージを処理してコレクションに追加します。
サンプル コードは次のとおりです。
CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255) NOT NULL UNIQUE KEY message_index (message) );
上記のコードでは、メッセージ フィールドが UNIQUE KEY を通じて一意のインデックスを定義するメッセージ テーブルを作成しました。次に、メッセージを挿入する前に、メッセージがすでに存在するかどうかを確認する必要があります。
サンプル コードは次のとおりです。
// 连接MySQL $mysqli = new mysqli('localhost', 'username', 'password', 'database'); // 消息幂等性处理 function handle_message($message) { $escaped_message = $mysqli->real_escape_string($message); $select_query = "SELECT id FROM messages WHERE message = '$escaped_message'"; $result = $mysqli->query($select_query); if ($result->num_rows > 0) { return; // 消息已存在,不再处理 } // 处理消息的逻辑... $insert_query = "INSERT INTO messages (message) VALUES ('$escaped_message')"; $mysqli->query($insert_query); }
上記のコードでは、mysqli の real_escape_string メソッドを使用してメッセージをエスケープし、SQL インジェクション攻撃を防ぎます。次に、メッセージ テーブルにクエリを実行して、メッセージがすでに存在するかどうかを確認します。結果セットの行数が 0 より大きい場合は、メッセージがすでに存在しており、直接返すことができることを意味します。それ以外の場合は、メッセージを処理してテーブルに挿入します。
参考資料:
以上がPHP および MySQL におけるメッセージの重複排除とメッセージ冪等性におけるキュー テクノロジーの応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。