ホームページ  >  記事  >  データベース  >  Redis フラッシュ セール シナリオ ソリューション

Redis フラッシュ セール シナリオ ソリューション

尚
転載
2020-05-25 09:02:272797ブラウズ

Redis フラッシュ セール シナリオ ソリューション

高トラフィックのプログラムの開発では、必然的に同時実行性の高いアプリケーション シナリオが発生します。このソリューションは、メッセージ キューとロックの 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(&#39;127.0.0.1&#39;, 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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。