一、首先什么是redis的持久化?
答:持久化就是把内存中的数据存放到磁盘中,防止宕机后内存数据丢失。
二、Redis 的持久化机制是什么?各自的优缺点?
1、RDB:是Redis DataBase缩写快照
RDB是Redis默认的持久化方式。按照指定的时间间隔内将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。
恢复时,将rdb文件直接读到内存中,具体做法:将rdb文件放到redis的启动目录上,redis会自动检查dump.rdb文件,恢复数据
具体操作:
优点:(1)适合大规模的数据恢复(使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能)
缺点:(1)需要一定的时间间隔进行操作,无法做到实时持久化,所以适合对数据完整性不高的持久化操作
(2)fork子进程的时候,会占用一定的内存空间
2、AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到日志文件中,当重启Redis会加载appendonly.aof文件来恢复数据。
默认是不采用AOF的,需要在配置文件中修改
AOF是存放每条写命令的,所以会不断的增大,当大到一定程度时,AOF会做rewrite操作,rewrite操作就是基于当时redis的数据重新构造一个小的AOF文件,然后将大的AOF文件删除。
优点:
(1)AOF日志文件适合做灾难性的误删除紧急恢复,如果某人不小心用flushall命令清空了所有数据,只要这个时候还没有执行rewrite,那么就可以将日志文件中的flushall删除,进行恢复。
(2)每进行一次 命令操作就记录到 aof 文件中一次 保证了数据的安全性和完整性
(3)AOF以append-only的模式写入,所以没有任何的磁盘寻址的开销,写入性能非常的高。
缺点:AOF 文件比 RDB 文件大,且恢复速度慢