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

基于Redis消息队列的消息推送

时间:2023-03-30 01:49:48 PHP

基于Redis消息队列的消息推送基础知识主要使用如下命令来实现我们的消息推送brpop阻塞方式从队列右侧取值后删除brpoplpush从队列A右侧取值后删除,并从左边开始放入队列B逻辑分析在普通任务脚本中编写push_queue队列发送消息的target,并为target设置一个要推送的内容,永不过期。RedisPushQueue中的brpoplpush进程会进行处理,处理后的值会放到temp_queue中,主要是防止程序崩溃导致pushFailRedisAutoDeleteTempqueueItems处理temp_queue,这里使用brpop代码实现普通任务脚本lPush('push_queue',$k_name);//离开队列$redis->set($k_name,'Pushcontent');}RedisPushQueueconnect('127.0.0.1',6379);$redis->select(2);//切换到db2$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);//temp_queue临时队列,防止程序崩溃导致队列中的内容丢失。0表示永不超时!while($key=$redis->brpoplpush('push_queue','temp_queue',0)){if($val=$redis->get($key)){//rabbit_push_20_175990$arr=explode('_',$键);如果(计数($arr)!=4){继续;}$id=$arr[2];推($id,$val);//删除key内容$redis->del($key);}}functionpush($id,$v){//推送操作~}RedisAutoDeleteTempqueueItemsconnect('127.0.0.1',6379);$redis->select(2);//切换到db2$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);while($key_arr=$redis->brPop('temp_queue',0)){if(count($key_arr)!=2){继续;}$key=$key_arr[1];if($redis->get($key)){//可以得到值表示RedisPushQueue执行失败$redis->lPush('push_queue',$key);}}

猜你喜欢