在实际开发工作中,经常会遇到消息发布、订阅的应用场景,就好象是电台广播,只要你收听了某个频道,那么在这个频道上播放的内容你都能够听到,没有收听的自然也就听不到,很多开源工具都对这种设计模式有很好的支持,比如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信息
总的来说两者的区别在于消息队列是抢消息,只有一个得到,而发布订阅是所有订阅的人都会得到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。