redis持久化笔记,安全切换持久化方式

redis提供了三种持久化的方式

rdb,aof,混合(4.0)

RDB模式

rdb模式可以设定多个条件,当redis执行的操作达到某条件时,就对所有数据拍快照。
弊端:当redis突然宕机时,会丢失某一时段没来得及拍下快照的操作,具体丢失的数据量,受你所设定的条件影响。

配置

# 弱项禁用rdb,则禁用其他save设置,开启以下配置
#save ""
# 60s内有100条写入(修改)操作,则拍一次快照
save 60 100
# 120s内有10条写入(修改)操作,则拍一次快照
save 120 10
# 300s内有1条写入(修改)操作,则拍一次快照
save 300 1
# 持久化文件名
dbfilename dump.rdb
#存放位置 默认为安装目录下的data文件夹
dir ./
# 如果持久化出错,主进程是否停止写入,保护持久化文件的一致性
stop-writes-on-bgsave-error yes
# 是否压缩-为了避免拍快照耗时过长,一般不压缩
rdbcompression no
# 导入时是否检查
rdbchecksum yes

小结

当redis的写操作满足你所设置的条件时,redis会执行bgsave 命令,fork一个线程执行进行快照。
当在redis中执行shutdown时,也会自动执行bgsave命令。
数据迁移时,可直接拷贝rdb文件至新的服务文件夹下,前提是该服务同样使用了rdb方式。

AOF存储

AOF,即为append only file,追加文件(命令)的方式。
具体步骤为,设置追加模式,让redis将每一个写入命令,都记录进aof文件中。
弊端:宕机时,可能会丢失某一时刻的写命令

配置

# 是否开启aof
appendonly yes
# 文件名称
appendfilename "appendonly.aof"
# 同步方式
appendfsync everysec # 每秒同步一次
# appendfsync always # 每个写命令立即同步到aof,很慢但很安全
# appendfsync no # 将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置-aof为指令追加,文件会越来越大,当达到一定程度时,则重写aof文件,剔除无效指令
# 每次重写aof时,会记录aof大小,当现在的aof超过原aof记录的一定百分比,且文件大于64m时,则重写
auto-aof-rewrite-percentage 100 # (一倍)
auto-aof-rewrite-min-size 64mb
# 文件重写策略
# 当aof文件需要重写时,每次重写的数据量,若一次写入过大,会造成磁盘阻塞
aof-rewrite-incremental-fsync 32mb
# 加载的aof尾部有错时是否log后继续,否的话则停止加载
# 当aof异常时,需要使用redis-check-aof 修复aof文件
aof-load-truncated yes

混合持久化

混合方式,为前两种的结合,在redis4.0后可配置

配置

aof-use-rdb-preamble no

小结

开启后,若触发aof重写,则会先将当前的数据生成为rdb文件,然后生成rdb文件期间新的写命令,在生成rdb完成候,追加在该文件末尾。
恢复数据时,若文件开头为rdb,则先执行rdb恢复,再讲末尾的aof回写。

数据迁移

当redis一直使用着默认的rdb持久化方式提供服务,突然要切换为aof时,由于redis只持久化了rdb文件,若直接修改配置文件为aof,redis就会忽略原有的rdb文件,直接去找aof文件,会造成redis被清空的假象。
正确操作是,进入redis-cli界面,先进行save操作,拍一份最新的快照,避免出现异常丢失过多数据。
然后执行

CONFIG SET appendonly yes

动态修改持久化配置为aof
再执行save,由于更改为了aof,此时的save将会把数据写成一份aof文件
再执行shutdown save,安全的关闭redis服务并再次持久化,避免丢失数据。
之后,再去修改配置文件为aof,即可将redis的持久化切换为aof
aof切换为rdb同理

借鉴

redis持久化总结
一文看懂Redis的持久化原理
rdb切aof,安全保留数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值