资讯专栏INFORMATION COLUMN

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

endiat / 2068人阅读

摘要:基于消息队列实现的消息推送基本知识点重点用到了以下命令实现我们的消息推送阻塞模式从队列右边获取值之后删除从队列的右边取值之后删除,从左侧放置到队列中逻辑分析在普通的任务脚本中写入队列要发送消息的目标,并为目标设置一个要推送的内容,永不过期中

基于Redis消息队列实现的消息推送 基本知识点

重点用到了以下命令实现我们的消息推送

brpop 阻塞模式 从队列右边获取值之后删除

brpoplpush 从队列A的右边取值之后删除,从左侧放置到队列B中

逻辑分析

在普通的任务脚本中写入push_queue队列要发送消息的目标,并为目标设置一个要推送的内容,永不过期

RedisPushQueue中brpoplpush处理,处理后的值放到temp_queue,主要防止程序崩溃造成推送失败

RedisAutoDeleteTempqueueItems处理temp_queue,这里用到了brpop

代码实现

普通任务脚本

lPush("push_queue",$k_name);//左进队列
    $redis->set($k_name, "推送内容");
}

RedisPushQueue

connect("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("_", $key);
        if (count($arr) != 4) {
            continue;
        }
        $id = $arr[2];
        push($id, $val);
        //删除key内容
        $redis->del($key);
    }  
}
function push($id, $v)
{
  //推送操作~
}

RedisAutoDeleteTempqueueItems

connect("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){
        continue;
    }
    $key =$key_arr[1];
    if($redis->get($key)){//能获取到值 说明RedisPushQueue执行失败
        $redis->lPush("push_queue",$key);
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29697.html

相关文章

  • 基于Redis消息队列实现消息推送

    摘要:基于消息队列实现的消息推送基本知识点重点用到了以下命令实现我们的消息推送阻塞模式从队列右边获取值之后删除从队列的右边取值之后删除,从左侧放置到队列中逻辑分析在普通的任务脚本中写入队列要发送消息的目标,并为目标设置一个要推送的内容,永不过期中 基于Redis消息队列实现的消息推送 基本知识点 重点用到了以下命令实现我们的消息推送 brpop 阻塞模式 从队列右边获取值之后删除 brpo...

    superPershing 评论0 收藏0
  • laravel 队列

    摘要:如果任务没有在规定时间内完成,那么该有序集合的任务将会被重新放入队列中。这两个进程操纵了三个队列,其中一个,负责即时任务,两个,负责延时任务与待处理任务。如果任务执行成功,就会删除中的任务,否则会被重新放入队列中。 在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用 kafka、RabbitMQ 等重量级的消息队列,但是又的确需要异步、重试...

    BDEEFE 评论0 收藏0
  • laravel 队列

    摘要:如果任务没有在规定时间内完成,那么该有序集合的任务将会被重新放入队列中。这两个进程操纵了三个队列,其中一个,负责即时任务,两个,负责延时任务与待处理任务。如果任务执行成功,就会删除中的任务,否则会被重新放入队列中。 在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用 kafka、RabbitMQ 等重量级的消息队列,但是又的确需要异步、重试...

    Scorpion 评论0 收藏0
  • App后台api开发前准备

    摘要:负责从拉取数据源,把数据源分词,建立索引搜索模块工作流程如下模块从中拉取数据模块用经过中文分词后的数据建立索引客户端向模块发起搜索请求模块查找索引中的数据模块得到索引中符合要求的数据的等数据把数据返回给客户端 (整理自《App后台开发运维和架构实践》 作者:曾健生) 一、从业务逻辑中提炼API接口 此过程可分为六个阶段: 业务逻辑思维导图 功能——业务逻辑思维导图 基本功能模块关系 ...

    yzzz 评论0 收藏0
  • App后台api开发前准备

    摘要:负责从拉取数据源,把数据源分词,建立索引搜索模块工作流程如下模块从中拉取数据模块用经过中文分词后的数据建立索引客户端向模块发起搜索请求模块查找索引中的数据模块得到索引中符合要求的数据的等数据把数据返回给客户端 (整理自《App后台开发运维和架构实践》 作者:曾健生) 一、从业务逻辑中提炼API接口 此过程可分为六个阶段: 业务逻辑思维导图 功能——业务逻辑思维导图 基本功能模块关系 ...

    laoLiueizo 评论0 收藏0

发表评论

0条评论

endiat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<