redis的持久化

redis 持久化的概念

Redis 是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到磁盘来保证持久化。Redis支持两种持久化方式,一种是Snapshotting(快照)也是默认方式,另一种是Append-Only File(缩写AOF)的方式。

#####################RDB#############

1、Snapshotting(RDB)机制以及运行原理

在某一时刻点保存一个完整的数据快照。
原理:
  1、Redis通过fork产生子进程
  2、父进程继续处理client请求,子进程负责将快照写入临时文件
  3、子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。

2、Snapshotting机制的配置

1、编辑redis.conf文件
2、文件中添加
        save 900 1        #900秒超过1个key被修改
        save 300  10     #300秒超过10个key被修改
        save 60 10000  #60秒超过10000条被修改

#################AOF##############

1、Append-Only File(AOF)机制

每一个写操作,将写入log文件,用于数据恢复(写操作包括:insert,delete,update)

2、Append-Only File(AOF)机制运行原理

1、Redis 通过fork一个子进程
2、父进程继续处理client请求,子进程把AOF内容写入缓存区
3、子进程写完退出,父进程接收退出信息,将缓冲区AOF写入临时文件
4、临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成

3、Append-Only File(AOF)机制配置

1、编辑redis.conf文件
2、在文件中添加
        appendonly  yes        #启动AOF机制
        appendsync always      #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
        appendsync everysec    #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用
        appendsync no          #完全依赖os,性能最好,持久化没保证

RDB与AOF两种方式比较

Snapshotting 
    优势:
            1、RDB产生的文件小
            2、RDB恢复快,并且简单,例如你可以快速的将RDB文件传输到其他主机,做数据的恢复
            3、在进行RDB备份时,主进程仅仅需要创建一个子进程,所有的I/O操作都由子进程完成


    缺陷:
            1、不能完全保证数据安全,在两个备份点之间可能会发生数据丢失
            2、当数据量很大时,创建子进程可能会是一个非常耗时的操作,甚至可能需要1秒,在这个期间,Redis无法向客服端提供服务


AOF
    优势:
            1、数据备份粒度小,数据安全性更高
            2、AOF只会对日志文件进行追加操作,不会修改已经写好的内容。即使在掉电的情况下,AOF日志仍然是可用的。
    
    缺陷:
            1、AOF文件通常比相同的数据集的RDB文件更大
            2、AOF写日志可能会比较慢,这跟fsync的机制有关

总结:RDB快照易丢失数据,AOF模式比较安全,但日志重写时,磁盘IO开销大,容易导致服务器性能严重下降,并且需要足够的物理内存。

原文地址:https://www.cnblogs.com/ywjfx/p/10263269.html