03-redis数据持久化

redis为了内部数据安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存的里面。数据保存到硬盘的行为可以理解为【持久化】 的效果。

持久化有两种类型:RDB 和 AOF 


RDB就是在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时将快照文件直接读入内存 

RDB快照持久化默认开启,一次性吧redis中全部的数据保存一份储存在硬盘中,如果数据非常多好几G 就不适合该持久化操作。

redis默认设置了自动快照
save 900秒内有 1次修改则保存快照
save 300秒内有 10次修改则保存快照
save 60秒内有 10000次修改则保存快照

快照持久化在本地硬盘保留的数据备份文件:dump.rdb

即使是将redis进程关闭后注销电脑,开机后再次启动redis,然后输出 keys *会看到之前的数据。 

大多数情况下为手动发起持久化 既输入 bgsave命令进行异步手动更新快照

优点:适合大规模的数据恢复,对数据完整性一致性要求不高。

缺点:备份的过程中内存中的数据被克隆了一份,既使用了多一倍的内存消耗。

总结:RDB在保存RDB文件时,父进程会生成一个子进程,接下来的工作全都交给子进程来做,父进程不需要在做其他IO操作,所以RDB持久化方式可以最大化redis的性能。

RDB需要经常创建子进程来保存数据集到硬盘上,单数据比较大的时候,保存的过程就非常耗时,可能会导致redis在一些毫秒级不能相应客户请求。


开启AOF持久化

AOF以日志的形式记录每一个操作,将redis增删改的指令记录下来,只允许追加文件但不可以修改文件,redis启动之初会读取该文件重新构建数据,既redis重启的话就根据日志文件的内容将写执行令从前到后执行一次以完成数据的恢复工作。

注:开启AOF后开启之前的数据会被清空,配置文件中修改appendonly为 yes

开启后用户执行的每一个增加、删除、修改指令都会被备份到appendonly.aof文件中,还原数据的时候就是执行具体指令而已。 

# appendfsync always
appendfsync everysec
# appendfsync no

AOF也有以上三种持久化类型,默认开启中间一秒一次的类型。

相同的数据集而言aof文件要远大于rdb文件,恢复速度慢于rdb

AOF文件时一个只进行追加日志文件,redis可以在AOF文件体积变得过大时自动在后台对AOF进行重写,AOF文件有序地保存了对数据库执行的所有写入操作,这些操作以redis协议的格式保存,因此AOF文件的内容非常容易被读懂,对文件进行分析也很轻松。但对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积


就如官方文档中所述:AOF和RDB持久化可以同时启用没有问题。

在通常情况下redis重启会优先载入AOF文件来恢复数据。 

posted @ 2018-07-28 17:46  学画人生  阅读(130)  评论(0编辑  收藏  举报