redis的三种部署方式和数据读取方式
redis
redis的三种部署方式
1:主从复制,就是每台机器都是一样的,这种部署方式每台服务器都会向主服务器同步自己的数据,所以其中的数据内容是相同的
工作机制:从服务器连接到主服务器发送SYNC命令,主服务器接收命令,开始执行BGSAVEE命令申城RDB文件并使用缓冲区域记录伺候执行的所有写命令,主服务器的BGSAVE命令执行完成后,向所有服务器发送快照文件,并继续记录执行的写命令,从服务器收到快照文件后丢弃所有的旧数据,载入收到的快照,主服务器发送完毕后开始向服务器发送缓冲区的写命令,从服务器完成对快照的载入,开始接受命令请求,并执行来自主服务器缓冲区的写命令,完成初始化,最后主服务器接收到写命令后就向从服务器发送这个写命令,从服务器接收并执行
slaver将master中的信息读取出来放入磁盘中,然后加载进内存,客户端直接从内存中读取信息,从这一点也可以看出,redis其实就是一个内存数据库
只有一个master,可以有n个slaver,每个slaver也可以有自己的slaver,master只负责写和同步数据给slaver,所以如果我们要提高读取效率只需要扩容slaver就可以了
SYNC命令是非常消耗资源的,因为每次执行SYNC命令,主从服务器需要执行以下操作:
主服务器需要执行BGSAVE命令来生成RDB文件,这个生成操作会耗费主服务器大量的CPU、内存和磁盘I/O资源;
主服务器需要将自己生成的RDB文件发送给从服务器,这个发送操作会耗费主从服务器大量的网络资源(带宽和流量),并对主服务器响应命令请求的时间产生影响;
接收到RDB文件的从服务器需要载入主服务器发来的RDB文件,并且在载入期间,从服务器会因为阻塞而没办法处理命令请求。
Redis从2.8版本开始,使用PSYNC命令代替SYNC命令来执行复制时的同步操作。
PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization)两种模式:
其中完整重同步用于处理初次复制情况:完整重同步的执行步骤和SYNC命令的执行步骤基本一样,它们都是通过让主服务器创建并发送RDB文件,以及向从服务器发送保存在缓冲区里面的写命令来进行同步;
而部分重同步则用于处理断线后重复制情况:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态。
限制:master的写能力没办法改变已经是上限了
slaver的扩容会造成性能的损耗,最好避免在运行时期扩容
master的磁盘容量大小(就是存储容量)
2:哨兵模式,就是一个特殊的主从复制模式,
工作机制:让哨兵作为一个独立的进程,独立运行,通过其发送命令等待redis服务器响应,从而求监控运行的多个redis实例,当哨兵检测到master挂了的时候,就会让一个slave切换成master,通过发布订阅模式通知其他的从服务器,切换到这个新的master主机
如果后期之前的master主机恢复了,那么哨兵就会让它作为一个slaver,继续使用之前的新的master
不好支持在线扩容,当集群容量达到上限时很难扩容
3:Redis-Cluster集群,实现了redis的分布式存储,每个redis节点上存储了不同的内容
工作机制:使用多台服务器构成一个集群,每个服务器存储了不同的信息,每个服务器的节点也给予了主从复制特特点,一个master(主节点),无数个slaver(从节点),
redis的读取方式:
每个节点都有两个组件,一个是slot,一个是cluster(管理组件)
他是通过crc16算法做一系列计算得到某个值与slot进行匹配,然后绑定到响应的node节点上,node节点的slot是平均分配的,如果有3个node节点,就会将slot平均分成三份,如果其中的一个节点崩了,那么此节点的slot就会平均分配给另外两个节点继续完成任务,slot其实就是索引,redis是通过这个索引来管理数据的
以上是 redis的三种部署方式和数据读取方式 的全部内容, 来源链接: utcz.com/z/535062.html