在实际开发工作中,经常会遇到消息发布订阅的应用场景,就像广播一样。只要你收听了某个频道,那么在这个频道播放的内容就可以听到,不听就听不到。许多开源工具对这种设计模式都有很好的支持。例如,RabbitMQ中有一个Pub/Sub消息队列。同样,Redis也支持这种消息发布方式,而且非常简单。那就一起来学习吧!一、Redis消息发布与订阅1)Redis发布与订阅Redis发布与订阅(pub/sub)是一种消息通信方式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。2)Redis发布订阅示意图图1:消息订阅者(client2、client5和client1)订阅通道channel1:图2:消息发布者向通道channel1发布消息,会发送给三个订阅者:3)Redis发布和订阅subscribe常用命令1.1subscribe语法:subscribechannel[channel...]功能:订阅一个或多个频道的信息返回值:订阅消息1.2publish语法:发布频道消息功能:向指定频道发送信息。返回值:数字。收到消息的订阅者数量。1.3psubscribe语法:psubscribepattern[pattern]功能:订阅一个或多个匹配给定模式的频道。该模式用作通配符,例如:新闻。匹配所有以新闻开头的频道。返回值:订阅信息。2、Redis的主从复制1)主从复制主机数据更新后,根据配置和策略自动同步到从机的master/slave机制。master主要是写,slave主要是读。2)一主二从1.1一主二从原理匹配从(库)无主(库)匹配从(库):slaveof主库IP主库端口主写从读,读写分离从前后连接master断slave备用,断线重连1.2一主两从搭建3)一台服务器模拟三台主机:第一步:将redis.conf复制三遍,名称分别为redis6379.conf,redis6380.conf,redis6381.conf\第二步:修改三个文件的port端口、pid文件名、log文件名、rdb文件名,如:port6379pidfile/var/run/redis_6379.pidlogfile"6379.log"dbfilenamedump6379.rdb\第三步:分别打开三个窗口模拟三个服务器,启动redis服务。4)slave连接前后同5)master断开slave待机,slave重连。三、一主两从的搭建1.一台服务器模拟三台主机:第一步:复制redis.conf三次,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf\第二步:修改端口三个文件的端口、pid文件名、日志文件名、rdb文件名,如:port6379pidfile/var/run/redis_6379.pidlogfile"6379.log"dbfilenamedump6379.rdb\第三步:打开三个窗口进行模拟三台服务器,并启动redis服务。2、查询主从信息:inforeplication3,写操作6379:4、设置主从关系:分别在6380和6381主机上执行命令:slaveof127.0.0.16379另一种方法是修改6380和6381的配置文件,最后补充:注意:如果为主redis设置了密码,从库的redis.conf中还需要设置主redis的masterauth密码。5、全量复制:分别在6380和6381执行命令getk16,增量复制:在6379执行命令:setk2v2。然后6380端口和6381端口分别执行命令:getk27,masterwritefromread,读写分离:在6380和6381上执行写操作setk3v38,主机宕机:在6379上执行命令shutdown,查看6380和6380状态6381redis信息slave处于待命状态。9、主机死机恢复:重启6379,执行写命令setk4v4;分别在6380和6381上执行getk4。主机重启后一切正常。10.从机宕机:6380执行关机命令,查看6379和6381的redis信息,一般来说两者的区别是消息队列是抓取消息的,只有一个能拿到,而发布和订阅意味着所有订阅者都会得到它们。
