9.1 简介
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!
9.2 RDB(Redis DataBase)
在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复时将快照文件直接读到内存里。
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,等持久化过程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果在进行大规模数据的恢复,并且对于数据恢复的完整性不是非常敏感的话,那使用RDB方式比AOF方式更加的高效。
redis.conf
中的快照配置
rdb保存的文件是dump.rdb
,都是在配置文件中配置的
有时候在生产环境我们会对这个文件进行备份
9.2.1 触发机制
- save的规则满足的情况下,会自动触发rdb规则
- 执行
flush all
命令,也会触发rdb规则 - 退出redis,也会产生rdb文件
- 备份会自动产生一个rdb文件
9.2.2 rdb文件位置
-
如果是使用docker安装的redis,那么需要在第一次运行时指定data的存放目录,可以参考我另一篇博文:Redis.conf配置,里面有详细介绍,这里就使用之前配置好的路径
/root/usr/local/redis/data
。 -
如果是用安装文件安装的,dump.rdb就生成在根目录下,可以使用命令查看
127.0.0.1:6379> config get dir 1) "dir" # 如果在这个目录下存在 dump.rdb 文件,启动就会自动恢复其中的数据 2) "/usr/local/bin"
9.2.3 总结
优点:
- 适合大规模的数据恢复
- 对数据的完整性要求不高
缺点:
- 需要一定的时间间隔进行操作,如果Redis意外宕机了,这个最后一次修改数据就没有了
- fork进程的时候,会占用一定的内存空间