
我用队列发送电子邮件,失败的我重新加入队列,为什么失败的不会重新发送呢?
public function email(){
$redis = new \Redis();
$redis->connect('127.0.0.1',6379);
//$redis->set('test','hello world!');
//echo $redis->get("test");
$redis_name = 'fayoujian';
for($i=10000;$i<=100100;$i++){
$email = $i."@qq.com";
//获取一下redis里面已有的数量
$num = 10;
//如果当天人数少于10的时候,则加入这个队列
if($redis->lLen($redis_name)<10){
$redis->rPush($redis_name,$email);
//$result = sendMail($email,'你好啊','周末愉快!');
echo $email."发送成功!";
}else{
//如果邮件已经达到十个,则返回发送已完成
//echo "发送结束!";
}
}
if(IS_POST){
$email = '';
//$email = $_POST['email'];
$zhuti = $_POST['zhuti'];
$content = $_POST['content'];
/* for($i=10000;$i<=10010;$i++){
$email = $i."@qq.com";
$result = sendMail($email,'你好啊','周末愉快!');
}
*/
/*
if($result){
$arr['status'] = 1;
$arr['msg'] = '发送成功!';
}else{
$arr['status'] = 0;
$arr['msg'] = '发送失败!';
}
$this->ajaxReturn($arr);*/
}else {
$info = $this->fuwuqi();
//dump($res);
$this->assign('info',$info);
$this->display();
}
}
public function get_redis(){
set_time_limit(0);
$redis = new \Redis();
$redis->connect('127.0.0.1',6379);
$redis_name = 'fayoujian';
//死循环
while(1){
//从队列最左侧取出一个值来
$user = $redis->lPop($redis_name);
//然后判断这个值是否存在
if(!$user || $user == 'nil'){
sleep(20);
continue;
}
//切割出时间,uid
$res = sendMail($user,'朋友你好啊','周末愉快!');
//数据库插入的失败的时候的回滚机制
if(!$res){
$redis->rPush($redis_name,$user);
}
sleep(20);
}
//释放一下redis
$redis->close();
} 最佳答案