Redis持久化之RDB

本文介绍了Redis的RDB持久化方式,它是Redis默认的持久化方式。阐述了RDB的实现原理,包括save和bgsave两种策略,还提及相关配置。同时分析了RDB的优缺点,优点有方便备份等,缺点有数据易丢失等,数据量大且写操作多建议用AOF。

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

redis有两种持久化方式,RDB和AOF。RDB是Redis默认的持久化方式。

什么是RDB?

RDB持久化是指Redis在指定时间间隔内执行指定次数的写操作时,会将存储在内存上的数据通过快照的方式写入到二进制文件中,默认文件名为dump.rdb,当然,这个文件是可以在配置文件中进行自定义配置的。

RDB的实现原理

RedisRDB持久化的两种策略:save和bgsave(background save)。

save是在主线程中进行保存数据快照的操作,手动操作,我们知道,Redis是单线程的,也就是说所有的客户端请求都是由它的主线程来进行处理的。save操作会阻塞所有客户端请求,因此,不推荐使用。

127.0.0.1:6379> save
OK

bgsave是自动触发,当内存增长到指定值或者百分比时,会触发bgsave。Redis主线程调用fork函数,复制了一个当前线程的副本(即子线程),由父线程继续处理所有客户端请求,子线程将内存上的数据全部写到临时文件中,当子线程处理完所有数据后,临时文件将替换掉原来的快照文件(.rdb文件)。如果redis没有开启AOF持久化,在redis进行shutdown关闭时,会自动执行bgsave(使用kill关闭redis,则不会执行bgsave)。

这样就完成了RDB持久化操作,当我们重启Redis时,硬盘上的.rdb文件载入到内存中。RDB文件中保存是命令执行后结果数据

每次持久化都是数据的完整替换,而不是增量同步数据。这也就意味着,如果数据量大,并且写操作较多的话,将会引起大量的磁盘io操作,会严重影响性能,那么这个时候建议采取AOF方式。

RDB相关的配置(【Redis的配置文件】中第264行

dir,指定RDB文件的存储路径;dbfilename,指定RDB文件的文件名。可以在src使用od -c dump.rdb命令来查看RDB文件内容。

127.0.0.1:6379> config get dir
1) "dir"
2) "/opt/redis-5.0.4/src"
127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

rdbcompression,RDB文件是否使用压缩。

127.0.0.1:6379> config get rdbcompression
1) "rdbcompression"
2) "yes"

save,自动持久化数据的执行条件(指定时间间隔内执行指定次数的写操作),可以设置一个或者多个

127.0.0.1:6379> config get save
1) "save"
2) "900 1 300 10 60 10000"

900秒内,至少有1个key发生变化;300秒内,至少有10个key发生变化;60秒以内,至少一万个key发生变化。满足以上3个条件下任意一个条件,则会进行数据快照。

RDB的优缺点

优点:

1、只有一个压缩后的二进制文件,能够极其方便地进行数据备份、(灾难性)数据恢复和数据转移;

2、启动时加载RDB文件比AOF文件速度快,因为AOF文件中存放的是操作命令;

3、性能最大化。主线程继续处理所有客户端请求,子线程进行数据备份。

缺点:

1、一旦Redis异常退出,就会丢失最后一次快照以后更改的数据,这样就会造成数据不完整性或者不一致;

2、不能做到实时持久化,每次都会创建子线程,进行备份数据时,会生成临时文件,占用内存等资源;

3、rdb二进制文件可能出现新老版本不兼容问题。
 

 

 

如果有写的不对的地方,请大家多多批评指正,非常感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值