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