本文跟上一篇 Redis 数据持久化 - RDB 和 AOF 简单介绍 紧密相关,主要介绍 redis 数据持久化如何配置,以及上一篇文章中存在的问题。redis
redis 的核心配置配置是 redis.conf ,本文是基于 redis-4.0.6 版本讲解。缓存
默认状况下,redis 中的 RDB 数据持久化是开启的。 在 redis.conf 有以下一段默认配置:app
save 900 1 save 300 10 save 60 10000 # 可自行定义(不推荐更改),格式以下: # save <seconds> <changes>
配置说明:异步
好比 save 60 10000 表示若是 60s 内,有 10000 个 key 发生了改变,就保存一次快照,而且每次生成一个新的快照,都会覆盖以前的老快照。操作系统
补充:.net
AOF持久化,默认是关闭的。 打开 redis.conf, 找到以下配置日志
appendonly no # 改成 yes 就开启了 AOF appendfilename "appendonly.aof" # aof 文件名 # appendfsync always appendfsync everysec # 默认 # appendfsync no
开启 AOF 持久化以后,redis 每次接收到一条写命令,会先写入操做系统 cache 中,而后每隔必定时间再 fsync 一下,这就对应了上面的 appendfsync 配置code
fsync 三种策略blog
appendfsync always :每次写入一条数据就执行一次fsync; appendfsync everysec:每隔一秒执行一次fsync; appendfsync no :不主动执行fsync, 有操做系统本身决定
redis 中有缓存淘汰策略,所以会出现数据自动过时,另外也可能会被用户主动删除,致使 redis 中数据变少了。进程
可是,虽然数据被删除了,其对应的写日志还在 AOF 日志文件中,而且由于 AOF 日志文件就一个,所以这个文件会不断变大~~
因此才有了 rewrite 来解决这个问题,AOF 会自动在后台每隔必定时间作 rewrite 操做。
好比日志里存放了 100w 条数据的写日志,而 redis 内存中的数据只有 10 w。
AOF 会基于当前内存中的 10w 条数据构建一个新的日志文件,而后覆盖以前的旧的日志文件。
补充:
redis 2.4 以后,会自动进行 rewrite 操做
在redis.conf中,能够配置 rewrite 策略
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 举例说明上述配置的意义 好比说上一次 rewrite 以后,日志文件大小是 128 MB 若是发现日志文件增加的比例超过了100%(对应第一条配置),好比日志文件变为 300MB 而后就去跟 64 MB(对应第二条配置)作比较,若是大于 64 MB,才会去触发rewrite
若是 redis 在写入 AOF 文件时,机器宕机可能会致使 AOF 文件破损 ,这时能够用 redis-check-aof --fix 命令来修复破损的 AOF 文件
rewrite 流程
实践是检验真理的惟一标准,只有动手实践,才能真正体会 redis 是如何作数据恢复的,另外也能够用记事本打开 rdb 快照文件和 aof 日志文件,去看看里面存的是什么东西。