Redis linax - Redis持久化
- 持久化快照模式(RDB)
- 每隔一段时间,把北村中的数据写入磁盘的临时文件,作为快照,恢复的适合把快照文件读进内存,如果宕机重启,内存里的数据会消失,再次启动redis后,数据就会恢复,备份由内存存入磁盘,恢复是由读取磁盘数据到内存。
- 优势
- 每隔一段时间数据全量备份
- 灾备简单,可以远程传输,外发备份文件
- 子进程备份的时候,主进程不会有任何io操作(写、编辑、删除),保证备份数据的完整性
- 相对AOF,文件小恢复快
- 劣势
- 发生故障时,有可能丢失最后一次未来得及备份的数据
- 子进程所占用的内存占比和主进程一样,会增加cup的负担
- 由于定时全量备份是重量级的操作,所以实时备份,不是明智的选择,cup消耗非常高
- RDB配置(redis.conf)
- dbfilename:持久化文件名称
- dir:持久化文件路径
- save:保存,默认保存机制如下
- save 3600 1 #15分钟只有1次至9次操作,15分钟后备份
- save 300 10 #5分钟只有10次至9999次操作,5分钟后备份
- save 60 10000 #1秒钟内,10000次或以上次数操作,每秒备份
- stop-writes-on-bgsave-error
- yes:如果持久化过程出错则停止写操作
- no:跳过报错继续操作,可能造成数据不一致
- rdbcompression
- yes:开启rdb压缩模式,有cup性能消耗
- no:不对持久化文件进行压缩
- rdbchecksum
- yes:使用CRC64算法对rdb数据进行校验,消耗cup性能,占比10%左右
- no:不进行校验
- 持久化日志模式(AOF)
- 会记录每一次io操作(写、编辑、删除),数据强一致性,文件以追加的形式写入,数据恢复时是读取整个文件的写入操作
- 优势
- AOF更加耐用,可以以秒级别为单位备份,如果发生问题,也只会丢失最后一秒的数据,大大增加了可靠性和数据完整性。所以AOF可以每秒备份一次,使用fsync操作
- 以log日志的形式追加,如果磁盘满了,会执行redis-check-aof工具
- 当数据太大的时候,redis可以在后台自动重写aof。当redis继续把日志追加到老的文件中去时,重写也是非常安全的,不会影响客户端的读写操作
- AOF日志包含所有写操作,更加便于redis的解析恢复
- 劣势
- 相同的数据进行备份,AOF比RDB大
- 针对不同的同步机制,AOF会比RDB慢,因为AOF每秒都会做备份操作,这样相对于RDB来说效率低,每秒备份fsync没有问题,但是如果客户端的每次写入就做一次数据备份fsybc,redis性能会下降
- AOF发生过bug,就是数据恢复的时候数据不完整,这样显得AOF会比较脆弱,容易出现bug,因为AOF没有RDB那么简单,但是为了防止bug的产生,AOF就不会根据旧的指令去重构,而是根据当时缓存中存在的数据指令去做重构,这样就更加健壮可靠了
- AOF的配置(redis.conf)
- appendonly:AOF持久化开(yes)关(no),默认是关闭状态
- appendfilename:AOF持久化文件名称
- dir:持久化目录(与RDB共享配置)
- appendfsync:同步模式
- no:不同步
- everysec:每秒备份,推荐使用
- always:每次操作都会备份,安全并且数据完整,但是慢性能差
- no-appendfsync-on-rewrite:重写的时候是否要同步,no可以保证数据安全
- 重写机制,避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb # 当前AOF文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写
- auto-aof-rewrite-percentage 100
- auto-aof-rewrite-min-size 64mb
- RDB与AOF持久化技术选择
- 如果只是单纯的做缓存,则不需要持久化技术
- 如果能接受一段缓存丢失,对于数据没有那么较真,那么RDB是不错的选择
- 如果对于数据实时性与一致性要求高,AOF很不错
- 也可以两者结合使用:
- 1、用RDB做冷备份,可以在不通的时期对不哦她那个的版本做恢复,AOF做热备份,保证数据丢失性与占比最小。当AOF文件破损了在用RDB恢复,这样就做到了两者的结合,也就是说redis恢复会先加载AOF,如果AOF有问题了,就会加载RDB这样就达到了冷热备份的目的了
- 2、同样是用RDB做冷备份,用AOF做热备份,恢复的时候先加载RDB,RDB空白处没有进行备份的数据,在AOF日志文件中提取,这样可以大大提升恢复数据的速度,也可以在RDB备份间隔与AOF文件重构大小动动脑筋,达到优化的效果