在理论开发工作中,常常会遇到音讯公布、订阅的利用场景,就好象是电台播送,只有你收听了某个频道,那么在这个频道上播放的内容你都可能听到,没有收听的天然也就听不到,很多开源工具都对这种设计模式有很好的反对,比方RabbitMQ中就有Pub/Sub音讯队列。同样Redis也反对这种模式的音讯公布,而且非常简单。那么上面就来一起学习吧!

一. Redis音讯的公布与订阅

1) Redis公布订阅

Redis 公布订阅(pub/sub)是一种音讯通信模式:发送者(pub)发送音讯,订阅者(sub)接管音讯。Redis 客户端能够订阅任意数量的频道。

2) Redis公布订阅示意图

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

图二:音讯发布者公布音讯到频道channel1,会被发送到三个订阅者:

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

1.1 subscribe

语法:subscribe channel [channel…]

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

返回值:订阅的音讯

1.2 publish

语法:publish chanel message

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

返回值:数字。接管到音讯订阅者的数量。

1.3 psubscribe

语法:psubscribe pattern [pattern]

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

返回值:订阅的信息。

二、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服务。

2、查问主从信息:info replication

3、写操作6379:

4、设置主从关系:

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

另一种形式,就是批改6380和6381的配置文件,在最初加上:

留神:如果主redis设置了明码,从库的redis.conf中还须要设置masterauth为主redis的明码。

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

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

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

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

从机原地待命。

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

主机重启后,一切正常。

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

总的来说两者的区别在于音讯队列是抢音讯,只有一个失去,而公布订阅是所有订阅的人都会失去。