nodejs redis 发布订阅_redis发布订阅模式

47721cd1cf642954339859c3707251c8.png

一 前言

虽然有消息队列,我们还是要了解一下redis发布订阅模式哟!!!!!

二发布订阅模式

5ade93be76fced6c1643e0312bff0d13.png
  • PUBLISH 命令向通道发送信息,此客户端称为publisher 发布者;
  • SUBSCRIBE 向命令通道订阅信息,此客户端称为subscriber 订阅者;
  • redis 中 发布订阅模块的名字叫着 PubSub,也就是 PublisherSubscriber;
  • 一个发布者向一个通道发送消息,订阅者可以向多个通道订阅消息;当发布者向通道发布消息后,如果有订阅者订阅该通道,订阅者就会收到消息;这有点像电台,我收听了一个电台的频道,当频道发送消息后,我就能收到消息;

三PUBSub模块命令

  • subscribe: 订阅一个或者多个频道;
  • unsubscribe: 退订一个或者多个频道;
  • publish: 向通道发送消息;
  • psubscribe: 订阅给定模式相匹配的所有频道;
  • punsubscribe: 退订 给定模式所有的频道,若未指定模式,退订所有频道;

具体的命令使用方式 可以使用 help 命令 ;示例如下:

help subscribe

四客户端实现

通过指令SUBSCRIBE订阅一个频道,如果频道不存在时则新建一个频道;此时此客户端就是订阅者

127.0.0.1:6379> subscribe zszxz
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "zszxz"
3) (integer) 1
​

通过指令publish向通道发送一个消息;此时客户端就是发布者

127.0.0.1:6379> publish zszxz "l miss you"
(integer) 1
127.0.0.1:6379>

我们再看看 客户端就收到消息了

127.0.0.1:6379> subscribe zszxz
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "zszxz"
3) (integer) 1
1) "message"
2) "zszxz"
3) "l miss you"

五java 实现

定义2个订阅者用于订阅频道的消息,在使用jedis 时 需要 继承 JedisPubSub 类, 并重写 onMessage 方法; 订阅者可以在该方法里面进行消息的业务逻辑处理;

订阅者 1

/**

订阅者2

/**

发布者

/**

测试类、

注意redis 的 发布订阅模式 是阻塞模式 ,一个订阅者需要 重新起一个线程;

@Autowired
    

六 缺点

  • PubSub 的生产者来一个消息会直接传递给消费者。如果没有消费者,消息会直接丢弃。如果有多个消费者,一个消费者突然挂掉,生产者会继续发送消息,另外的消费者可以持续收到消息。但是挂掉的消费者重新连上后,断连期间的消息会彻底丢失;
  • 如果 Redis 停机重启,PubSub 的消息是不会持久化

公众号:知识追寻者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值