redis持久化rdb&aof分析
redis是一个内存数据库,数据都是加载在内存中,因此效率很高很快。但是内存中的数据会因为关机断电等操作消失,一次redis会有一个策略来将内存中的数据保存到硬盘中。
linux 可以使用whereis redis 查看redis配置文件和命令位置
连接redis可以使用命令 config get dir 查看持久化文件保存位置
redis持久化策略有两种
rdb
rdb策略会根据redis配置文件中的save参数【save seconds changes】对redis主线程fork一份子线程,进行内存快照压缩,生成一份dump.rdb文件(文件路径可以修改redis.conf--请先备份 dir 参数,文件名称可以修改dbfilename 参数)
持久化策略通过,save参数来配置。默认save参数
优点:对于大量数据来说rdb保存很快
缺点:可能会丢失最后一次快照后的数据,因为会fork一份子线程,数据量太大的话,会有加大内存负担
aof
aof 可以通过配置文件redis.conf 中appendonly参数配置为Y,默认不开启。
持久化策略有三种,通过appendfsync参数来配置,默认everysec。
aof因为保存的是操作记录日志类比于mysql的binlog。所以当aof文件大小超过一定体积的时候,会触发rewrite策略。rewrite的时候回fork一份子线程,进行日志读取,将最新记录写到新文件中,然后进行重命名。
为了不频繁触发rewrite,所以要合理配置min-size的大小。
优点:aof通过合适的同步策略可以保存数据的操作记录,而且aof文件协议也很方便读懂。数据丢失粒度会很小
缺点:aof是追加文件策略,占用体积要大于rdb,而且性能相较于rdb也会慢一些。
rdb和aof两种持久化策略,可以同时存在的,同时存在时,aof为主持久