Redi持久化之快照(RDB)

Redis的持久化方法包括快照(RDB)和AOF,本文聚焦于RDB持久化。快照是通过拍摄内存数据的快照生成dump.rdb文件,重启时加载以保持数据。配置快照持久化主要在Redis.conf中,通过save命令、bgsave命令或根据配置文件默认触发。验证快照效果涉及启动、添加数据、关闭Redis及再次启动的过程。快照持久化有其优缺点,如简洁的备份文件、适合灾备,但可能导致数据丢失。禁用快照持久化可通过注释掉save配置实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis持久化

所谓的持久化就是保持我们的数据不丢失,讲数据通常保存在我们的硬盘中。在Redis中持久化的方式有两种,一种是快照持久化,一种是AOF持久化,各有各的优缺点,在项目中我们得根据实际的情况来选择具体的持久化方式。

本文只要讲解快照持久化。

快照持久化

也叫RDB持久化,就是通过拍摄快照的方式来实现持久化,将某个时间的内存数据存储在一个rdb文件中。在Redis服务器重新启动的时候会加载rdb文件中的数据

配置快照持久化

Redis中快照持久化默认是开启的,在Redis.conf配置文件中有相关的配置选项
在这里插入图片描述

参数默认值说明
save900 1900秒内至少有一个key被更改就执行快照
save300 10300秒内至少有10个key被更改就执行快照
save60 1000060秒内至少有10000个key被更爱就执行快照
stop-writes-on-bgsave-erroryes拍摄快照失败是否继续执行写命令
rdbcompressionyes是否对快照进行压缩
rdbchecksumyes是否数据校验
dbfilenamedump.rdb快照文件存储的名称
dir./快照文件存储的位置

验证快照效果

1.进入安装目录,如果有dump.rdb文件就删除

在这里插入图片描述

2.启动redis,然后添加几条数据,然后关闭redis并退出

[root@xie redis]# ./src/redis-server redis.conf
[root@xie redis]# ./src/redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name aaa
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379> shutdown
not connected> exit

3.在我们的安装目录下生成了一个dump.rdb文件,这个就是我们的快照备份文件

在这里插入图片描述

5.再次启动redis,进入发现原来的数据还在,这是因为redis启动的时候加载了备份文件中的数据关闭退出后删除dump.rdb文件,启动后发现数据没有了

快照持久化原理

1.save命令

在redis运行,我们可以显示的发送一条save命令来拍摄快照。save命令是阻塞命令,也就是当服务器接收一条save命令之后就会开始拍摄快照,在此期间不会再去处理其他的请求,其他请求会被挂起直到备份结束。

在这里插入图片描述
在这里插入图片描述

2.bgsave命令

bgsave命令也是立即拍摄快照,有别save命令,bgsave并不是一条阻塞命令,而是fork一个子线程,然后这个子线程负责备份操作。而父进程继续处理客户端的请求,这样就不会造成阻塞了。

127.0.0.1:6379> ping PONG 127.0.0.1:6379> keys * (empty list or set) 
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> set age 20 OK 
127.0.0.1:6379> bgsave Background saving started

3.根据配置文件默认快照

save 900 1   #900秒内至少有1个key被更改就执行快照
save 300 10  #300内描述至少有10个key被更改就执行快照
save 60 10000  #60秒内至少有10000个key被更改就执行快照

4.stutdown命令

当我们只想stutdown命令的时候。服务器会自动发送一条save命令来完成快照操作。并在完成备份操作后关闭服务器。所以我们当我们的操作不满足前面三种情况的时候关闭服务器,再次打开我们的数据也不会丢失

5.sync命令

当在主环境中,从节点要同步主节点的数据的时候会发送一条sync命令来开发一次复制。此时主节点会发送一条bgsave命令来fork一个新的线程来完成快照并在bgsave命令操作结束后将快照文件发送给节点来完成从主节点的数据的同步。

优缺点

优点

RDB文件是一个很简洁的单文件,它保存了某个时间点的Redis数据,很适合用于做备份。你可以设定一个时间点对RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。
RDB很适合用于灾备。单文件很方便就能传输到远程的服务器上。
RDB的性能很好,需要进行持久化时,主进程会fork一个子进程出来,然后把持久化的工作交给子进程,自己不会有相关的I/O操作。
比起AOF,在数据量比较大的情况下,RDB的启动速度更快。

缺点

RDB容易造成数据的丢失。假设每5分钟保存一次快照,如果Redis因为某些原因不能正常工作,那么从上次产生快照到Redis出现问题这段时间的数据就会丢失了。
RDB使用fork()产生子进程进行数据的持久化,如果数据比较大的话可能就会花费点时间,造成Redis停止服务几毫秒。如果数据量很大且CPU性能不是很好的时候,停止服务的时间甚至会到1秒。

如何禁用快照持久化

1.在redis.conf配置文件中注释掉所有的save配置
2.在最后一条save配置追加此命令

save “”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值