Redis数据持久化机制

Redis数据持久化机制

  • RDB(Redis DataBase):把数据以快照的形式保存在磁盘
  • AOF(Append Only File):将每一个收到的写命令都通过write函数追加到文件中,类似于日志记录。
  • 保障数据的安全最好采用两种机制结合, BGSAVE 做全量持久化,AOF做增量持久化

RDB持久化

触发RDB持久化过程分为手动触发和自动触发

手动触发命令
  • save: 阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用 。

  • bgsave: Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短 。
    RDB手动触发

自动触发命令
  1. 在配置文件中配置,如在redis.conf中
# 900s内至少达到一条写命令
save 900 1
# 300s内至少达至10条写命令
save 300 10
# 60s内至少达到10000条写命令
save 60 10000

这种触发方式与bgsave命令类似,达到触发条件时,会forks一个子进程进行数据同步

不过最好不要通过这方式来触发RDB持久化,因为设置触发的时间太短,则容易频繁写入rdb文件,影响服务器性能,时间设置太长则可能会因为意外宕机等情况造成数据丢失。

  1. 主从复制时,主节点自动触发
  2. Debug Reload
  3. 执行Shutdown命令且redis没有开启AOF持久化
该机制的优缺点

优点

  • RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照。非常适用于备份,全量复制等场景。 可用来灾难恢复,根据指定时间段备份的快照恢复不同版本的数据集
  • Redis加载RDB恢复数据远远快于AOF的方式

缺点

  • 无法做到实时(秒级)持久化,该机制需创建子进程属于重量级操作,频繁操作影响性能
RDB文件说明
  • RDB是一个紧凑的单一文件,很方便传送到远程服务器进行灾难备份

  • RDB文件保存在dir配置指定的目录下,文件名通过dbfilename配置指定。

## 动态设置存放路径
config set dir {newDir}

## 动态设置存放的文件名,默认是dump.rdb
config set dbfilename {newFileName}

### 执行完命令,在下次运行时RDB文件会保存到新目录
配置文件中其他相关配置
stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。(警示运维发生灾难)

rdbcompression ;默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。

rdbchecksum :默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗

AOF持久化

  • 以独立日志的方式记录每次写命令, 重启时再重新执行AOF(Append Only File)文件中的命令达到恢复数据的目的

  • 主要用来解决数据持久化的实时性

配置使用
## 开启AOF功能,默认为no
appendonly yes

## 配置AOF文件名,默认文件名是appendonly.aof
appendfilename {fileName}

## 文件保存路径与RDB文件一致,都是配置dir指定
工作流程

命令写入 (append)、文件同步(sync)、文件重写(rewrite)、重启加载 (load)
AOF持久化

sync策略
### 在配置文件中设定
## 同步持久化。每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好
# appendfsync always

## 默认写入策略,每秒写入一次aof文件,所以最多可能会丢失1s的数据(生产环境首选)
# appendfsync everysec

## Redis服务器不负责写入aof,交由操作系统来处理什么时候写入aof文件。更快但也是最不安全的,不推荐使用。
# appendfsync no
重写机制

定期对AOF文件进行重写,达到压缩文件的目的;更小的AOF可以更快地被Redis加载;

  • 进程内已经超时的数据不再写入文件

  • 旧的AOF文件含有无效命令 ,如del,hdel,set等

  • 多条写命令合并为一个

  • 相关配置

    ### 手动触发:直接调用bgrewriteaof命令
    
    ### 自动触发配置
    auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认 为64MB
    ·auto-aof-rewrite-percentage:代表当前AOF文件空间 (aof_current_size)和上一次重写后AOF文件空间(aof_base_size)的比值
    
    ### aof_current_size和aof_base_size可以在info Persistence统计信息中查看
    自动触发时机 = aof_current_size > auto-aof-rewrite-minsize
    && (aof_current_size - aof_base_size)/aof_base_size >= auto-aof-rewritepercentage
    
    
应对AOF文件损坏

当写入AOF文件时,如果Redis服务器宕机,则AOF文件会出现格式错误,在重启服务器后,Redis服务器会拒绝重载该文件。所以如何防止此类情况发生:

  1. 备份现在的aof文件
  2. 使用 redis-check-aof命令修复aof文件
redis-check-aof -fix filename.aof

执行完重启redis就能加载已修复文件

重启Redis数据恢复流程

Redis数据恢复

有错误的地方欢迎评论指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值