1.RDB方式
-
RDB是Redis默认采用的持久化方式
-
RDB方式是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘
-
Redis会在指定的情况下触发快照
-
符合自定义配置的快照规则
-
执行save或者bgsave命令
-
执行flushall命令
-
执行主从复制操作
-
在redis.conf中设置自定义快照规则
-
-
RDB持久化条件: 格式:save <seconds> <changes>
-
示例:
-
save 900 1 表示15分钟(900秒钟)内至少1个键被更改则进行快照
-
save 300 10 : 表示5分钟(300秒)内至少10个键被更改则进行快照。
-
save 60 10000 :表示1分钟内至少10000个键被更改则进行快照
-
可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系。
-
- 配置dir指定rdb快照文件的位置
-
配置dbfilename指定rdb快照文件的名称
注意:
* Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。
* 根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。
-
快照的实现原理
- 快照过程
- redis使用fork函数复制一份当前进程的副本(子进程)
-
父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件
-
当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此,一次快照操作完成
- 注意事项:
- redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。
- 这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份, RDB文件是经过压缩的二进制文件,占用的空间会小于内存中的数据,更加利于传输。
- RDB优缺点
-
优点: RDB可以最大化Redis的性能:父进程在保存RDB文件时唯一要做的就是fork出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无序执行任何磁盘I/O操作。同时这个也是一个缺点,如果数据集比较大的时候,fork可以能比较耗时,造成服务器在一段时间内停止处理客户端的请求
- 缺点:使用RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。这个时候我们就需要根据具体的应用场景,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受范围。如果数据相对来说比较重要,希望将损失降到最小,则可以使用AOF方式进行持久化
-
1. redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。
2. 这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份, RDB文件是经过压缩的二进制文件,占用的空间会小于内存中的数据,更加利于传输。