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));

該腳本可以封裝成一個易用的類,融入與你的業務代碼中進行任務添加。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 安全性 設置客戶端連接后進行任何其他指令前需要使用的密碼。 警告:因為redis 速度相當快,所以在一臺比較好的服...
    OzanShareing閱讀 1,832評論 1 7
  • linux 啟動 redis:cd /usr/local/redis-3.2.0src/redis-server ...
    晏子小七閱讀 9,879評論 0 11
  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,120評論 1 51
  • 概念 Redis是一個開源的使用C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value內存數據庫,...
    jiangmo閱讀 647評論 0 3