一、RDB持久化
RDB持久化:将内存中的数据生成快照保存到硬盘上。
触发条件:
- 手动触发:通过redis-cli执行
BGSAVE
命令触发; - 自动触发:
– 配置文件中的“save m n”配置项:在m秒时间内发生了n次写入操作;
– 主从复制结构中,从节点进行全量复制时,会触发主节点执行BGSAVE
命令进行RDB持久化;
– 通过redis-cli执行shutdown命令时,如果没有开启AOF持久化功能则自动执行BGSAVE
进行RDB持久化。
1.1、RDB持久化过程
①某个条件触发RDB持久化;
②如果没有正在执行的子进程(如RDB/AOF子进程),Redis父进程fork一个子进程,用于持久化过程,fork过程中,Redis父进程会短暂阻塞。通过INFO stats
命令的“latest_fork_usec”记录上一次fork操作的耗时,单位是微秒;
③Redis父进程fork操作完成,将不再阻塞父进程,父进程可以继续响应其它命令;
④子进程生成RDB文件,根据Redis父进程内存中的内容生成快照,并替换原有RDB文件。LASTSAVE
和INFO persistence
命令的“rdb_last_save_time”记录上一次RDB持久化的时间戳;
⑤子进程执行完成,发送信号告知Redis父进程,Redis父进程更新INFO persistence
中的rdb相关信息。
1.2、RDB持久化相关配置
- 何时进行RDB持久化:“save m n”:在m秒时间内发生了n次写入操作;
- RDB文件存储路径:”dir /usr/local/redis/data”,Redis运行时通过
CONFIG SET dir ***
更改; - RDB文件名称:“dbfilename dump_6379.rdb”,Redis运行时通过
CONFIG SET dbfilename ***
更改文件名;