<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文帶你了解Redis秒殺應(yīng)用場景

          共 2523字,需瀏覽 6分鐘

           ·

          2021-08-29 17:56

          在大流量程序開發(fā)中,必然會遇到高并發(fā)的應(yīng)用的場景。解決方案大致分為兩個方向,消息隊列

          redis 實現(xiàn)消息隊列核心簡單版本

          $key = 'quque';
           /**
           * 秒殺商品數(shù)量有限,預(yù)先存儲到消息隊列
           */

          public function qnquque() {
           for($i = 1 ; $i<=5 ;$i++) {
               $redis->lpush($key,$i);
              }
           }

            /**
           * 這里省略掉業(yè)務(wù)邏輯處理,默認業(yè)務(wù)邏輯處理完,出隊列
            */

            public function dequque() {
            $redis->rpop($key);
             /**
             *  這里開始商品購買后的業(yè)務(wù)邏輯處理
             */

            }

          消息隊列是防止超買超賣很好的一種解決方案,要實現(xiàn)消息隊列的高級功能需要用到專業(yè)的消息隊列工具例如(rabbitmq).用戶Redis 用戶redis實現(xiàn)消息隊列還是有一些缺點的,可以自行查找文章補充。這邊不一一概述。最大問題還是分布式集群的問題。


          Redis 樂觀鎖實現(xiàn)秒殺功能

          它的優(yōu)點如下:

          消息隊列對內(nèi)存消耗較大,10000個請求,需要操作10000 出隊列。容易造成內(nèi)存資源瞬間爆棚

          使用樂觀鎖的邏輯,CPU相對來說消耗較低、內(nèi)存資源占用少

           $redis = new redis();
              $result = $redis->connect('127.0.0.1'6379);
              $cachekey = $redis->get("cachekey");
              $number = 100;   //搶購數(shù)量
              if($cachekey<$number){
                  $redis->watch("cachekey");
                  $redis->multi();

                  //設(shè)置延遲,方便測試效果。
                  sleep(5);
                  //插入搶購數(shù)據(jù)
                  $redis->hSet("cachekeyList","user_id_".mt_rand(19999),time());
                  $redis->set("cachekey",$cachekey+1);
                  $result = $redis->exec();
                  if($result){
                      $cachekeyList = $redis->hGetAll("cachekeyList");
                      echo "恭喜".$cachekeyList."搶購成功!<br/>";
                  }else{
                      echo "再接再厲";
                      exit;
                  }
              }

          結(jié)尾

          本文并沒有從零開始業(yè)務(wù)分析,都是核心的業(yè)務(wù)邏輯代碼。需要結(jié)合實際的業(yè)務(wù)場景嵌入本文的核心實現(xiàn)邏輯。


          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  激情五月丁香小说 | 亚洲国产正在播放 | 激情五月婷婷五月 | 中文字幕在线观看免费高清完整版在线 | 微信群加人 |