什么是持久化

利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化

为什么要进行持久化

防止数据的意外丢失,确保数据安全性

持久化过程保存什么

1.将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据              RDB
2.将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程    AOF

一、RDB启动方式——save指令

命令执行
谁:redis操作者(用户)
什么时间:即时(随时进行)
干什么事:保存数据

命令

save     #客户端设置完key/value之后输入save保存

作用

手动执行一次保存一次数据

执行持久化命令之后在日志存放地址发现dump.rab文件,执行save命令保存数据的文件,保存当前的快照信息。

二、RDB启动方式——save指令相关配置

在配置文件中修改以下参数

 

 

三、数据恢复过程演示

就是在启动的时候将数据加载过来的

四、RDB启动方式——bgsave指令

Redis是单线程任务执行序列,如果执行save命令时间过长会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用。

数据量过大,单线程执行方式造成效率过低如何处理:放在后台执行

谁执行:redis操作者(用户)发起指令;redis服务器控制指令执行
什么时间:即时(发起);合理的时间(后台执行)
干什么事情:保存数据

命令

bgsave      #后台操作
作用:手动启动后台保存操作,但不是立即执行

bgsave指令工作原理   (******)

1.客户端发送bgsave指令到redis服务端
2.系统调用fork函数,生成子进程
3.创建rdb文件
4.完成之后会返回redis服务端消息,告诉已经保存完毕

操作流程可以在日志文件中查看到

注意:bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用

使用bgsave指令相关配置
stop-write-on-bgsave-error yes
说明:后台存储过程中如果出现错误现象,是否停止保存操作,通常默认为开启状态

五、RDB启动方式——自动执行save配置(后台还是使用bgsave指令)

前面两种都是手动执行,如果忘记执行命令怎么办?不知道数据产生了多少变化,何时保存。
自动执行
谁:redis服务器发起指令(基于条件)
什么时间:满足条件
干什么事情:保存数据
conf配置文件:  save seconds changes
作用:满足限定时间范围内key的变化数量达到指定数量即进行持久化
参数:
second:监控时间范围(单位是s)
changes:监控key的变化量
位置:在conf配置文件中进行配置

例如
save 900 1      #900秒内监测到1个key发生变化,在规定时间内只要有这些数量的key发生变化

注意:配置好后,后台还是使用的bgsave指令,除了查询之外,增加、修改、覆盖key值都会保存记录

save配置原理

 

注意

1.save配置要根据实际业务情况进行设置,频率过高过低都会出现性能问题,结果可能是灾难性的。
2.save配置中对于second和changes设置通常具有互补对应关系,尽量不要设置成包含关系
3.save配置启动后执行的是bgsave操作

六、RDB三种启动方式对比

 

七、RDB特殊启动形式

1.全量复制
在主从复制中详细讲解
2.服务器运行过程中重启
debug reload
3.关闭服务器时指定保存数据
shutdown save

八、RDB优缺点