RDB持久化
redis的RDB持久话把当前进程数据生成快照(.rdb)文件保存到硬盘的过程。有手动和和自动两种触发方式。
save命令:阻塞当前redis,直到RDB持久化过程完成为止,若内存实力比较大会造成长时间阻塞。
bgsave命令:redis进程执行fork操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),在执行redis-cli shutdown关闭redis服务时,如果没开AOF持久化自动执行bgsave.
bgsave执行流程:
RDB文件的操作
命令: config set dir /usr/local //设置rdb文件保存路径
备份 : bgsave
恢复:将生成的dump.rdb文件放到redis 安装目录与redis.conf同级重启redis
RDB文件的优缺点
优点:
- 压缩后的二进制文件适用于备份,全量复制,灾难恢复
- RDB的恢复速度快于AOF方式
缺点:
- 无法做到实时持久化每次都要创建子进程,频繁操作成本过高
- 备份后的rdb文件会存在老版本不兼容新版本rdb文件的问题
AOF持久化
AOF持久化流程:
- 所有的写入命令会append追加到aof_buf缓冲区中
- AOF缓冲去向硬盘做sync同步
- AOF文件越来越大,还需要定时对AOF文件rewrite重写达到压缩
- 当redis服务重启时,可load加载AOF文件进行恢复。
AOF相关配置:
appendonly yes //启用aof持久化方式
appendfsync always //每收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒强制写入磁盘一次,性能和持久化方面做了折中,推荐
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb //aof文件,至少超过64M时,重写