zoukankan      html  css  js  c++  java
  • PHP 使用redis队列批量发送

    收集了一批微信小程序的订阅消息,现在要发送

    如果直接从数据库中获取,循环发送,数量不多还好,数量一多,将极大占用服务器资源,甚至造成卡顿。

    这个时候就要用到redis的队列异步发送了。

    直接上代码,本示例使用YII2框架

            //获取数据
            $subArr=XcxSubscribe::find()->where(['title'=>$title,'status'=>0])->orderBy('id desc')->asArray()->all();
            //将数据插入队列
            $redis=Yii::$app->redis;
            $redis->select(2);//选择redis数据库
            if (!empty($subArr)){
                foreach ($subArr as $k=>$v){
                     $redis->rpush($title,json_encode($v));//将每一条数组插入到队列,等待发送
                }
            }else{
                return Json::encode(['code'=>400,'msg'=>'无数据']);
            }
    
            $messages=$redis->lrange($title,0,-1);//将队列中的数据取出来
            //var_dump($messages);exit;
    
            if (!empty($messages)){
                //循环发送
                foreach ($messages as $k=>$v){
                    $message=json_decode($v,true);
                    $dataArr=array(
                        "touser"=>$message['openid'], //接收用户的openid
                        "template_id"=>$message['template_id'],  //模板id
                        "page"=>$message['page'],//点击模板消息跳转至小程序的页面   支持带参数,(示例index?foo=bar)
                        "data"=>$conArr
                    );
    
                    //var_dump($dataArr);exit;
                    $res=$this->curl($subscribeUrl,$params=json_encode($dataArr),$ispost=1,$https=1); 
                    //失败
                    if (stripos($res,'4')){
                        //失败的
                        array_push($openidArr,$message['openid']);
                    }else{
                        //成功的
                        array_push($sopenidArr,$message['openid']);
                    }
    
                    //从队列中删除
                    $redis->lrem($title,0,$v);
                }
    
                return Json::encode(['code'=>200,'msg'=>'发送成功','data'=>[
                    'openidArr'=>$openidArr,
                    'sopenidArr'=>$sopenidArr,
                ]]);
    
            }else{
                return Json::encode(['code'=>400,'msg'=>'队列中无数据']);
            }
    

      

  • 相关阅读:
    下载文件总结
    用PHP,怎么获取PHP.ini中的文件上传最大的字节数。也就是默认的2M
    TP框架下载功能 - 不想下天桥 - 博客园
    CSS,font-family,好看常用的中文字体
    安装Wamp后 Apache无法启动的解决方法
    :nth-child(n)
    list-style
    netbeans常用快捷键
    ideaic快捷键
    配置nutch
  • 原文地址:https://www.cnblogs.com/jackzhuo/p/12880801.html
Copyright © 2011-2022 走看看