redis持久化之RDB

末蓝、 2024-04-18 03:56 163阅读 0赞

一、什么是RDB

RDB(Redis Database)是redis持久化数据的一种方式。

二、生成RDB文件

2.1 文件生成策略

Redis首先会生成一个rdb临时文件,当持久化完成之后,将临时文件覆盖之前的rdb文件。
Redis会默认在redis的根目录生产“dump.rdb”文件。

2.2 save命令

  1. 127.0.0.1:6379> save
  2. OK

该命令为同步命令,即同步时会阻塞其他命令

2.3 bgsave

  1. 127.0.0.1:6379> bgsave
  2. Background saving started

bgsave命令会在后台生成一个子进程来进行数据持久化。

  1. 用户执行bgsave命令
  2. redis使用fork()函数生成子进程
  3. 返回客户端“Background saving started”
  4. 子进程在后台创建RDB文件

第二步fork创建子进程的过程是同步执行的,一般情况下,这一步是非常快的,也有少数情况,这一步比较慢,如果比较慢,就会阻塞主进程

注意:

当执行bgsave时,会生成当前redis的内存快照,即将redis整个数据拷贝一份,所以当前redis占用内存会乘2,要保证有足够的内存。

2.4 save与bgsave对比




































命令 save bgsave
IO类型 同步 异步
阻塞 是(执行fork时阻塞)
时间复杂度 O(n) O(n)
优点 不消耗额外内存 不阻塞命令端命令
缺点 阻塞客户端命令 需要fork,消耗内存

三、自动生成rdb文件

在Redis中,有如下配置:

  1. save=900 1 # 当900秒内发生1条及以上数据变化,则会自动执行bgsave命令
  2. save=300 10 # 当300秒内发生10条及以上数据变化,则会自动执行bgsave命令
  3. save=60 10000 # 当60秒内发生10000条及以上数据变化,则会自动执行bgsave命令
  4. ... # 该配置可以配多个

四、rdb相关配置

  1. # 生成的rdb文件的名称,默认为dump.rdb
  2. dbfilename=dump.rdb
  3. # rdb文件存放的位置,默认是当前目录
  4. dir=./
  5. # 当bgsave发生错误时,是否停止写入
  6. stop-writes-on-bgsave-error=yes
  7. # rdb文件是否采用压缩格式
  8. rdbcompression=yes
  9. # 是否对rdb文件进行校验和的检测
  10. rdbchecksum=yes

五、其他触发RDB文件生成的条件

1. 全量复制

当进行主从全量复制时,会生成rdb文件进行全量复制。

2. debug reload

当执行该命令时,会生成rdb文件

该命令会save当前的rdb文件,并清空当前数据库,重新加载rdb,加载与启动时加载类似,加载过程中只能服务部分只读请求(比如info、ping等)

3. shutdown

当关闭时,会生成rdb文件

六、RDB存在的问题

6.1 耗时、耗性能

  1. 每次拷贝都是全量拷贝,时间复杂度为O(n),消耗时间,CPU、IO。
  2. bgsave会fork出子进程,并且会对当前redis使用copy-on-write策略进行内存拷贝,比较消耗内存。尤其是在写量非常大的情况下。

6.2 不可控、丢失数据

RDB相当于备份当前时间的数据。那样的话,如果redis宕机,那么在上次开始备份到宕机这个时间段的数据就会丢失。

发表评论

表情:
评论列表 (有 0 条评论,163人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis持久机制RDB

    1. 什么是RDB? RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的,重启Re

    相关 Redis持久RDB

    Redis持久化之RDB 由于 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容

    相关 Redis持久RDB

    原文链接:[点击打开链接][Link 1] RDB[¶][Link 2] 在运行情况下, Redis 以数据结构的形式将数据维持在内存中, 为了让这些

    相关 Redis 持久 RDB

    面试指导 > 面试官问你,什么是 Redis 持久化 ? 当遇到这种,问题,你可不要答什么硬盘存储啊什么的。面试官不是要的这种答案。 他们想听到的只有两个:

    相关 Redis 数据持久 RDB

    我们知道 Redis 是内存数据库,它将自己的数据存储在内存中,如果它不想办法将数据存入磁盘中,那么当服务器进程退出或意外宕掉的时候,服务器中的数据也会消失。 为了解决这个问

    相关 redis——持久RDB、AOF

    一  概述 目前持久化的方式有两种:快照;写日志 快照是把数据备份;写日志则是把操作过程记录下来,当我们需要恢复数据时,我们就把当时的操作重新执行一遍 AOF就