redis 持久化 ——RDB
RDB
redis database
的简写 ;
在指定时间间隔后,将内存中的数据集快照写入数据库 ;在恢复时候,直接读取快照文件,进行数据的恢复 ;
在进行 RDB
的时候,redis
的主线程是不会做 io
操作的,主线程会 fork
一个子线程来完成该操作;
子线程在操作的时候,会先将数据写进临时文件中,等到内存中所有的数据都写进临时文件中以后,才会进行文件的替换,用该临时文件替换掉上一次的持久化文件 ;
从子线程的工作方式,我们也可以看出,最后一次持久化操作以后的数据面临着丢失的风险 ;
关于 fork
fork
作用是复制,复制当前线程的一个副本,副本是什么概念,复制品的意思,也就是说,主线程的数据,都会被 copy
来,这样就导致一个问题,每次进行 RDB
的时候,其实内存中是有两份数据的,这个需要考虑到 ;
dump.rdb 文件
RDB
方式保存的文件是 dump.rdb
文件 ;
在配置文件中进行配置,不再累赘,前一篇
redis
配置文件 的博客,已经讲了
如何触发 RDB 快照
- 使用
save
命令,会立刻对当前内存中的数据进行持久化 ,但是会阻塞,也就是不接受其他操作了; flushall
命令也会触发持久化 ;- 满足配置条件中的触发条件 ;
bgsave
是异步进行,进行持久化的时候,redis
还可以将继续响应客户端请求 ;- 重新启动
redis
,也会触发,记进行加载持久化文件 ;
可以通过 lastsave
获取上一次 save
的时间 ;
如何恢复
将备份文件放在 redis
的安装目录,然后启动 redis
即可 ;
优势
- 适合大规模文件的备份,速度比较快 ;
- 对数据的完整性和一致性要求不高
- 在备份的时候,是子线程在操作,不需要
redis
的主线程进行IO
操作,不会影响性能;
劣势
- fork 对内存占用 ;
- 最后一次持久化以后的数据存在丢失的风险 ;
停掉 RDB
在配置文件中,配置 save ""
即可 ;