Redis是内存数据库,如果不将数据保存到磁盘,服务器进程一旦结束,所以数据库信息将丢失,所以Redis提供了持久化功能。
RDB(Redis DataBase)
在指定的时间内将内存中的数据集快照写入磁盘内,它恢复时时直接将快照文件直接读到内存里。
Redis会单独创建(fork)一个子进程来进行持久化操作,会先将数据写到一个临时文件中,待持久化过程都结束,再用这个临时文件替换上次持久化好的文件。整个过程中主进程不进行仍和IO操作,确保了极高的性能。如果需要进行大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,那RDB要比AOF方式更加高效。RDB的缺点就是最后一次持久化可能丢失数据。一般默认是使用RDB方式,不需要修改配置。(rdb保存的文件名是dump.rdb文件)
dbfilename dump.rdb #配置文件中配置持久化文件名
### rdb持久化规则
#900秒内,至少有一个key修改,进行持久化
save 900 1
#300秒内,至少有10个key修改,进行持久化
save 300 10
#60秒内,至少有10000key修改,进行持久化
save 60 10000
- 触发机制
1、save的规制机制满足的情况下,会自动触发
2、执行flushall操作时也会触发
3、推出Redis,也会产生rdb文件
备份会自动生成dump.rdb文件 - 如何恢复rdb文件
1、只需要将rdb文件放在Redis的启动目录下,在Redis启动的时候会自动检查rdb文件恢复其中的数据。
优点
1、适合大规模数据恢复
2、对数据完整性要求不高
缺点
1、需要一定时间进程操作,如果Redis宕机了,最后一次修改的数据就丢失了。
2、fork子进程的时候,会占用一定的内存空间。
AOF(Append Only File)
将我们的所以执行命令都记录下来(history),恢复的时候就把这个文件再执行一遍。
以日志的形式去记录每一个写的操作,将Redis所有执行过的指令记录下来(读不记录),只许追加文件,但不可以改写文件。Redis重启的时候会读取文件重建数据。
AOF保存的时appendonly.aof文件
配置文件配置:
appendonly no #默认是不开启aof的,大部分情况下,rdb完全够用
appendfilename "appendonly.aof" #持久化的文件名字
#appendfsync always #每次修改都会sync,消耗性能
appendfsync everysec #每秒执行一次sync,可能会丢失一秒数据
#appendfsync no #不执行sync,这个时候操作系统自己同步数据,速度最快。