Redis 详解持久化机制

🎈 持久化策略

RDB内存快照)

AOF(追加文件)

🎈 RDB

  • 内存快照(默认开启

  • 就是把某一时刻的数据和状态以文件的方式写到磁盘上,就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。

  • 这个快照文件称为 RDB 文件(dump.rdb),其中,RDB 就是 Redis DataBase 的缩写

分为自动触发和主动触发

  • 自动触发:通过服务端的配置文件(redis.conf)指定触发 RDB 条件,本质是通过达到一定条件后自动触发持久化,这个条件规则就是 M 秒内 N 个 key 发生了变化。

  • 主动触发:savebgsave命令让服务器生成 rdb 文件;

1、redis.conf 配置文件

 

#是否压缩rdb文件 
rdbcompression yes 

#rdb文件的名称 
dbfilename redis-6379.rdb 

#rdb文件保存目录,物理恢复,一定服务和备份分级隔离 
dir ~/redis/

2、save

save 命令是同步操作,同步数据到磁盘上,阻塞

  1. 当客户端向服务器发送 save 命令请求进行持久化时,服务器会阻塞 save 命令之后的其他客户端的请求,直到数据同步完成

  2. 如果数据量太大,同步数据会执行很久,而这期间 Redis 服务器也无法接收其他请求,所以,最好不要在生产环境使用save命令。

3、bgsave

bgsave 命令是异步操作,异步将数据同步到磁盘上,不阻塞

  • 当客户端发服务发出 bgsave 命令时,Redis 服务器主进程会 forks 一个子进程来数据同步,在将数据保存到 rdb 文件之后,子进程会退出

  • 所以,与 save 命令相比,Redis 服务器在处理 bgsave 采用子线程进行 IO 写入,而主进程仍然可以接收其他请求,但 forks 子进程是同步的,所以 forks 子进程时,一样不能接收其他请求,这意味着,如果 forks 一个子进程花费的时间太久(一般是很快的),bgsave 命令仍然有阻塞其他客户的请求的情况发生

fork:在 Linux 系统中,调用 fork() 时,会创建出一个新进程,称为子进程,子进程会拷贝父进程的 page table。如果进程占用的内存越大,进程的 page table 也会越大,那么 fork 也会占用更多的时间。如果 Redis 占用的内存很大,那么在 fork 子进程时,则会出现明显的停顿现象

4、哪些情况会触发 RDB 快照

  • 配置文件中默认的快照配置(redis.conf);

  • 手动savebgsave命令;

  • 执行flushall/flushdb命令也会产生 dump.rdb 文件,但是里面是空的,无意义;

  • 执行shutdown且没有设置开启 AOF 持久化;

  • 主从复制时,主节点自动;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值