1. 程式人生 > >shell模擬php多程序從redis獲取資料(多個庫)

shell模擬php多程序從redis獲取資料(多個庫)

背景:現在的資料已經寫到了redis佇列裡面,完成了入棧的操作,後期打算從redis獲取資料,完成出棧的操作,出棧後然後做一系列的邏輯處理

      環境: VMware虛擬機器  記憶體:1G   硬碟:60G  php環境:PHP Version 5.6.31  php框架:TP

      測試:事先在redis裡面插入了30W條資料,分別模擬php單程序和多程序(3個多程序)

      php單程序程式碼:

public function sinsert() {
        //$redis = new Redis();  
        //$redis->connect('127.0.0.1', 6379);
        //寫到list型別快取裡面
        //lpush('zc_hk_list', serialize($zc_hk))
        //$accountRepayModel = D('AccountRepay');
        $this->repay->start();
        for($i=1;$i<=300000;$i++) {
          $arr = array("k"=>$i,"v"=>"dan".$i);
          //var_dump($arr);//exit;         
            $this->redis->lpush('hongniu', serialize($arr));
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '全量寫入redis資料傳送指令碼');
        $this->repay->clear();
        /*$key = 'name';
        $value = $redis->get($key);
        var_dump($value);*/
    }
    public function slist() {
        $this->repay->start();
        $list_len  = $this->redis->llen('hongniu');
        Log::write('單程序一共有:'.$list_len."條");

        if ($list_len == 0) return;
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多程序寫日誌的結果是1:'.json_encode($repayment_data));
             Log::write('單程序寫日誌的結果是:'.json_encode($repayment_data));
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '單程序匯出redis資料指令碼');
        $this->repay->clear();
    }

php多程序程式碼

public function binsert() {
        //$redis = new Redis();  
        //$redis->connect('127.0.0.1', 6379);
        //寫到list型別快取裡面
        //lpush('zc_hk_list', serialize($zc_hk))
        //$accountRepayModel = D('AccountRepay');
        $this->repay->start();
        for($i=1;$i<=300000;$i++) {
          $arr = array("k"=>$i,"v"=>"dan".$i);
          //var_dump($arr);//exit;
          if($i%3==0) {
            $this->redis->select(0);
            $this->redis->lpush('hongniu0', serialize($arr));
          }elseif($i%3==1) {
            $this->redis->select(1);
            $this->redis->lpush('hongniu1', serialize($arr));
          }else{
            $this->redis->select(2);
            $this->redis->lpush('hongniu2', serialize($arr));
          }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '全量分別寫入不同redis資料傳送指令碼');
        $this->repay->clear();
        /*$key = 'name';
        $value = $redis->get($key);
        var_dump($value);*/
    }
    public function blist1() {
        $this->repay->start();
        $this->redis->select(0);
        $list_len  = $this->redis->llen('hongniu0');
        Log::write('多程序一一共有:'.$list_len."條");
     
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu0');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多程序寫日誌的結果是1:'.json_encode($repayment_data));
              Log::write('多程序寫日誌的結果是1:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist1_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多程序匯出redis資料指令碼1');
        $this->repay->clear();
    }  
    public function blist2() {

        $this->repay->start();
        $this->redis->select(1);
        $list_len  = $this->redis->llen('hongniu1');
        Log::write('多程序二一共有:'.$list_len."條");
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu1');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多程序寫日誌的結果是1:'.json_encode($repayment_data));
              Log::write('多程序寫日誌的結果是2:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist2_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多程序匯出redis資料指令碼2');
        $this->repay->clear();
    }  
    public function blist3() {
        $this->repay->start();
        $this->redis->select(2);
        $list_len  = $this->redis->llen('hongniu2');
        Log::write('多程序三一共有:'.$list_len."條");
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu2');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多程序寫日誌的結果是1:'.json_encode($repayment_data));
              Log::write('多程序寫日誌的結果是3:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist3_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多程序匯出redis資料指令碼3');
        $this->repay->clear();
    }

測試結果如下所示: