一、建立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; }