什么是持久化
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化
为什么要进行持久化
防止数据的意外丢失,确保数据安全性
持久化过程保存什么
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优缺点