• 欢迎访问www.xadocker.cn QQ群
  • 时间不在于你拥有多少,而在于你们如何使用。-----艾克
  • 自立自主总胜过俯首为奴!-----卡密尔
  • 每个人都有一副面具,我只是自制了一副。-----戏命师
  • 真正的大师,永远怀着一颗学徒的心。-----剑圣
  • 世间万物表里如一者,又有几何?-----婕拉

Redis-RDB持久化

DB xadocker.cn 8个月前 (03-04) 133次浏览 0个评论 扫描二维码
文章目录[隐藏]
由于redis是使用内存存储数据,速度快但因为内存断电后数据易丢失,所以需要将内存上的数据保存到磁盘上进而使数据持久化。那为了解决这个问题,redis有两种持久化方式,分别就是RDB和AOF

RDB(Redis DataBase)持久化

RDB可以在指定的时间间隔内生成数据集的时间点快照(point-in-time-snapshot),优点就是速度快,适用于做备份,redis主从复制也是基于RDB持久化功能实现的,但依然存在缺点,因为如果在两个快照时间点之间发生故障,则之间的数据就会丢失。另一方面,只要RDB文件存在并未发生损坏的情况下就可以用它来还原redis中的数据,并且redis在重启时或自动加载RDB文件中的数据

RDB配置

配置文件

重启后查看日志文件会发现每次重启都会加载RDB文件来恢复数据,Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止

关闭时也会触发RDB持久化

手动触发RDB

使用redis命令触发:

save
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止,显然该命令对于内存比较大的实例会造成长时间阻塞,这是致命的缺陷,为了解决此问题,Redis提供了第二种方式
bgsave
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短
flushall
也会产生dump.rdb,但是该文件是空的,也就是清空,没有任何意义

RDB的优势

1. RDB是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集。这种文件非常适合用于进行备份和灾难恢复。
2. 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
3. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

RDB劣势

1. RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作(内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑),频繁执行成本过高(影响性能)
2. RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题(版本不兼容)
3. 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)


xadocker, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Redis-RDB持久化
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址