在实际开发工作中,经常会遇到消息发布、订阅的应用场景,就好象是电台广播,只要你收听了某个频道,那么在这个频道上播放的内容你都能够听到,没有收听的自然也就听不到,很多开源工具都对这种设计模式有很好的支持,比如RabbitMQ中就有Pub/Sub消息队列。同样Redis也支持这种模式的消息发布,而且非常简单。那么下面就来一起学习吧!

一. Redis消息的发布与订阅

1) Redis发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

2) Redis发布订阅示意图

图一:消息订阅者(client2 、 client5 和 client1)订阅频道 channel1:

image.png

图二:消息发布者发布消息到频道channel1,会被发送到三个订阅者:

image.png

3)Redis发布订阅的常用命令

1.1 subscribe

语法:subscribe channel [channel…]

功能:订阅一个或多个频道的信息

返回值:订阅的消息

image.png

1.2 publish

语法:publish chanel message

功能:将信息发送到指定的频道。

返回值:数字。接收到消息订阅者的数量。

image.png

1.3 psubscribe

语法:psubscribe pattern [pattern]

功能:订阅一个或多个符合给定模式的频道。模式以  作为通配符,例如:news. 匹配所有以 news. 开头的频道。

返回值:订阅的信息。

image.png

二、Redis的主从复制

 1)主从复制

主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。

2)一主二从

1.1 一主二从原理

  • 配从(库)不配主(库)
  • 配从(库): slaveof 主库IP 主库端口
  • 主写从读、读写分离
  • 从连前后同
  • 主断从待命、从断重新连

1.2 一主二从搭建

3)一台服务器模拟三台主机:

第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf\
第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名

如:

port 6379

pidfile /var/run/redis_6379.pid

logfile "6379.log"

dbfilename dump6379.rdb\
第三步:分别打开三个窗口模拟三台服务器,开启redis服务。

4)从连前后同

5)主断从待命、从断重新连

三、一主二从搭建

1、一台服务器模拟三台主机:

第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf\
第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名

如:

port 6379

pidfile /var/run/redis_6379.pid

logfile "6379.log"

dbfilename dump6379.rdb\
第三步:分别打开三个窗口模拟三台服务器,开启redis服务。

image.png

image.png

image.png

2、查询主从信息:info replication

image.png

3、写操作6379:

image.png

4、设置主从关系:

在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379

image.png

image.png

另一种方式,就是修改6380和6381的配置文件,在最后加上:

image.png

注意:如果主redis设置了密码,从库的redis.conf中还需要设置masterauth为主redis的密码。

5、全量复制:在6380和6381分别执行命令get k1

image.png

image.png

6、增量复制:6379执行命令:set k2 v2。然后6380端口和6381端口,分别执行命令:get k2

image.png

image.png

image.png

7、主写从读、读写分离:在6380和6381上执行写操作set k3 v3

image.png

image.png

8、主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息

image.png

image.png

image.png

从机原地待命。

9、主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4

image.png

主机重启后,一切正常。

10、从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息

image.png

总的来说两者的区别在于消息队列是抢消息,只有一个得到,而发布订阅是所有订阅的人都会得到。


小丸子
21 声望3 粉丝

爱学习的小丸子