Redis RDB持久化
目录
Redis的数据存储是基于内存的,所以如果当遇到Redis进程异常退出或者机房断电等突发事件,就会造成数据丢失的问题。为了有效的避免这个问题,就有了Redis持久化的机制。
RDB(快照)
RDB持久化是把当前进程数据生成快照保存到硬盘。
触发方式:
手动触发:
- save命令(同步):
当前Redis进程阻塞,直到RDB持久化完成为止,持久化内存较大的实例阻塞时间较长,线上环境不建议使用。
-
bgsave命令(异步):
Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。
自动触发:
- save m n
自动触发最常见的情况是在配置文件中通过save m n,指定当m秒内发生n次变化时,会触发bgsave。
在 redis.conf 配置文件中的默认配置:
save 900 1:表示900秒内至少由1个值发生变化,则保存
save 300 10:表示300秒内至少由10个值发生变化,则保存
save 60 10000:表示600秒内至少由10000个值发生变化,则保存
关闭RDB持久化
注释掉所有的save行来停用RDB持久化 或使用
redis-cli config set save " "
RDB优缺点
- 优点
- RDB是一个紧凑压缩的的文件,保存了Redis 在某个时间点上的数据快照。这种文件非常适合用于进行备份和灾难恢复。
- 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
- Redis加载RDB 恢复数据的速度比 AOF 的恢复速度要快。
- 缺点
- RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,如果不采用压缩算法,频繁执行成本过高
- RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题(版本不兼容)
- 在一定间隔时间做一次备份,所以如果redis意外挂掉的话,就会丢失最后一次快照后的所有修改