一、什么是Redis的持久化?
Redis是一种基于内存的非关系型数据库,其大部分的操作都直接在内存中执行,而内存中的数据是不能持久储存的,如果服务器宕机关闭会导致内存中的数据丢失,因此Redis就需要将内存中的数据持久化到磁盘中,便于长久的保存。
Redis提供了两种持久化的方式:
- RDB(Redis DataBase)
- AOF(Append Only File)
二、RDB
1.什么是RDB:
RDB是Redis默认的持久化方法。按照一定的时间间隔将内存中的数据以快照的形式保存到磁盘中。Redis主进程会单独fork一个子进程来执行RDB持久化,整个过程中主进程不进行任何的IO操作,从而避免了对主进程造成性能的影响。在RDB持久化过程中,会先将数据写入一个临时的文件,等持久化结束后替换已持久化好的dump.rdb文件。
2.RDB默认的持久化配置:
save 900 1
# 如果在900秒内有1次改动(增删改),则保存到硬盘中
save 300 10
# 如果在300秒内有10次改动(增删改),则保存到硬盘中
save 60 10000
# 如果在60秒内有10000次改动(增删改),则保存到硬盘中
3.RDB触发条件:
- 满足save规则的情况下会触发RDB持久化
- 执行flushall命令(清空整个 Redis 服务器的数据)
- 退出redis
4.RDB的优缺点:
优点:
- 相比AOF,RDB适用于有比较大的据量的时候。
- 性能最大化,通过fork子进程来完成持久化操作,对主进程的性能影响很小。
缺点:
- 需要一定的时间间隔进行操作,如果意外宕机会导致最后时间间隔内的的数据丢失。
- fork子进程的时候,会占用一定的内存空间
三、AOF
1.什么是AOF:
与RDB通过快照方式持久化不同,AOF是通过日志的形式来记录每个写操作的。在redis执行过程中,AOF会将所有写操作指令记录下来,追加到日志文件的末尾。默认每秒写入一次,配置文件中可设置成:每次修改都同步、每秒同步、不同步三种情况。
注:当两种持久化方式同时开启的时候,Redis的数据恢复会优先选择AOF进行恢复。
2.AOF的优缺点:
优点:
- 数据的完整性更好。相比于RDB,AOF可以将每条指令都记录下来,即使服务器意外宕机,也不会丢失数据。
- redis自带了修复工具redis-check-aof。即使AOF记录的指令出错,比如说记录的时候服务器宕机导致写入了不完整的数据,也能用redis-check-aof进行修复。
缺点:
- AOF持久化文件比RDB文件大,恢复速度慢。
- 数据量比较大的时候,AOF比RDB的启动效率更低。