2020Redis面试宝典-Redis持久化机制详解

一:原理?

Redis是一种面向"key-value"类型数据的分布式NoSql数据库系统,具有高性能,持久存储,适应高并发应用场景的优势.
持久化解释:将数据放到断电后数据不会丢失的设备中,也就是我们通常所说的硬盘,

Redis的工作流程?

  • 客户端向服务端发送数据的写操作(数据在客户端的内存中)
  • 数据库服务端接收到写请求数据(数据在服务端的内存中)
  • 服务端调用wirte系统将数据写到磁盘上(数据在系统内存的缓冲区)
  • 操作系统将缓冲区的数据转移到磁盘控制器上(数据在磁盘控制器中)
  • 磁盘控制器将数据写入到磁盘的物理介质中

二:持久化机制?

  • RDB机制 (将数据以快照的形式保存在磁盘中) 默认的持久化机制
  • AOF机制 (将Redis收到的每一个写数据的命令都存储在日志文件中)

1:RDB机制方式?

1.save
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,
2.bgsave
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端的请求.
3.自动触发
自动触发需要在redis.conf配置文件中进行配置,找到save节点,这里是用来配置Redis的持久化条件的,也就是什么时候将Redis中的数据保存到硬盘上,类如:save 100 4000 标识,如果100秒内数据集有4000次修改则触发快照操作.
dir:设置快照文件的存储路径,注意需要时一个目录.
dbfilename:快照的文件名,默认是 dump.rdb

优缺点:

1:优势:RDB文件紧凑,全量备份,适合用户进行备份和灾难恢复.在生成RDB文件时候,Redis主进程会
fork()一个子进程来处理所有的保存操作,主进程不需要进行任何磁盘的IO操作.RDB在恢复大数据集
时的速度比AOF快.
2:劣势:RDB是一次全灵备份,存储的是内存时候的二级制序列化形式,存储上非常紧凑,当进行快照持
久化操作时.会开启一个子进程专门负责快照持久化,子进程会拥有和父进程一样的内存数据,父进程
修改子进程不会反应出来,所以子块中持久化期间修改的数据,不会被保存,可能会丢失数据.

2:AOF机制?每当有写数据命令进到Redis中的时候 ,就会将命令保存在AOF文件中

1.每修改同步always:同步持久化,每次发生互数据变更的时候就会被立即记录到磁盘中,性能较差,但是数据完整性比较好.
2.每秒同步everysec:异步操作,每秒记录,如果一秒内发生宕机,则会有数据丢失.
3.从不no:从不同步
优缺点:

1.优势:
可以更好的保护数据不丢失,一般AOF会每隔一秒,通过一个后台的线程执行一次同步操作,最多会丢失一秒钟的数据,
AOF文件没有任何的磁盘寻址的开销,写入性能非常高,文件不容不破损.
即使文件过大,出现后台重写操作,也不会影响客户端的读写.
AOF文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复,
2.缺点
对于同一份文件来说,AOF日志文件通常不RDB数据快照文件更大,
AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置为每秒同步一次日志文件,
AOF之前发生过BUG,即通过日志文件进行数据恢复的时候,恢复的数据不是一模一样的.

RBD和AOF如何选择?

一般来说,如果想要达到足以媲美postgreSQL的数据安全性,应该同时使用两种持久化机制,在这种情况下,当Redis重启时会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集完整.
如果你非常关心数据,但是仍可以承受在数分钟内丢失数据的话,则可以只使用RDB持久化.
有很多用户都只使用AOF持久化,单并不推荐这种方式,因为定时生成RDB快照非常便于进行数据库的备份,并且RDB恢复数据集的速度比AOF恢复的速度要快,除此之外,RDB也可以避免AOF程序的BUG.

你可能感兴趣的:(redis,java,数据库)