当前位置: 首页 > 后端技术 > PHP

PHP守护进程使用Redis队列实现业务

时间:2023-03-29 22:10:05 PHP

PHP可以使用GO或者这种无限队列使用场景,推送大量用户信息,发送大量祝福短信等核心技术点Redislpushbrpoplpush负责用于向key写入数据brpop阻塞方式获取key中的值,实现业务模拟实例。向用户发送短信PHP版本代码2.0生成器*日期:2019-12-02*时间:11:11*/ini_set('default_socket_timeout',-1);//没有超时//声明对象$redis=new\Redis();//连接Redis$r=$redis->connect('127.0.0.1',6379);//选择RedisDB$redis->select(4);//声明短信队列的key$key='SMS_QUEUE';//写入数据($i=0;$i<10;$i++){//获取随机手机号//有时不同用户的文本内容不同,最好分开设置。注意键名可以根据情况改变//进入队列$redis->lPush($key,$json);回声“是的:”。$我。PHP_EOL;}functionrandomPhoneNumber(){//电话号码$header=["133","149","153","173","177","180","181","189","199","130","131","132","145","155","156","166","171","175","176","185","186","166","134","135","136","137","138","139","147","150","151","152","157","158"","159","172","178","182","183","184","187","188","198","170","171"];$count=count($header);$header_value=rand(0,$count-1);return$header[$header_value].'****'.rand(1000,9999);}Consumer*日期:2019-12-02*时间:10:58*/ini_set('default_socket_timeout',-1);//没有超时$redis=new\Redis();$redis->connect('127.0.0.1',6379);$redis->select(4);//切换到db4$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);While($key_arr=$redis->brpop('SMS_QUEUE',0)){try{//key_arr是一个数组0表示键名SMS_QUEUE,1表示获取的值usleep(100000);$json=$key_arr[1];//解析json$json_arr=json_decode($json,true);if(is_array($json_arr)&&count($json_arr)==2){if(!sms($json_arr["mobile"],$json_arr["msg"])){thrownewException("发送失败");}}else{thrownewException("解析失败");}}catch(Exception$e){//左队列$redis->lPush("SMS_QUEUE",$json);}}//发送短信功能functionsms($mobile,$msg){echo'用户电话号码:'.$手机。',信息:'。$味精。'发送成功!'。PHP_EOL;returntrue;}PHP版本代码1.0Producer*日期:2019-12-02*时间:11:11*/ini_set('default_socket_timeout',-1);//没有超时//声明对象$redis=new\Redis();//连接Redis$r=$redis->connect('127.0.0.1',6379);//选择RedisDB$redis->select(4);//声明key$keyofSMSqueue='SMS_QUEUE';//Writedatafor($i=0;$i<10;$i++){//获取随机电话号码$m=randomPhoneNumber();//左队列$redis->lPush($key,$m);//有时不同用户的文本内容不同,最好分开设置注意键名可以根据情况更改$redis->set($m,'[Ditick]亲爱的用户您好!祝您新年快乐!');回声“是的:”。$我。PHP_EOL;}functionrandomPhoneNumber(){//电话号码$header=["133","149","153","173","177","180","181","189","199","130","131","132","145","155","156","166","171","175","176","185","186","166","134","135","136","137","138","139","147","150","151","152","157","158"","159","172","178","182","183","184","187","188","198","170","171"];$count=count($header);$header_value=rand(0,$count-1);返回$header[$header_value]。'****'。兰特(1000,9999);}消费者*日期:2019-12-02*时间:10:58*/ini_set('default_socket_timeout',-1);//没有超时$redis=new\Redis();$redis->connect('127.0.0.1',6379);$redis->select(4);//切换到db3$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);While($key_arr=$redis->brpop('SMS_QUEUE',0)){//key_arr是一个数组0表示键名SMS_QUEUE,1表示获取的值usleep(100000);$key=$key_arr[1];如果($msg=$redis->get($key)){短信($key,$msg);$redis->del(key());}}//发送短信功能functionsms($mobile,$msg){echo'用户电话号码:'.$手机。',信息:'。$味精。'发送成功!'。PHP_EOL;}守护进程可以用nohup创建,守护进程作者写的corntabsupervisor可以为消费者创建。比较进程关闭再重启?问题-lpush手机号多怎么办?swoole多线程