美文网首页
redis 详解系列之三(持久化)

redis 详解系列之三(持久化)

作者: 落羽归尘 | 来源:发表于2019-08-16 07:38 被阅读0次

    redis持久化简介

    redis有两张持久化机制,RDB和AOF,可以有效避免因进程崩溃等情况造成数据丢失情况,下次重启时就可以利用持久化文件进行数据的恢复。

    RDB持久化

    RDB持久化技术是把当前数据生成快照保存起来,可以通过手动触发,也可以自动触发,手动触发的命令主要由save和bgsave,但是运行save命令的时候会阻塞进程,直到快照生成完成,数据越多,阻塞时间越久,因此要小心甚至避免使用这个命令。而bgsave,可以fork一个子进程,不影响主进程。
    下面情况会自动触发RDB:

    • 使用save配置,,save m n代表m秒内有n次修改时,触发bgsave
    • 主从模式下,若从节点执行了全量复制,主节点会自动执行bgsave生成EDB文件发送给从节点
    • 执行debug reload重载时,也会触发save操作
    • 执行shutdown时,若没有开启AOF也会执行bgsave

    RDB文件一般保存在dir配置的目录下,文件名可通过dbfilename配置,可以通过命令动态配置:
    config set dir{newDir}和config set dbfilename{newFileName}

    RDB优点

    RDB文件是一个压缩的二进制文件,代表某个时间点的快照,代表着全量更新,恢复速度也快于AOF。

    RDB缺点

    没办法做到秒级持久化,无法实时,属于重量级操作,无法频繁操作

    AOF持久化

    AOF(append only file):以日志记录每次写命令,重启时执行日志里的命令进行恢复,可以做到持久化的实时性,是redis持久化的主流技术。执行过程是写入命令(追加缓存),文件同步(到磁盘),文件重写(定期压缩),重启加载(恢复)。
    开启AOF需要进行配置 appendonly yes,默认是关闭的。AOF写入命令实际上先写到缓冲区,因为redis 是单线程的,如果直接写入磁盘,势必造成io阻塞,写入缓冲,系统会以一定的策略同步到文件,这个策略可以通过配置文件配置。重写机制,可以定期对过期命令清除,合并命令等方式达到减少文件所占空间的目的,重写也可以手动触发或者自动触发,重写时,会fork子进程,不会对当前进程造成阻塞。

    当RDB和AOF都开启时,优先加载AOF,

    相关文章

      网友评论

          本文标题:redis 详解系列之三(持久化)

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