Redis(十一)基于redis的发布订阅实现

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

QQ图片20220425173502.jpg


Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。


发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。


Redis发布订阅功能


(1)发送消息


Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。


(2)订阅某个频道


Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。


下边有一个小例子,我这里使用PHP来实现:


订阅端代码:


订阅端代码需要在shell中运行:


$redis = new Redis();
    $redis->pconnect("127.0.0.1", 6379);
    //订阅
    echo "订阅msg这个频道,等待消息推送... 
";
    $redis->subscribe(["xxxx"], "callfun");
    function callfun($redis, $channel, $msg)
    {
        print_r([
            "redis"   => $redis,
            "channel" => $channel,
            "msg"     => $msg
        ]);
    }//*/


Subscribe订阅命令,第一个参数是订阅的频道,第二个参数是回调函数。


在shell中运行结果如下:


QQ图片20220425173505.jpg


等待推送。


推送端代码:


推送端在网页中运行。


$redis = new Redis();
    $redis->connect("127.0.0.1",6379);
    $redis->publish("xxxx", "来自msg频道的推送");
    echo "msg频道消息推送成功~ 
";
    $redis->close();///*/


推送端代码在网页中运行结束之后,我们去到shell中的结果如下图所示:


QQ图片20220425173508.jpg


以上大概就是实现了redis的订阅及发布。当然,实际应用中肯定和上边的例子是不一样的。


这个需要到时候再看,大概理解订阅及发布的原理就好。


最后放一下redis发布订阅常用的一些命令:


Redis 发布订阅命令下表列出了 redis 发布订阅常用命令:


序号


命令及描述


1


PSUBSCRIBE pattern [pattern   ...] 
  订阅一个或多个符合给定模式的频道。


2


PUBSUB subcommand [argument   [argument ...]] 
  查看订阅与发布系统状态。


3


PUBLISH channel message 
  将信息发送到指定的频道。


4


PUNSUBSCRIBE [pattern   [pattern ...]] 
  退订所有给定模式的频道。


5


SUBSCRIBE channel [channel   ...] 
  订阅给定的一个或多个频道的信息。


6


UNSUBSCRIBE [channel [channel   ...]] 
  指退订给定的频道。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
存储 缓存 NoSQL
聊聊 Redis 的高级特性之一: 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 图中,消费者1和消费者2 订阅了 Redis 服务的频道 channel ,当生产者通过 PUBLISH 命令发送给频道 channel 时, 这个消息就会被发送给订阅它的两个客户端。
聊聊 Redis 的高级特性之一: 发布订阅
|
6月前
|
消息中间件 移动开发 NoSQL
Redis 协议 事务 发布订阅 异步连接
Redis 协议 事务 发布订阅 异步连接
|
6月前
|
NoSQL Redis
Redis之发布订阅
Redis之发布订阅
|
22天前
|
NoSQL Redis
Redis 发布订阅
10月更文挑战第18天
27 1
Redis 发布订阅
|
2月前
|
消息中间件 存储 NoSQL
18)Redis 的发布订阅模型
18)Redis 的发布订阅模型
32 0
|
6月前
|
存储 NoSQL Redis
Redis 简介 + Python 操作发布订阅
Redis 简介 + Python 操作发布订阅
105 0
|
6月前
|
消息中间件 设计模式 缓存
Redis发布订阅:美丽的陷阱与不宜之境
Redis发布订阅:美丽的陷阱与不宜之境
686 1
|
消息中间件 缓存 NoSQL
探索Redis发布订阅与消息队列:构建实时消息通信系统
本篇深入探讨了Redis的发布订阅模式和消息队列功能,展示了如何使用这两个特性构建实时消息通信系统。我们首先介绍了Redis的发布订阅模式,演示了如何通过PUBLISH命令将消息发布到特定频道,并使用SUBSCRIBE和UNSUBSCRIBE命令进行订阅和取消订阅操作。
564 0
|
6月前
|
消息中间件 NoSQL Redis
Redis发布订阅
【1月更文挑战第7天】 消息队列 Redis 发布订阅(publsub)是一种消息通信模式︰发送者(pub)发送消息,订阅者(sub)接收消息。微信、微博、关注系统! Redis客户端可以订阅任意数量的频道。
203 7
|
6月前
|
消息中间件 NoSQL Java
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
硬核 | Redis Pub/Sub 发布订阅与宅男有什么关系?
81 0