美文网首页
Redis 持久化相关

Redis 持久化相关

作者: 流年划破容颜_cc55 | 来源:发表于2019-06-05 21:06 被阅读0次
    image.png

    我允诱惑一遍点击
    简单明了的开始今天的话题。
    数据库是保存数据的地方,那数据库是怎么保存数据的,对于我们开发来说,还是需要了解的,搞不好哪天就出现bug需要用到呢
    而Redis的持久化方式有2种,RDB和AOF

    RDB持久化方式

    在redis的配置文件中,用这样的数据,如下图


    image.png

    save 900 1代表的意思就是900s内(15分钟)有一次修改或者新增数据库的请求,就促发一次rdb持久化,其他也是一样的意思。
    而我们在进行人工的持久化是,需要使用SAVE或者BGSAVE命令

    • SAVE是会在主进程中进行持久化的,而因为redis是单进程的嘛,所以这时候就不会接受来着客户端的请求了。这在生成环境中基本上是不允许的
    • 一般我们都是使用BGSAVE进行redis的持久化的,这个命令会在主线程中fock一个子进程来持久化,然后主进程继续进行解释处理请求,但是如果这时候如果发生修改原来数据库的请求,子进程是不会进行持久化的,也就是说,BGSAVE只会持久化我们输入这个命令的那个时候数据库中的数据。
      具有复制的基本原理
    • 1 redis使用fork函数复制当前的进程的副本,也就是开个子进程
    • 2 父进程继续处理请求命令,而子进程就把内存的数据写到硬盘的临时文件
    • 3 当子进程写完数据后,会覆盖原来的rdb持久化文件,即完成一次快照操作。
      注意如果在持久化过程中,因为主进程和子进程是共享一块内存的,如果主进程需要修改内存数据,操作系统会复制一份以保证子进程的正常持久化

    AOF的实现

    aof是以记录命令行的形式进行备份的
    在配置文件中开启,启用参数为

    dir ./
    appendonly yes
    appendfilename appendonly.aof

    • dir ./ 是指备注的文件路径
    • appendonly 指定开启aof持久化
    • appendfilename 持久化文件名字
      几个重要的命令
      appendonly no
      appendonly always
      appendonly everysec

    第一个是不进行持久化 一个是系统帮我们弄 (30s)一次
    第二个是总是进行持久化 消耗行能
    第三个是每秒一次持久化 兼顾2着

    一般我们采用第三种,可以兼顾行能,只损失1s的数据
    还有一个是aof在持久化的时候会自动帮我们优化,保证key是达到最新的
    比如你
    set 1 2
    set 1 3
    只有的数据一多,会造成aof文件的脏数据很多
    所以redis会帮我们优化,可能把前面的set 1 2 删除掉了。具体还不是很清楚,等以后了解了,在补充

    个人GitHub项目,记录学习Java知识的过程 欢迎star

    image.png

    相关文章

      网友评论

          本文标题:Redis 持久化相关

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