创新路
我们一直在努力

Redis持久化

    redis是一个基于内存储存,高速缓存,key-value的高性能数据库。由于是基于内存储存,所以它很快,通常我们把它当做缓存数据库。但是内存储存,一旦断电之后,里面的内容就消失了,那咋办呢,于是就有了——redis持久化

    什么是redis持久化呢?就是即使断电之后服务器重启,redis数据库也能恢复到断电之前的状态,这就是redis持久化

    redis持久化分为两种,一种是RDB持久化,另外一种的AOF持久化,我们一起看看他们有什么区别

    一、RDB持久化

    1.什么是RDB持久化

        RDB持久化是redis数据库生成一个RDB文件,文件保存在服务器的硬盘上,这个文件是一个经过压缩的二进制文件,通过RDB文件可以恢复redis数据库生成RDB文件时的状态

    2.怎样生成RDB文件

        Redis有两种RDB生成方式,SAVE和BGSAVE

        SAVE是父进程生成RDB文件,那么生成文件的过程中会阻塞Redis的服务进程,这时候的Redis就不能处理服务器的命令,直到RDB文件生成完成

        BGSAVE和SAVE不一样,这个是Redis父进程fork一个子进程,由子进程去创建RDB文件,父进程会继续执行服务器的命令

        BGSAVE和SAVE其实并没有很大的区别,一是阻塞服务进程的区别,二是性能的区别,BGSAVE会fork子进程,并进行大量的读写操作,可能会对性能有一丢丢影响,所以一般我们使用BGSAVE来完成生成RDB文件的工作

        Redis允许用户通过配置SAVE选项,让服务器每间隔一段时间自动执行BGSAVE命令

        RDB默认配置

        save    900    1                        //在900秒内至少进行一次修改

        save    300    10                      //在300秒内至少进行了十次修改

        save    60      10000                //在60秒内至少进行了一万次修改

        只要触发上述三个条件的一个,那么都会触发BGSAVE的执行,新生成的RDB文件会覆盖原文件


    3.怎样载入RDB文件

        一般只要没有使用AOF持久化,那么服务启动时就会自动载入RDB文件,载入是服务是阻塞的,不能处理服务器命令

    4.有什么缺点

        当生成一次RDB文件的时候,后续未满足触发条件时又断了电,那么可能会有一小部分数据还未来得及保存进RDB文件,那么就会造成数据的丢失

    二、AOF持久化

    1.什么是AOF持久化

        AOF持久化就是通过保存对数据操作写命令的方式,来记录数据库的状态,这一点就有点像mysql数据库生成binlog文件一样,记录的是操作命令

    2.怎么实现AOF持久化

        AOF持久化的三步骤:append(命令追加),文件写入和sync(文件同步)

        AOF有一个缓冲区,叫aof_buf,当进行了数据修改或写入命令的时候,会把命令记录到缓冲区,但是只是记录到缓冲区,并没有记录到AOF文件当中,每次结束一个事件之后都会调用一个方法flushAppendOnlyFile,这个方法又有三个参数

参数选项 含义
always 将缓冲区的内容写入到AOF文件,相当于一个命令保存一次和同步,最多丢失一个命令
everysec 将缓冲区的内容每隔一秒钟保存一次,并进行同步
no 将缓冲区的内容保存到AOF文件,但是不同步,同步时间根据操作系统来决定,所以这个模式是写入速度最快的,但是同步时间是最长的,数据的安全性也比较差

    3.AOF文件持续不断写入,太臃肿怎么办

        Redis提供了一个AOF文件重写的功能,当AOF文件重写的时候,AOF会读取当前数据库的状态来自动的生成命令,比如刚给一个key添加了一个值后,又给这个key又添加了一些值,那么AOF会简化这两条命令,变成一条,直接给这个key添加了目前的所有值,那么重写之后的AOF文件的体积就会更小

        那么当AOF重写的时候,又产生了新的命令时怎么办,那么AOF会把新的命令添加进AOF重写缓冲区和AOF缓冲区,那么又会将重写缓冲区中的内容追加到AOF的末尾产生新的AOF文件替换之前的AOF文件

    三、总结

        如果对数据保障性要求较高的话,建议同时使用两种持久化模式,AOF保障数据的同时,RDB还会时不时做个快照

        数据载入的时候,RDB是要快与AOF的,因为RDB中的数据格式和数据库中的一样,不需要额外的转换,而AOF则要一行一行的读取,消耗的时间和cpu比较大

        

        

        

        

未经允许不得转载:天府数据港官方信息博客 » Redis持久化

客官点个赞呗! (0)
分享到:

相关推荐

  • 暂无文章

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机