RDB:redis数据从内存到硬盘的快照,用于数据持久化
一、save命令持久化(同步)
- 执行方法
- redis客户端发一条
save
命令 - 生成一个新的临时RDB文件
- save执行完后,将老的RDB文件替换为新的RDB文件
- redis客户端发一条
- 复杂度:O(n)
- 缺点:
save
是一个同步的命令,如果数据量过大的话,会造成阻塞。 - 优点:没有消耗额外内存
二、bgsave命令持久化(异步)
- 执行方法
- redis客户端发一条
bgsave
命令 - 使用linux的
fork()
生成一个redis的子进程,去完成RDB文件的生成 - 当子进程生成结束后,会通知主进程
Background saving terminated with success
- redis客户端发一条
- 复杂度:O(n)
- 缺点:
fork()
会消耗内存 - 优点:“不会阻塞”redis客户端命令(
fork()
会阻塞,但速度足够快,合理使用影响不大)
三、配置文件自动持久化
- 自动生成RDB文件的配置参数( 默认)
- 格式:
save <seconds> <changes>
save 900 1 # 在900秒(15分钟)内,如果至少更改了1个key save 300 10 # 300秒(5分钟)内,如果至少更改了10个key save 60 10000 # 60秒内,如果至少更改了10000个key
- 可以配置多条,满足任意一条就会生效,就会执行
bgsave
命令 - 可以直接使用
#
注释掉save配置,禁用save - 也可以配置
save ''
取消save配置 - 建议:禁用save配置
- 格式:
- 指定生成的RDB文件的名称( 默认)
dbfilename dump.rdb
- 文件名为
dump.rdb
-
建议:
dbfilename dump-${port}.rdb
加入端口号区分,防止不同的redis直接互相覆盖
- 指定生成的RDB文件目录位置( 默认)
dir ./
- 如此配置指当前目录,即redis.config的目录
- RDB文件的配置( 默认)
stop-writes-on-bgsave-error yes #当bgsave发生了写入错误是否停止写入 rdbcompression yes # RDB文件是否压缩 rdbchecksum yes # 是否对RDB文件数据进行校验
四、其他会触发生成RDB文件的方式
- 全量复制 如主从复制
- debug reload
- shutdown
五、RDB缺点
- 耗时、耗性能
- 数据 O(N)
-
fork()
会消耗内存 - I/O性能消耗大
- 不可控、丢失数据
- 在保存执行的过程中,如果发生宕机,那么数据就丢失了
网友评论