redis数据持久化

redis数据是保存在内存中,如果redis关闭数据就会丢失,为了避免这种情况,所以需要把redis数据进行持久化到磁盘。这样下次启动就可以使用持久化的数据文件将进行恢复了。

RDB

全量持久化

备份命令:

# 同步全量持久化
save
# 异步全量持久化
bgsave

save:同步执行,方法调用后会立即执行持久化方法,由于redis是单线程模型,主线程会阻塞,所以备份过程中是无法为其他客户端提供服务的。

bgsave:持久化过程会fork出一个子进程执行,只有fork时会阻塞主线程,真正的持久化任务是在子进程中进行执行的,所以并不会阻塞主进程执行其他任务,是异步的。

RDB方式的持久化是必然离不开了这两个命令的,不过触发方式可以分为手动触发和自动触发

手动触发:客户端手动执行命令

自动触发:设定相关的策略,在redis的配置文件redis.conf

save 900 1
save 300 10
save 60 10000

save 900 1表示:如果距离上一次创建RDB文件已经过去的900秒时间内,Redis中的数据发生了1次改动,则自动执行BGSAVE命令

save 300 10表示:如果距离上一次创建RDB文件已经过去的300秒时间内,Redis中的数据发生了10次改动,则自动执行BGSAVE命令

save 60 10000表示:如果距离上一次创建RDB文件已经过去了60秒时间内,Redis中的数据发生了10000次改动,则自动执行BGSAVE命令

当三个条件中的任意一个条件被满足时,Redis就会自动执行BGSAVE命令

RDB执行流程

  1. 执行save、basave、shutdowm命令时触发
  2. fork持久化子进程开始执行持久化任务。
  3. 遍历hashtable,利用copy on write,把整个内存dump下来。

rdb中有两个核心概念 fork 和copy-on-write ,执行数据备份的流程如下:

在执行basave的时候,redis首先会fork一个子进程得到一个新的子进程。子进程是共享主进程内存数据的,会将数据写入到磁盘上一个临时的rdb文件中,当子进程写完临时文件后,会将原来的.rdb文件替换掉,这个就是fork的概念。fork时主进程不进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值