Redis的持久化RDB和AOF

                 Redis的持久化RDB和AOF

1.持久化:将在内存的中的数据保存在磁盘中

RDB(Redis DataBase):在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

rdb 保存的是dump.rdb文件

注意:执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义(因为使用flushall相对于把所有数据删除了)

fork的作用:是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。


AOF(Append Only File):以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

Aof保存的是appendonly.aof文件


如何触发RDB快照:

1.redis.conf配置save(save <seconds> <changes>
  Redis默认配置文件中提供了三个条件:
  save 900 1
  save 300 10
  save 60 10000
  分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

2.操作完数据后,使用save方法。

3.如何恢复:将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可 

优点:适合大规模的数据恢复,对数据完整性和一致性要求不高

缺点:在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改,fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。

如何停止:动态所有停止RDB保存规则的方法:redis-cli config set save ""



如何触发AOF快照和恢复:

修改默认的appendonly no,改为yes

1.正常恢复:修改默认的appendonly no,改为yes,恢复:重启redis然后重新加载

2.异常恢复:修改默认的appendonly no,改为yes,使用redis-check-aof --fix进行修复,恢复:重启redis然后重新加载

重写机制:由于业务量的增加,导致aof文件大小急剧上升,所以需要对文件进行压缩,或者编辑。

原理:AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。

触发机制:Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发


SNAPSHOTTING快照:

save
    save 900 1  //900秒后保存,要求至少有1个key被更改时才会触发
    save 300 10 //300秒后保存,要求至少有10个key被更改时才会触发
    save 60 10000   //60秒后保存,要求至少有10000个key被更改时才会触发

stop-writes-bgsave-error  yes #当保存的时候出现错误,停止写的操作
rdbcompression #采用LZF压缩算法将保存的数据压缩存放
rdbchecksum     #数据文件最后会有一个CRC64校验码,这样的格式会更加靠一些,但是它会消耗大约10%的性能,如果你想要最高性能那可以将它禁用。
dbfilename   #存储数据的文件名称
dir ./ #文件所在目录

APPEND ONLY MODE追加:

appendonly yes  #开启AOF模式
    appendfilename "appendonly.aof" #保存数据的AOF文件名称

# appendfsync always
    appendfsync everysec    #fsync模式:1秒后保存
# appendfsync no

    no-appendfsync-on-rewrite no    #重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。

    auto-aof-rewrite-percentage 100 #设置重写的基准值:如果当前大小比指定的百分比大,触发重写
    auto-aof-rewrite-min-size 64mb  #设置重写的基准值:如果当前大小比64m比大,触发重写

    aof-load-truncated yes  #一个被截断的AOF文件将会被加载,Redis服务启动发出一个日志告知用户这个事件



猜你喜欢

转载自blog.csdn.net/c_royi/article/details/79575887