redis 持久化有两种方式
快照方式,即设定多久进行一次数据快照。
恢复数据比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:每次的操作都会进行记录。
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就可以了。
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 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进行重写压缩