Redis をメッセージキューとして使用できますか?
アプリケーション シナリオ:
たとえば、フラッシュ セール。大量の注文が瞬時にデータベースに書き込まれ、データベースが時間内に応答できなくなります。現時点では、Redis をメッセージ キューとして使用し、最初に書き込む必要があるすべてのデータを Redis メッセージ キューに書き込んでから、サーバー上で php-cli プロセスを開始してキュー内のデータをループで読み取ることができます。そしてそれをデータベースに非同期で書き込みます。 Redis をメッセージ キューとして使用すると、メッセージ受信の確認メカニズムがないため、メッセージが失われる可能性があります。大規模なプログラムでは、RabitMQ などを専門的なメッセージ キューとして使用する必要があります。
1. パブリッシュ/サブスクライブ メソッドをメッセージ キューとして使用する
特徴: 1 つのメッセージ パブリッシャー (プロデューサー) が複数のメッセージ サブスクライバー (コンシューマー) に対応できます。メッセージがメッセージ キューにパブリッシュされると、すべてのメッセージ サブスクライバーがメッセージを受信できます。分散メッセージの配信に適しています。クライアントは、ブロッキング方式でパブリッシュ側からのメッセージを待ちます。複数のコンシューマーがメッセージの消費を高速化することはできません。
メッセージ生成:
$params =json_encode(['x_uid' => $x_uid, 'phone' => $phone]); $redis->publish('test',$params); //test表示发布的频道名字
メッセージ消費 (php-cli モード操作):
$redis = new Redis(); $redis->pconnect('127.0.0.1'); //必须用pconnect长连接 //设置redis连接永远不超时。默认60s超时断开连接 $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); $redis->subscribe(array('test'), 'callback'); //test表示频道名字,callback 回调函数名 functioncallback($redis, $chan, $msg){ //对收到的消息进行处理函数 $params = json_decode($msg,true); .... }
pconnect と connect の違い:
connect: connect afterスクリプトが終了してリリースされました。
pconnect: スクリプトの終了後も接続は解放されず、接続は php-fpm プロセスに残ります。
したがって、connect の代わりに pconnect を使用すると、頻繁に確立される Redis 接続の消費量を削減できます。
2. Redis メッセージ キューとしてリストを使用する
特徴: メッセージ プロデューサーはメッセージ コンシューマーに対応します。複数のコンシューマを使用すると、メッセージの消費を高速化できます。
メッセージ生成:
$redis =newRedis(); $redis->connect('127.0.0.1'); //将需要写入数据库的数据全部push到队列(复杂数据可以先json编码成字符串) $list = json_encode(['x_uid' => $x_uid, 'phone' => $phone, 'goods_id' => $goodsId, 'add_time' => time(), 'num_field' => $num_field]); $redis->lpush('winer',$list);
注: brpop 消費データがデータベースに正常に書き込まれない場合、データ損失が発生します。本番データが強く必要な場合は、Redis またはファイルにセカンダリ バックアップを実行する必要があります。
メッセージ消費 (php-cli モード操作):
注: MySQL が接続を積極的に閉じない場合、接続は最大 8 時間後に自動的に切断されます。
<?php //链接数据库 $conn = mysqli_connect("localhost","root","root"); if(!$conn){ die("连接数据库失败:". mysqli_error()); } mysqli_select_db($conn,"api"); //字符转换,读库 mysqli_query($conn,"set character set 'utf8'"); //写库 mysqli_query($conn,"set names 'utf8'"); //连接本地的 Redis 服务 $redis =newRedis(); $redis->connect('127.0.0.1',6379); //设置redis连接永远不超时。默认60s超时断开连接 $redis->setOption(Redis::OPT_READ_TIMEOUT,-1); echo 'Listening...'; $i =1; while(true){ $data = $redis->brpop('winer',0); // 0表示没有接收到参数的情况下,永远不超时断开 $info = json_decode($data[1],true); $x_uid = $info['x_uid']; $phone = $info['phone']; $goods_id = $info['goods_id']; $add_time = $info['add_time']; $num_field = $info['num_field']; //将数组写入数据库、订单 $sql = "insert into hd_hengda11_order (`x_uid`,`phone`,`goods_id`,`add_time`) values ($x_uid,$phone,$goods_id,$add_time)" $re = mysqli_query($conn,$sql); echo $i.'_ok||'; $i++; } ?>
その他:
製品の売れすぎを防ぐためのフラッシュ セール シナリオ:
1. データベース内の製品数量を符号なしに設定します。つまり、負の数値は許可されません。商品数量が負の数に更新された場合、false が返されます。
2. 商品の数量は Redis リストのキューに格納され、ラッシュが発生するたびにキューから要素がポップされます。
//存放商品数量的队列 for($j =1; $j <=10; $j++){ /设置商品数量为10 $re =Redis::lpush(gooods_count,1); }
製品数量ロジックの判断
$count=Redis::lpop('gooods_count'); //$count = Redis::llen('gooods_count'); //llen判断队列长度 if(!$count){ return'已经抢光了哦'; }
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サーバーバージョンを確認する方法について詳しく説明します。 主要な方法であるRedis-Cli Info Serverは、サーバーの出力からバージョン情報を効率的に取得し、直接的で信頼できるソリューションを提供します。 代替a

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

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

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

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

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

この記事では、Pub/サブメッセージング、セットアップ、ベストプラクティスのカバー、メッセージの信頼性の確保、監視のパフォーマンスにRedisを使用する方法について説明します。
