0
点赞
收藏
分享

微信扫一扫

Redis数据持久化机制

墨春 2022-03-11 阅读 84
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
  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文件损坏

重启Redis数据恢复流程

Redis数据恢复

举报

相关推荐

0 条评论