一、Redis发布订阅
通信时候会有消息队列,一个叫发送者,一个是订阅者。
redis发布订阅是一种消息通信模式,发送者发送消息,订阅者接收消息;redis客户端可以订阅任意数量的频道。
消息队列底层是redis-server维护的字典,本质是一个链表,字典中的键就是频道(也可以用reids的List来做消息队列)。
1.1 发布订阅的常用命令:
Subscribe 频道名字:订阅频道,接收消息。
Publish 频道名字 发送的消息 :发送消息。
1.2 发布订阅的原理:
Redis是使用c实现的,通过redis源码里面的publish.c文件,了解发布和订阅机制的底层实现。
1.3 发布订阅的使用场景:
1、实时消息系统。
2、实时聊天(频道当作聊天室,将信息回显给所有人)。
3、订阅关注系统。
作为消息中间件只会在简单的场景中使用,稍微复杂的场景就会用:消息中间件来做。
二、主从复制:
概念:是指将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点,后者称为从节点,数据的复制是单向的,只能由主节点到从节点,Master以写为主,Slave以读为主。
主从复制,读写分离,大部分的操作都是读操作,主节点中进行写操作,从节点中进行读操作,减缓服务器的压力,最低一主一从。默认情况下,每台redis都是主节点。
2.1 主从复制的作用主要包括:
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上时一种服务的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,从节点提供读服务。
4、高可用(一般都是将集群情况下),主从复制还是哨兵和集群能够实施的基础,因此说主从复制时redis高可用的基础。
公司中redis一般都是主从复制使用,不会单机使用。
2.2 复制原理:
从节点(slave)启动成功连接到主节点(master)后会发送一个sync同步命令。
主节点(master)接收到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,主节点(master)将传送这个文件到从节点(slave),并完成一次完全同步。
2.3 主从复制的配置:
配置redis的主从复制可以通过在redis的配置文件中去配置,因为redis默认每台都是主节点,只需要在配置文件中配置为从节点,在配置文件中的配置是可以保持长久有效的。当然也可以在linux中使用命令去配置,只不过这种命令配置在redis服务关闭之后就会被重置。
2.4 主从配置的特点以及弊端:
配置了主从配置之后,主节点的redis只负责写操作,从节点的redis则负责读的操作,可以使得读写分离,使得系统的性能更加好。
但是这种配置的缺点就是:当主节点的redis宕机之后,我们的整个redis集群就相当于失去的写的功能,虽然读操作还是可以正常使用的,但是对我们的正常使用造成很大的影响,这种情况下如果要恢复写的功能,需要去手动配置。
为了解决这种问题,我们通常在redis集群中使用哨兵模式。
三、哨兵模式
在哨兵模式中,当redis的主节点挂掉之后,集群会自动选举出新的主节点,传统的主从切换方法是:当主机宕机后,需要手动把一台服务器切换为主服务器,这就需要人工干预,还会造成一段时间内写操作不可用,因此更多时候,我们选择使用哨兵模式,redis2.8开始正式提供Sentinel哨兵框架来解决这个问题。
哨兵模式中,哨兵可以后台监控主机是否故障,如果故障了根据投票数,将票数最多的转为主库。哨兵模式是一种特殊的模式,首先redis提供了哨兵命令,哨兵是一个独立的进程,作为进程,它会独立运行
其原理是:哨兵通过发送命令,等待redis服务器响应,从而监控运行多个redis实例
但是单机哨兵万一出现宕机的情况,也会很麻烦,所以我们一般也会给哨兵配置集群,除了监控redis服务器之外,哨兵之间也会相互监控
若确定主机挂掉,哨兵会从剩下的从中选举,哨兵进行投票,选举票数最多的作为新的主
哨兵模式的优缺点:
优点:
1、哨兵集群,基于主从复制模式,所有的主从配置的优点,他都有
2、主从可以切换,故障可以转移,系统的可用性更好
3、哨兵模式就是主从复制模式的升级,手动到自动
缺点:
1、redis不好在线扩容,集群容量一旦到达上限,在线扩容十分麻烦
2、实现哨兵模式的配置是很麻烦的