RDB初步了解

发布时间 2023-07-21 09:56:26作者: 海山了-

RDB概念

  1. 快照文件是.rdb结尾
  2. redis6.2以前和之后(包括6.2)在什么条件下会保存rdb文件有所不同
    1. 以前
      1. 15min&&1个key(改变)调用保存
      2. 5min&&10key(改变)调用保存
      3. 1min&&10000key(改变)调用保存
    2. 之后(改变)
      1. 60min&&1key(改变)调用保存
      2. 5min&&100key(改变)调用保存
      3. 没有变化

RDB要修改配置文件的地方

  1. 文件名
  2. 可以修改下文件的保存时间(save time changes)
  3. 保存文件的地方:dir ....

RDB完成使命的道路(自动挡)

  1. 只要达到条件就会生成一个rdb
  2. flushall/flushdb也会自动生成一个rdb但是是空的
  3. shutdown也会自动生成一个rdb(不为空,同时即使没有满足到原先保存的条件也会保存)
  4. redis在重启的时候会默认在我们原先指定好的dir(存放rdb文件的位置)来读取rdb,恢复数据

在生成rdb文件中一定要存在另一台服务器上,防止生产机物理损坏后备份文件也挂了,同时生成的rdb只会是一个,倘若真有人用了flushall/flushdb文件很可能形成覆盖

不用很可能!!

就是会:(他甚至不愿意比较一下文件的大小,直接取决于时间,不过也对!!!,假若是用户确实是需要进行这样的操作呢?那你岂不是违反用户意愿了吗?)

手动触发保存rdb(手动挡)

  • 应用情景:

当你突然保存所谓非常重要的数据时,例如保存了1个亿那么我们可以手动保存rdb为了安全起见

  • 命令
  1. save:(坚决不可用,会造成堵塞现象,redis的主线程会停止其他工作专心保存rdb文件,造成堵塞现象,在生成中会造成不可用现象万万不可用)
  2. BGsave(使用fork,生成一个子进程,这个子进程会来进行保存rdb工作,不会影响到主进程完成保存的功能)

fork:

Redis的fork是指Redis进程复制自身,创建一个与当前Redis实例相同的新进程。这个新进程和原来的Redis实例共享同一个配置文件、数据文件和端口号等资源,但是它们是两个独立的进程,互不影响。

额外命令

  • LASTSAVE:获取最后一次保存的时间(LASTSAVE命令获取的是一个Unix时间戳)
  1. 可以使用linux的date -d @时间戳来获取我们能读懂的时间

    也可以

  2. redis-cli DATE +%Y-%m-%d %H:%M:%S [lastsave timestamp]
    => "2022-03-14 14:38:05"
    
        
    

    其中,[lastsave timestamp]是上一步中通过LASTSAVE命令获取到的Unix时间戳。

rdb的优势与劣势

优势

  1. rdb文件可以保存到远方服务器,安全性高
  2. rdb文件读入内存的时间比aof在内存中执行操作的时间快
  3. 适合大规模数据的恢复(快嘛)

劣势

  1. 无法及时且无漏缺的保存下每一时刻的redis数据和状态(可能被掐点kill掉进程或者服务器宕机,快照间的数据无法保存)
  2. rdb在保存的时候需要经常使用fork()来生成一个子进程保存rdb,如果cpu性能不高且redis更新量过大,可能会导致redis停止服务几毫秒甚至1s

rdb修复

万一rdb在写入一条数据时,或者传输时都可能文件出现损坏,可能导致整个rdb文件无法使用

修复命令

linux使用:redis-check-rdb rdb文件地址

保存rdb触发情况

  1. 达成conf文件设置的保存条件
  2. flushall/flushdb使用,不过是空的rdb
  3. shutdown
  4. 手动档操作:save/bgsave
  5. 主从复制时,主节点自动触发

关闭使用rdb的机制

  1. 命令:redis-cli config set save ""
  2. 配置文件里把 save ""的注释解除

RDB优化配置项详解

配置文件SNAPSHOTTING模块(几乎不用改,默认就可以了)

  1. stop-writes-on-bgsave-error:字面意思(最好是yes,如果你在乎数据一致性的话)
  2. rdbcompression:会对快照进行压缩,同时消耗点cpu,默认yes
  3. rdbchecksum:默认yes,存储快照后会用算法来进行数据校验,同时也会增加10%的性能消耗
  4. rdb-del-sync-files:在没有持久性的情况下删除复制中使用的RDB文件启用。默认情况下no,此选项是禁用的。(目前不是很理解)

插眼~有不理解的点

rdb-del-sync-files是Redis配置文件中的一个选项,它的作用是在主节点上执行BGSAVE或AOF持久化操作时,删除同步锁文件,以释放磁盘空间。当这个选项设置为yes时,Redis会自动删除同步锁文件;当这个选项设置为no时,Redis不会自动删除同步锁文件。