RDB、AOF
redis 持久化有两种方式
RDB 快照:性能上稍微好一些。
快照方式,即设定多久进行一次数据快照。
恢复数据比AOF快,但是丢失的数据会比AOF方式要多。文件提交比AOF小。数据集大的时候,会让redis的性能低于AOF方式
RDB bgsave规则:
save 900 1
save 300 10
save 60 10000
只会保存一个dump.rdb。所以需要人工去考虑备份rdb文件。
rdb 备份的四种方式如上图
1.时点性
2.手动输入 save命令,执行前台阻塞备份
3.输入bgsave ,后台备份
4.配置文件中配置 save 秒数 修改次数
缺点:
1.不支持拉链,只能保存一个 RDB 全量文件
2.丢失数据会多些
优点:
类似java中的序列化,恢复速度快
AOF 文件:安全系数较高
aof:每次的操作都会进行记录。
fsync策略:无fsync,每秒fsync,每次写的时候fsync。默认每秒fsync策略。最多丢失1秒的数据。
在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快。但是会不安全。
4.0以前:
重写:删除抵消的命令(增加和删除的操作抵消)、合并重复的命令。最终也是一个纯指令的日志文件
4/0以后:
重写:将老的数据 RDB 到 aof 中,将增量以指令的方式append 到 aof 中。aof 是一个混合体,利用了 RDB 的快和日志的全量。
AOF和RDB都会需要fork 子进程来进行进行保存,写时复制。Redis 执行 fork() ,同时拥有父进程和子进程。
可以同时开启RDB和AOF两种方式,也可以只选择一种。恢复的时候,如果开启了两种方式,只需要恢复AOF就可以了。
怎样从RDB方式切换为AOF方式
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :
- 为最新的 dump.rdb 文件创建一个备份。
- 将备份放到一个安全的地方。
- 执行以下两条命令:
- redis-cli config set appendonly yes
- redis-cli config set save “”
- 确保写命令会被正确地追加到 AOF 文件的末尾。
- 执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾。
执行的第二条命令用于关闭 RDB 功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用 RDB 和 AOF 这两种持久化功能。
重要:别忘了在 redis.conf 中打开 AOF 功能! 否则的话, 服务器重启之后, 之前通过 CONFIG SET 设置的配置就会被遗忘, 程序会按原来的配置来启动服务器。
打开redis 目录下的redis.conf ,找到append-only no ,修改为yes,则开启aof保存。默认目录 dir ./ 当前目录,需要进行修改,否则会数据丢失。
在redis 命令行下 输入 bgsave ,会手动触发rdb文件保存
aof 文件比较简单,
*3 : 后面跟着3个操作 $3、$2、$5.
$3 :输入了3个字符 , set 输入的字符为set
当aof文件比较大时,可以对aof文件进行重写, BGREWRITEAOF 2.4之后会自动触发,2.4之前需要手工执行。
aof-use-rdb-preamble no 修改为yes,即开启aof和rdb混合模式。老版本没有!!
auto-aof-rewrite-percentage 100 当达到100%的时候进行重写压缩
auto-aof-rewrite-min-size 64mb 当达到64mb进行重写压缩