redis sub/pub 踩坑系列:
首先, 我们先了解相关知识redis sub/pub(消息订阅) 是一种消息通信模式,pub是发送消息(生产者),,pub 是接收者(消费者)。其中,还隐藏着channel(通信频道)、联系,pub 通过多个 channel 发送给 sub,sub 最终进行消费
优劣对比
优势: 可监听多个通信频道, 可多个消费着消费
缺点:
数据可靠性无法保障, 因 pub 没有持久话 发送的消息是即发及丢, 无法确认 sub 接收到消息。
扩展性差: 不能通过及时增加消费者消费消息, 当 pub 消息增加过多时会造成阻塞效果,阻塞时间越长则会造成消息丢失, 数据丢失分险很大
资源消耗较高: 在pub/sub中消息发布者不需要独占一个Redis的链接,而消费者则需要单独占用一个Redis的链接
常用场景: 专栏发布,音视频发布 推送关注者,
sub/pub 代码(PHP):
// pub(生产者)
// 实例化 redis
$redisObj = new Redis(host, port);
$redisObj -> auth(password);
try {
// 进行发送消息
$redisObj->publish($channelName, json_encode($sendData);
}catch (\Exception $e){
echo $e->getmessage();
}
// sub (消费者)
try {
$redisObj = new \Redis();
//建立一个长链接
$redisObj->pconnect($redisHost, $redisPort);
$redisObj->auth($redisPass);
$redisObj->subscribe(array($channelName, $channelName2), function ($redis, $chan, $msg){
echo "channel:".$chan.",message:".$msg."\n";
})
}catch (\Exception $e){
print_r($e->getMessage());
}