redis 隊列

一、建立push.php測試加入隊列php

$userCache  = new Redis();
$conn       = $userCache->connect('127.0.0.1','6379');
if(!$conn){
    echo "can not connect this Redis server";die;
}

//加入隊列數據
$arr = array('h','e','l','l','o','w','o','r','l','d','q','w','e',);

//自增量
$incr = 1;

//每次重置
//$userCache->set('uid',0);

//爲了測試循環加入隊列
foreach($arr as $k=>$v){
    //用redis控制自增id,效率高於mysql自增
    $uid = $userCache->incr('uid',$incr);
    //加入隊列
    $userCache->lPush("test:list",$v);

    //輸出自增id
    echo $uid."\n\t";
}

 

二、建立pop.php讀取隊列mysql

$userCache  = new Redis();
//$conn       = $userCache->connect('10.10.90.201','6379');
if(!$conn){
    echo "can not connect this Redis server";die;
}


//出棧
while (true){
    $isHas  = $userCache->rPop("test:list");
    //列表的最後一個元素。 當列表不存在時,返回 nil
    if('nil' === $isHas){ echo "讀取完成,時間:".date('Y-m-d H:i:s')."\n\t"; break;}
    echo "出隊的值".$isHas."\n\t";
}

 

三、在項目實際能夠寫在同一個控制器redis

1)加入隊列sql

public function userLog(){
    if(empty($_GET)){
        $userArr    = array(
            'errcode'    =>-3,
            'errmsg'     =>'非法請求',
        );
        echo  json_encode($userArr,JSON_UNESCAPED_UNICODE);
        die;
    }

    $id        = $this->input->get('id');
    $cd     = $this->input->get('cd');
    $gd       = $this->input->get('gd');
    $bd      = $this->input->get('b');

    if(!$id || $cd < 0 || !$gd || !$bd){
        $userArr    = array(
            'errcode'    =>-4,
            'errmsg'     =>'參數錯誤',
        );
        echo  json_encode($userArr,JSON_UNESCAPED_UNICODE);
        die;
    }

    $logArr    = array(
        'id'           =>$id,
        'cid'       =>$cd,
        'gd'         =>$gd,
        'time'       =>time(),
        'bid'        =>$bd,
        'lid'        =>1,
    );
    $this->userCache->lPush("log",serialize($logArr));
}

2)讀取數據庫

public function boxLog(){
    echo "開始日誌任務,時間:".date('Y-m-d H:i:s')."\n\t";
    $logArr  = array();
    $i = 0;
    $j = 0;
    while (true){
        $popUserLog  = $this->userCache->rPop("log");

        if('nil' === $popUserLog){echo "讀取完成,時間:".date('Y-m-d H:i:s')."\n\t"; break;}
        $isHas    = unserialize($popUserLog);
        if(!$isHas){echo "讀取完成,時間:".date('Y-m-d H:i:s')."\n\t";break;}
        $logArr[$i]   = $isHas;

        //每100條記錄入庫一次
        if($i == 99){
            //批量存入數據庫
            ……………………
            //重寫賦值
            $logArr  = array();
            $i = 0;
        }else{
            $i++;
        }
        $j++;
    }

    if(!$logArr){echo "執行完成日誌任務,時間:".date('Y-m-d H:i:s')."共有 $j 條記錄 \n\t";die; }

    //批量存入數據庫
    ……………………

    echo "執行完成日誌任務,時間:".date('Y-m-d H:i:s')."共有 $j 條記錄 \n\t";die;
}
相關文章
相關標籤/搜索