高トラフィックのプログラムの開発では、必然的に同時実行性の高いアプリケーション シナリオが発生します。このソリューションは、メッセージ キューとロックの 2 つの方向に大別されます。
redis は、メッセージ キュー コアの簡易バージョンを実装します。
$key = 'quque'; /** * 秒杀商品数量有限,预先存储到消息队列 */ public function qnquque() { for($i = 1 ; $i<=5 ;$i++) { $redis->lpush($key,$i); } } /** * 这里省略掉业务逻辑处理,默认业务逻辑处理完,出队列 */ public function dequque() { $redis->rpop($key); /** * 这里开始商品购买后的业务逻辑处理 */ }
メッセージ キューは、次の用途に非常に適しています。買われすぎ、売られすぎの防止 解決策として、メッセージ キューの高度な機能を実現するには、(rabbitmq) などの専門的なメッセージ キュー ツールを使用する必要があります。自分で補足する記事。ここでは一つ一つ説明しません。最大の問題は依然として分散クラスターの問題です。
Redis オプティミスティック ロックは、フラッシュ キル機能を実装します。
その利点は次のとおりです:
メッセージ キューは大量のメモリを消費します。10,000 リクエストには必要があります。 10,000 操作、デキュー。メモリ リソースがすぐに超過してしまう可能性があります。
オプティミスティック ロックのロジックを使用すると、CPU 消費量が比較的低く、メモリ リソースが小さくなります。
$redis = new redis(); $result = $redis->connect('127.0.0.1', 6379); $cachekey = $redis->get("cachekey"); $number = 100; //抢购数量 if($cachekey<$number){ $redis->watch("cachekey"); $redis->multi(); //设置延迟,方便测试效果。 sleep(5); //插入抢购数据 $redis->hSet("cachekeyList","user_id_".mt_rand(1, 9999),time()); $redis->set("cachekey",$cachekey+1); $result = $redis->exec(); if($result){ $cachekeyList = $redis->hGetAll("cachekeyList"); echo "恭喜".$cachekeyList."抢购成功!<br/>"; }else{ echo "再接再厉"; exit; } }
Redis の詳細については、こちらをご覧ください。 redis 入門チュートリアル 列に注目してください。
以上がRedis フラッシュ セール シナリオ ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。