redis的三种部署方式和数据读取方式

redis
redis的三种部署方式
1:主从复制,就是每台机器都是同样的,这种部署方式每台服务器都会向主服务器同步本身的数据,因此其中的数据内容是相同的node

工做机制:从服务器链接到主服务器发送SYNC命令,主服务器接收命令,开始执行BGSAVEE命令申城RDB文件并使用缓冲区域记录伺候执行的全部写命令,主服务器的BGSAVE命令执行完成后,向全部服务器发送快照文件,并继续记录执行的写命令,从服务器收到快照文件后丢弃全部的旧数据,载入收到的快照,主服务器发送完毕后开始向服务器发送缓冲区的写命令,从服务器完成对快照的载入,开始接受命令请求,并执行来自主服务器缓冲区的写命令,完成初始化,最后主服务器接收到写命令后就向从服务器发送这个写命令,从服务器接收并执行web

slaver将master中的信息读取出来放入磁盘中,而后加载进内存,客户端直接从内存中读取信息,从这一点也能够看出,redis其实就是一个内存数据库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:哨兵模式,就是一个特殊的主从复制模式,svg

工做机制:让哨兵做为一个独立的进程,独立运行,经过其发送命令等待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是经过这个索引来管理数据的
在这里插入图片描述