Redis持久化——RDB和AOF

撒子是持久化?

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能。

redis提供两种方式进行持久化,一种是RDB持久化(将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF持久化(将Reids的操作日志以追加的方式写入文件)。

 

RDB(Redis Database)

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

rdb保存的文件时dump.rdb都是在我们的配置文件redis.conf中的快照进行配置的。

Redis持久化——RDB和AOF_第1张图片

触发机制:

  1. save的规则满足的情况下,会自动触发rdb规则
  2. 指定flushall命令。也会触发rdb
  3. tuichuredis时,也会产生rdb文件

如何恢复rdb文件?

1、将rdb文件放在redis启动目录,redis    启动的时候会自动检查dump.rdb恢复其中的数据

2、查看需要存在的位置

127.0.0.1:6379> config get dir
1)"dir"
2)"/usr/local/bin"   #如果在这个目录下的dump.rdb文件,启动就会自动恢复其中的数据

优点:

  1. 适合大规模的数据恢复
  2. 对数据的完整性要求不高

缺点:

  1. 需要一定的时间间隔进程操作,如果redis意外宕机了,最后一次修改数据就没有了
  2. fork进程的时候,会占用一定的内容空间

 

 

AOF(Append Only File)

以日志的形式来记录每个操作,将Redis执行的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,也就是,redis重启的话就根据日志文件的内容将写指令从前到后执行一次完成数据的恢复工作。
Aof保存的时appendonly.aof文件

Redis持久化——RDB和AOF_第2张图片

使用:

appendonly no   #默认是不开启aof模式的,默认是使用rdb方式持久化的

1、默认是不开启的,将no改为yes就可以启动了

2、重启redis后即可生效

如何修复aof文件?

1、如果aof被破坏,redis就启动不起来了,就需要redis-check-aof --fix来修复。

2、然后再重启

优点:

# appendfsync always    #每次修改都会sync,消耗性能

appendfsync everysec   #每秒执行一次sync,可能会丢失这1秒的数据

# appendfsync no    #不执行sync,这个时候操作系统自己同步数据,速度最快
  1. 每一次修改都同步,文件的完整性会更加好
  2. 每秒同步一次,可能会丢失一秒的数据
  3. 从不同步

缺点:

  1. 相对于数据文件来说,aof远远大于rdb,修复的速度也比rdb慢。
  2. aof运行效率也比rdb慢,所以redis默认是rdb。

 

 

你可能感兴趣的:(Redis)