发布订阅
- 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
- 订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的
- 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
- 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
- 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来 【这个是长连接】
消息的格式
- 推送消息的格式包含三部分
- part1:消息类型,包含三种类型
-
- subscribe,表示订阅成功
- unsubscribe,表示取消订阅成功
- message,表示其它终端发布消息
- 如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量
- 如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令
- 如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容
命令
- 订阅
SUBSCRIBE 频道名称 [频道名称 ...]
- 取消订阅
- 如果不写参数,表示取消所有订阅
UNSUBSCRIBE 频道名称 [频道名称 ...]
- 发布
PUBLISH 频道 消息
订阅步骤 :
1.进入客户端,选择数据库 select 1
2.输入 subscribe 订阅的频道
此时这个客户端就处于一种阻塞的等待接收消息状态。
发布步骤 :
1.进入客户端
2.输入 publist 频道 消息 往某频道发布消息
此时所有订阅了该频道的客户端都会立即收到这条消息,然后再次进入等待接收消息状态
客户端消息格式 :
1) 表示类型,是消息还是订阅成功等
2)表示频道
3)表示消息的内容或者当前连接数
ctrl + C 就可以直接退出
----------------------------------------------------------------------------------------
主从配置
- 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
- 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
- 设置主服务器的配置
bind 192.168.1.10
- 设置从服务器的配置
- 注意:在slaveof后面写主机ip,再写端口,而且端口必须写
bind 192.168.1.11 slaveof 192.168.1.10 6379
- 在master和slave分别执行info命令,查看输出信息
- 在master上写数据
set hello world
- 在slave上读数据
get hello
主从实例:
1.打开主服务器的配置文件,修改绑定的ip为当前机器的ip
vi /etc/redis.conf
bind 192.168.1.10
2.打开从服务器的配置文件,修改绑定的ip为当前机器的ip,并且添加一个 slaveof
格式 : slaveof 主redis的ip 主redis使用的端口
bind 192.168.1.11 slaveof 192.168.1.10 6379
3.重启两台 redis 服务。
4.登录主redis ,并且进去写数据
redis-cli -h 192.168.1.10
set py100 'hello world'
查看主服务器的数据: keys *
5.登录从redis ,并且进去读数据
redis-cli -h 192.168.1.11
get py100 (显示 "hello world" )
查看从服务器的数据: keys *
发现两台redis 服务器里面的数据一样。