redis的特性的原理.

当下,redis数据库是比较流行的一种数据库,因为其是操作内存的一种数据库,所有在操作速度上是比较快的,通俗的来讲使用起来很方便,并且客户端也都有很成熟的开源库,直接使用即可。查阅了先关资料,总结了下,redis持久化和主从复制的原理。就下来就介绍两种特性的原理。(后续会更新,本人也是一个学习者,如何哪里写的不好,请留言,彼此交流,共同进步,谢谢!)

<一>,redis的持久化过程及原理?

     1,.redis的持久化分为两种方法,在通常使用的过程有RDB和AOF两种最常使用,这两种方法都是通过写文件的方式将数据信息持久化至磁盘当中,当服务即便挂掉之后,只要重启服务就可恢复至挂掉之前的状态了。

    a>RDB方式持久化。

     在redis中,服务通过间隔一定的时间,将当前内存中所存储的数据写入至后缀名为.rdbd文件中,(注,文件内容为二进制),系统默认的文件名称为dump.rdb,可通过查看可执行文件所在的目录,只要启动了redis服务,并输入相关命令做了存储操作,内存中的数据按二进制写入至dump.rdb文件中,在redis.conf配置文件中如图所示:

该文件可手动更改。在redis命令中可通过命令 save主动进行数据备份操作。(读者可通过两次文件的读写事件类判断是否执行数据备份操作),该名是阻塞过程,在执行save命令时,不能提供其他的服务,因为其是阻塞过程。redis还提供了bgsave命令,纪委后台执行,在使用bgsave命令只有,之间客户端会立即返回如图:信息,但是实质上备份操作为未完成,它是一个而后台操作过程,系统会为其创建一个子进程来处理相关的数据备份操作。也可以通过配置文件save配置选项来配置,让其自动执行备份数据的操作。(如果rdb已经存在,则会创建新的新的rdb文件来覆盖旧的rdb文件),在实际使用中个,可以定时的将某一时刻的数据文件rdb文件进行备份,根据实际情况,想要某一时刻的数据,将该文件拷贝至redis安装目录,重启redis服务即可。使用相对灵活。

save选项在配置文件中的的格式如图所示:

 表示意思是  900表示的是时间单位是秒,1表示的是是在前面的时间中的所执行的操作的次数。如果在这个时间内超过这个次数,就会自动调用BGSAVE命令进行数据备份。其余的选项同义可进行扩展,只要三者中满足其中一个就会执行数据备份。并且在内部会维护一个时间计数器和次数计数器每次执行bdsave命令之后会将其清零,重新在成绩进行统计,以便积极性下次的tdb数据持久化。                                                                   

 RDB持久化方式的优点:数据完整,dump文件中保存的是的用户操作数据是实际数据。

缺点是:该种方法进行数据持久化是需要将内存中的所有数据保存下来,并且需要创建一个rdb文件,这个过程是非常消耗资源和时间的,所以需要每间隔一定的时间创建一个新的rdb文件来讲旧rdb文件进行覆盖,且不能创建的太过于频繁 ,负责会严重影响 服务器的性能。

b>AOF之持久化方式

AOF持久化方式和rdb持久化方式的不同之处在于,AOF是将用户执行的命令定时的写入到一个名为aof的文件中当中,当服务器宕机之后,只需要重启服务器,在将aof文件中的命令执行一边即可恢复数据。在配置项中如图所示:该配置项即为aof文件的,里面存储的是用户执行的命令。每当用户执行一个命令的时候,服务器会将该命令追加到aof文件中。第一个选项位是否开启该功能。此种方式就是aof持久化的过程。除此之外,aof模式还提供了命令重写功能,可进行手动或者系统自动的进行命令重写操作。因为随之命令的增多,aof文件的大小会不断的增加,并且会产生大量的命令冗余,这个时候就需要进行命令重写操作,从而使aof文件的大小重新处于一个合适的大小。在配置文件中如图所示:

第一个为是否开启重写功能,主要说明下面两个配置选项功能。size选项位限制aof文件的大写,当aof文件超过size大小的时候,就加你个aof文件进行重新,该选项为了避免重新aof文件太小而导致重写的操作。percentage选项是一个百分比,两次重写之间比较是否达到了百分之百,如果满足该条件,就进行数据文件的重写,这是一个aof重写的检测配置项。

2.RDB和AOF的区别和特点?

a>数据丢失问题

   例如,redis服务器在t1时间段启动,在t2时间突然宕机了,在t3时间又重新启动了,此时就会丢失t2时间段内的数据,即便是开启了持久化,但是仍旧丢失了t2时间段的数据。此为rdb持久化方式 。至于aof持久化方式,这种方式可能就是数据的特点在于写入命令的时间,如果在写入如最后一条命令的时候,服务器宕机了,那么仅仅丢失的是这一秒的数据,相比rdb而言,数据丢失要少的多。对于aof的这种方式,在配置文件中有如图:

所示的选项,该选项有以上三种模式,分别表示always:用户每操作一个命令就调用一次fdatasync,就将命令写入到对应的aof文件中,这样就不会导致数据丢失。everysec表示每间隔一秒调用一次fdatasync or fsync进行一次命令的写入,即便遇到服务器死掉,也是只丢失一秒的数据而已。no表示的是,当系统调用将对应的缓冲区写满之后,才将缓冲区中的命令写入到aof文件中进行数据的持久化操作。这三种表示方式,第一种是最慢的,第二和第三种都是比较快的。系统通常默认是配置的everysec模式。

b>RDB和AOF区别对比?如下图所示:

<二>redis主从备份模式机器原理?

   redis集群方式中,为了避免单点故障,通常在实际中需要建立分布式集群来维护实际生产业务。在redis服务中提供了一种主从备份模式,就是一台主服务可以有从节点服务,一旦主服务因为意外而宕机了,系统立马就将从节点身份变成主节点服务,这样继续提供服务,就不会出现因主节点宕机而产生单点故障的情况。

1,主从备份模式的特点?

 主从备份模式是单向数据拷贝的,只能从主节点向从节点备份数据。例如:有两台服务A,B,B服务是A服务的从节点,那么每当A服务有数据写入时,只能从A服务将数据备份一份值B服务,反向是不支持的。并且,因B服务是A服务的从节点,之后,B服务只是用于获取消息使用,就是说,B服务不在支持相关的写命令操作了。(有个问题,之后B都不能进行写操作服务了吗??不是这样的,请看下面解释;)

2,主从备份模式的作用?

      a>数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

      b>故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

      c>负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

      d>高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,所以说主从复制是Redis高可用的基础。

3,如何让两台服务构成主从模式服务?

 a> 在redis中,加入已经启动两台服务A,B,可以再B服务客户端使用命令slaveof命令让B服务成为A服务的从节点。如下图所示:

 

表示当前6380的服务已经成为了6379服务的从节点。 或者在配置文件中找到slaveof配置选项,配置相关信息,在启动时就自动指定了服务的主从关系了,还可以再客户端启动是指定要host和port信息,表明要成为某个服务的从节点。以上三种方式都是构建主从模式的过程。相关的配置项:slaveof <masterip> <masterport>,直接再启动服务是就指定要成为谁的从属节点。

(问题来了,当主节点因为一些原因而宕机许久不能恢复,导致的结果是,从节点不能自动的解除从模式,依旧是只能读取而不能写入?如何解决呢?下面b中可进行手动操作,让从节点解除从模式,重新恢复主模式,这样就能进行读写操作)

b>解除主从模式关系

    在从属服务客户端使用命令:slaveof  no  one ,即可接触该服务的从属关系,字面意思是不是任何人的奴隶,就是自身也是一个主服务,可以行自由的读写操作。并且可查看日志表示当前服务已经脱离从节点,重新恢复主节点服务。即可执行读写操作。但是这样需要手动来操作,很不方便,但是redis中提供了哨兵监控机制,即可解决该方式带来的缺陷。请读取4中的介绍。

4>主从模式的哨兵监控机制?

   哨兵机制模式主要的功能是当主节点宕机后,许久不能恢复,当哨兵发现的时候,就会从该主节点众多从节点中选择其中一个重新作为主节点,其他的从节点重新成为新主节点的从节点,当旧的主节点恢复后,哨兵会将旧的主节点设置成当前新的主节点的从节点,继续提供服务的一种监控模式。

如何使用哨兵机制模式?

在redis服务中提供了redis-sentinel 可执行文件,通过配置sentinel.conf,即可启动哨兵程序来监控主从模式。sentinel.conf的内容可查看系同中提供的信息。或者可以自行配置相关的文件。

注:哨兵模式实际使用中,根据实际情况至少使用三个哨兵机制来监控主从模式结构。比如说,在一台服务上可以启动多个redis服务,多台机器,每台机器至少启动一个哨兵服务来监控主从模式结构,目的是为保证系统能持续性的提供服务,不至于因为宕机造成终端服务,从而影响业务。

但是该种模式一个缺陷,那就是些服务的单点故障问题?如何解决该问题请看下文5关键介绍。

5>解决哨兵主动模式的单点问题,使用一种代理模式来进行处理。具体如何??请看下文。

  使用一种twemproxy的代理模式来解决对应的写服务的单点问题,使用过程如下:

猜你喜欢

转载自blog.csdn.net/qq_26105397/article/details/81168342
今日推荐