zoukankan      html  css  js  c++  java
  • 一文吃透redis持久化,妈妈再也不担心我面试过不了!

    持久化介绍

    redis 提供了两种方式方式进行数据的持久化(将数据存储到硬盘中);第一种称为快照(snapshotting)RDB,它将某一时刻的所有数据都写入硬盘,所以快照是一次全量备份,并且存储的数据形式是二进制序列化形式;另一种方式是只追加文件(append-only file)AOF, 它会在执行命令时将命令复制一份到硬盘中,AOF在长期运行中会变的非常庞大,数据库重启加载AOF日志将会很慢;

    redis 将数据持久化的主要原因就是重用数据,或者防止系统故障,备份数据;

    两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据

    工作原理

    快照工作原理

    redis的快照必须要求文件IO操作,单线程的redis进行多余的IO操作会影响服务器的性能,所以redis采用COW(copy on write)机制实现快照的持久化;

    • 首先redis进行会fork一个子进程,此时就存在父子进程;
    • 父进程负责进行修改操作,内存持续增加;而子进程数据不做任何变化;
    • 子进程将瞬间数据写入磁盘的rdb文件

    AOF工作原理

    AOF日志存放了redis指令顺序序列;所以只要重新执行AOF文件包含所有的命令就可以实现AOF文件记录的所有数据;

    常用配置

    RDB配置

    默认文件

    dbfilename dump.rdb
    dir ./
    

    redis会将数据默认dump至dump.rdb文件中;我们可以通过配置修改dump的频率;

    #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
    save 900 1 
    #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
    save 300 10 
    #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
    save 60 10000 
    

    如果想要禁用快照功能,注释掉如上配置,开启save "" 配置

    save ""
    #save 900 1
    #save 300 10
    #save 60 10000
    

    手动备份

    save命令是阻塞命令 ,当服务器接收到save命令之后就会开始拍摄快照,在此期间不会处理其他请求;

    bgsave命令也是立即拍摄快照,非阻塞命令,而是fork一个子线程进行备份快照;

    缺点

    • 每隔一段时间进行一次持久化,如果redis崩溃,可能会导致部分数据丢失问题;
    • RDB使用fork()子进程进行数据的持久化,如果数据量大,可能花费的时间较长,redis会造成明显的卡顿几秒现象;
    • 很好的备份效果,容易进行数据恢复;

    优点

    • 相比AOF,在数据量比较大的情况下,RDB的启动速度更快;
    • RDB使用fork()子进程进行数据的持久化,本身不会有多余的IO操作;

    AOF配置

    启用AOF

    appendonly yes
    

    默认文件

    appendfilename "appendonly.aof"
    dir ./
    

    fsync

    如果redis发生宕机事件,有可能没来的及数据写入磁盘;此时redis AOF 的 fsync 策略能够保证redis保持高性能,和尽可能的减少数据丢失;默认就是使用 1s执行一次同步;

    #每次有数据修改发生时都会写入AOF文件。
    #appendfsync always 
    #每秒钟同步一次,该策略为AOF的缺省策略。
    appendfsync everysec 
    #从不同步。高效但是数据不会被持久化。
    #appendfsync no 
    

    AOF重写

    AOF日志文件会随着redis运行越来越庞大,Redis 提供了 bgrewriteaof 指令用于对 AOF 日志进行瘦身;也可以使用配置文件进行自动瘦身;

    # 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
    auto-aof-rewrite-percentage 100  
    # 当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
    auto-aof-rewrite-min-size 64mb
    

    要禁用自动的日志重写功能,我们可以把百分比设置为0

    auto-aof-rewrite-percentage 0
    

    优点

    • 使用fsync每秒一次同步,数据完整性较高;
    • redis如果发生宕机,支持使用redis-check-aof 工具修复损坏的AOF文件

    缺点

    • AOF文件的大小一般会比RDB文件大
    • AOF在运行效率上往往会慢于RDB

    关注公众号:知识追寻者,获取一线大厂面经

  • 相关阅读:
    xpath的几个常用规则
    xpath定位不到原因浅析
    这一代人得学习
    scrapy之Request对象
    cookie字段属性解析
    selenium中get_cookies()和add_cookie()的用法
    python中生成器generator
    swagger demo code
    ctrip-apollo
    eclipse 快捷键使用日志
  • 原文地址:https://www.cnblogs.com/zszxz/p/13615160.html
Copyright © 2011-2022 走看看