美文网首页
4:Redis持久化(持久化介绍 与RDB持久化方式 )

4:Redis持久化(持久化介绍 与RDB持久化方式 )

作者: _River_ | 来源:发表于2021-04-06 23:50 被阅读0次
    1:Redis的持久化介绍
    什么是持久化?
        利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化,
        持久化用于防止数据的意外丢失,确保数据安全性。
    
    持久化过程保存什么?
        1:将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
        2:将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程
    
    Redis的持久化分两种:
    
    RDB 默认开启  config set save "" 进行关闭
    AOF 默认关闭 config set appendonly yes 进行开启
    
    启动优先级:Redis同时开启了RDB和AOF时,Redis重启
                    Redis先加载AOF进行数据恢复。降低丢失数据的量
    
    那同时开启是 RDB 有什么作用?
    全量备份,灾难恢复。    
    
    2:RDB启动方式 —— save指令相关配置
    在redis.conf 里面有以下配置  实际上save 执行的还是 bgsave命令
    
    具体配置解释:
        1:设置本地数据库文件名,默认值为 dump.rdb,通常设置为dump-端口号.rdb
            dbfilename filename   
        2:设置存储.rdb文件的路径,通常设置成存储空间较大的目录中,目录名称data
            dir path     
        3:设置存储至本地数据库时是否压缩数据,默认yes,设置为no,节省 CPU 运行时间,但存储文件变大
            rdbcompression yes|no  
        4:设置读写文件过程是否进行RDB格式校验,默认yes,设置为no,节约读写10%时间消耗,但存在数据损坏的风险
            rdbchecksum yes|no
    
        5:后台存储过程中如果出现错误现象,是否停止保存操作,默认yes
             stop-writes-on-bgsave-error yes|no
    
    默认配置:
        1:dbfilename dump.rdb
        2:dir ./ (相对于本redis.server的根路径)
        3:rdbcompression yes
        4:rdbchecksum yes
        5:stop-writes-on-bgsave-error yes
    
    3:RDB启动方式
    1:手动执行save命令
    手动执行 save (立刻执行)
           指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,
          有可能会造成长时间阻塞,线上环境不建议使用。
    

    2:手动执行 bgsave 命令
    数据量过大,单线程执行方式造成效率过低如何处理? 使用bgsave
    
    手动启动 bgsave (后台保存) 
        启动后台保存操作,不是立刻开始保存 需要满足条件save second changes
          
    bgsave命令是针对save阻塞问题做的优化。
    Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。
    
    具体流程
        1.客户端发送bgsave指令到redis服务端
        2.系统调用fork函数,生成子进程
        3.创建rdb文件
        4.完成之后会返回redis服务端消息,告诉已经保存完毕
    
    3:自动执行save(实际上是执行bgsave 命令)
    自动执行save配置(后台还是使用bgsave指令)
    
    save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,
    结果可能是灾难性的
    
    设置自动持久化的条件,满足限定时间范围内key的变化数量达到指定数量即进行持久化
    save second changes
    
    second:监控时间范围
    changes:监控key的变化量
    
    #900秒内监测到1个key发生变化,进行bgsave命令
    save    900   1
    save    300  10
    save    60   10000
    
    怎么才算是影响的key值?
    除了查询之外,增加、修改、覆盖key值都会保存记录
    
    4:save与bgsave 最后对比
    save  手动执行一次立刻保存一次数据
    bgsave 实际上不管如何配置 最终实际上都是使用该命令
    
    5:RDB特殊启动形式
    服务器运行过程中重启:debug reload
    关闭服务器时指定保存数据:shutdown save
    全量复制(在主从复制中详细讲解)
    
    4:RDB的优点和缺点
    RDB优点:
        1:RDB是一个紧凑压缩的二进制文件,存储效率较高
        2:RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
        3:RDB恢复数据的速度要比AOF快很多
    应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复。
    

    RDB缺点:
    1:耗时,耗性能
          每次保存 RDB 的时候Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 
           在数据集比较庞大时fork() 可能会非常耗时,
           写的数据量很大,内存页设置的比较大,会产生很大的内存消耗,
           同时RDB也是一个IO的过程,RDB文件很大拷贝速度就会很慢。
    
    2:不可控,容易丢失数据,服务器在发生故障时候会丢失数据。
       T3和T4时间段所操作的命令都会丢失。因为无法知道什么时候会宕机及其他异常情况。
       如果使用save和bgsave做定时备份也是无法保障数据不会丢失。
    

    参考技术文章:
    https://www.cnblogs.com/songgj/p/9408784.html
    http://blog.sina.com.cn/s/blog_a1e9c7910102vkdi.html

    相关文章

      网友评论

          本文标题:4:Redis持久化(持久化介绍 与RDB持久化方式 )

          本文链接:https://www.haomeiwen.com/subject/nuhykltx.html