我的成长磨练,每天写博客,年轻人,卷起袖子,来把手弄脏吧! ------ 博客首页

Redis-2-持久化管理

Redis-2-持久化管理

1. redis为什么需要持久化

  • Redis本身是基于内存存储的,宕机后会丢失数据,数据安全没有保证。
  • 可以作为异地备份,保证数据安全

2. RDB&AOF介绍

2.1 RDB介绍

RDB是Redis默认的持久化方案,在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中,在指定目录下生成一个dump.rdb温家。Redis重启会通过加载dump.rdb文件恢复数据。

命令:save(同步),bgsave(异步)

  • 每隔一段时间(几分钟/几小时)生产一份内存中数据的完整快照 .dump
  • 简单粗暴
  • 适用于数据做冷备份
  • 对系统性能消耗小,只需要一个子进程保存数据
  • 数据保存不实时

配置文件

# save ""
# save 900 1          (900秒,如果至少发生了1次写入,则存一次)
# save 300 10        (300秒,如果至少发生了10次写入,则存一次)
# save 60 10000      (60秒后,如果至少发生了10000次写入,则存一次)
# save <指定时间间隔,秒> <执行指定次数更新操作>
save 900 1
save 300 10
save 60 10000

# 保存的文件名
dbfilename dump.rdb
# 保存的文件目录
dir /var/redis/6379
# 是否开启数据压缩,默认开启。使用LZF压缩,关闭后rdb文件会变的巨大,不要关
radbcompression yes

持久化内部流程

  • 读取配置文件
  • 开启子进程
  • 子进程把内存中的数据写到磁盘临时文件中
  • 临时快照文件替换原有文件

RDB优点

  • 适合大规模的数据恢复
  • 如果对业务数据完整性和一致性要求不高,RDB是最好的选择

RDB缺点

  • 数据完整性和一致性不高,因为RDB可能在最后一次备份时宕机
  • 备份时占用内存,因为Redis在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。
  • RDB会在持久化数据的时候造成服务短时间延迟-视数据量大小(同步和异步都会影响)

2.2 AOF介绍

Redis默认不开启,它的出现是为了弥补RDB的不足(数据不一致性),所以它采用了日志的形式来记录每个写操作,并追加到文件中。

Redis重启的时候会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

每有一条数据写到Redis里,用时向磁盘文件写一条redis指令日志,中间会经过系统磁盘写缓存(oscached),fsync参数可以设置强制写入磁盘时间。

  • 日志型的恢复文件
  • 需要利用oscached缓存机制
  • fsync参数指定

配置文件

# 开启AOF
appendonly yes

# 指定本地数据库文件名
appendfilename "appendonly.aof"
# 为了避免AOF文件无限制增长
# 配置重写触发机制,当aof文件大小是上次rewrite后大小的一倍且文件大于64mb触发
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 1024mb

# fsync可选配置
# appendfsync always 每次都写
# appendfsync no 不去控制时间,根据OS系统配置
# appendfsync everysec 每秒都写(推荐)
appendfsync everysec

# redis恢复时,会忽略最后一条可能存在问题的指令,默认为yes
aof-load-truncated yes

AOF 优点

  • 数据的完整性和一致性更高
  • AOF可以保证内存中的数据一条都不丢,在配置文件中设置成每一条数据都执行一次磁盘写操作,但写入的qps性能会大降
  • AOF的rewrite对性能影响比较小,是由后台进程执行操作,而且在append数据的时候性能也比较高,在数据尾部出现破损也可以修复

AOF 缺点

  • AOF的持久化文件会比较大
  • AOF文件会越来越来,恢复越来越慢
  • AOF写QPS比RDB低,RDB可以让redis性能达到最高

2.3 RDB&AOF的选用

AOF恢复速度慢,但不会丢数据
RDB恢复速度快,但是存在时效性问题

我们需要根据redis数据需求和业务场景来确定数据的持久化方案。
同时开启RDB和AOF的话,会优先使用AOF数据进行恢复。

在灾难发生的时候,比如被人flushall了,aof必须在rewrite触发之前找到之前的aof文件进行恢复,rdb由于是定时操作,可以回档到上一次备份事件,做数据回档处理。

3. redis的AOF&RDB灾难恢复工具

位于安装目录: [redis_path]/src/reids-xxx

  • redis-check-aof
  • redis-check-dump

利用这两个工具可以修复在持久化数据的过程中系统非法宕机导致磁盘持久化数据不完整的文件。

posted on 2023-03-28 19:13  SethMessenger  阅读(10)  评论(0)    收藏  举报

导航