redis 发布和订阅的php应用(异步任务处理)

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:


pubsub1

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:


pubsub2

PHP应用

可简单利用redis的这一功能做一个异步任务处理应用,首先建立一个(任务)订阅者,接收(任务)发布者发送的任务消息。

//taskWorker.php 任务处理者
ini_set('default_socket_timeout', -1);  //避免在默认的配置下,1分钟后终端了与redis服务器的链接
$redis = new Redis();
$redis->connect('192.168.1.12',6379);
$redis->subscribe(['task_queue'], function($redis,$chan,$msg){
    switch ($chan) {
        case 'task_queue':
            $task = unserialize($msg);
            if($task['task']=='send_email'){
                // send email
            }
            // do other job
            break;
        default:
            break;
    }
});

运行该脚本:

php taskWorker.php

生产环境中可利用supervisor后台运行该脚本,处理任务消息。可以把这个脚本当作一个任务处理机器,接收各种任务指示并处理。

//taskPub.php  任务发布者
$redis = new Redis();
$redis->connect('192.168.1.12');
$task = [
    'task'=>'send_email',
    'data'=>'你好,隔壁老王',
];
$redis->publish('task_queue', serialize($task));

该脚本可以封装成一个易用的类,融入与你的业务代码中进行任务添加。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,154评论 19 139
  • 安全性 设置客户端连接后进行任何其他指令前需要使用的密码。 警告:因为redis 速度相当快,所以在一台比较好的服...
    OzanShareing阅读 1,983评论 1 7
  • linux 启动 redis:cd /usr/local/redis-3.2.0src/redis-server ...
    晏子小七阅读 10,137评论 0 11
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,359评论 1 51
  • 概念 Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value内存数据库,...
    jiangmo阅读 748评论 0 3

友情链接更多精彩内容