Redis的学习与总结五:RDB持久化

        Redis 是一个内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将内存中的数据库状态保存到磁盘里,那么服务器一旦退出,服务器中的数据库状态也会消失不见。RDB是Redis用来进行持久化的一种方式,RDB持久化既可以手动执行,也可以根据服务器的配置自动执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,该文件是一个压缩二进制文件,由多个部分组成,通过该文件可以还原生成RDB文件时的状态。对于不同类型的键值对,RDB文件会采用不同的方式来保存它们

          有两个 Redis 命令可以用于生成RDB文件:一个是SAVE,另一个是BGSAVE,SAVe命令会阻塞 Redis服务进程,直到RDB文件创建完毕为止,BGSAVE令会会创建一个子进程,然后由子进程创建RDB文件,服务器进程会继续处理命令请求。AOF文件的更新频率通常比·RDB文件更新频率高,服务器在载入RDB文件期间,会一直处于阻塞·状态,直到载入工作完成为止。

配置规则:

save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存

若不想用RDB方案,注释掉所有的 save 行来停用保存功能,也可以通过命令:redis-cli config set save " "

dirty 计数器和lastsave 属性

  dirty 计数器记录距离上一次成功执行 save 命令或者 bgsave 命令之后,Redis服务器进行了多少次修改(包括写入、删除、更新等操作)。lastsave 属性是一个时间戳,记录上一次成功执行 save 命令或者 bgsave 命令的时间。通过这两个命令,当服务器成功执行一次修改操作,那么dirty 计数器就会加 1,而lastsave 属性记录上一次执行save或bgsave的时间,Redis 服务器还有一个周期性操作函数 severCron ,默认每隔 100 毫秒就会执行一次,该函数会遍历并检查 saveparams 数组中的所有保存条件,只要有一个条件被满足,那么就会执行 bgsave 命令。执行完成之后,dirty 计数器更新为 0 ,lastsave 也更新为执行命令的完成时间。

执行flushall命令,也会产生dump.rdb文件,但里面是空的

默认RDB方式保存的是dump.rdb文件,恢复也是识别的是dump.rdb

通过RDB文件恢复数据将dump.rdb 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可

RDB优点:

(1)RDB是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集。这种文件非常适合用于进行备份和灾难恢复。

(2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

RDB缺点:

(1)RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作(内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑),频繁执行成本过高(影响性能)

(2)在一定间隔时间做一次备份,所以如果redis意外挂掉的话,就会丢失最后一次快照后的所有修改(数据有丢失)

(3)RDB文件使用特定二进制格式保存,可能存在版本不兼容的问题

猜你喜欢

转载自blog.csdn.net/qq_26891141/article/details/85073820