1. 簡介
Redis 發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關系:
pubsub1
當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被發送給訂閱它的三個客戶端:
pubsub2
2. 實戰
1. 訂閱端代碼
<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['order'], function ($redis, $chan, $msg) {
var_dump($redis);
var_dump($chan);
var_dump($msg);
});
值得一提的是subscribe函數的第一個參數是一個數組,這意味著可以訂閱多個發布端,回調函數里面有3個參數,第一個是redis實例,第二個是訂閱的頻道,第三個是訂閱的消息內容,在命令下運行該文件就會進入等待發布端發布消息的阻塞狀態!
2. 發布端代碼
<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$order = [
'id' => 1,
'name' => '小米6',
'price' => 2499,
'created_at' => '2017-07-14'
];
$redis->publish("order", json_encode($order));
在命令行下運行該代碼,就會發現訂閱端那邊輸出了消息:
class Redis#1 (1) {
public $socket =>
resource(5) of type (Redis Socket Buffer)
}
string(5) "order"
string(70) "{"id":1,"name":"\u5c0f\u7c736","price":2499,"created_at":"2017-07-14"}"