开发者学堂课程【Redis 入门到精通(进阶篇):持久化-save配置与工作原理】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13421
持久化-save配置与工作原理
内容介绍
一、反复执行保存指令,忘记了怎么办?不知道数据产生了多少变化,何时保存?
二、RDB启动方式——save 配置
三、RDB启动方式——save 配置原理
一、反复执行保存指令,忘记了怎么办?不知道数据产生了多少变化,何时保存?
自动执行
谁:redis 服务器发起指令(基于条件)
什么时间:满足条件
干什么事情:保存数据
二、 RDB 启动方式——save 配置
1、配置
save second changes
2、作用
满足限定时间范围内 key 的变化数量达到指定数量即进行持久化
3、参数
second:监控时间范围
changes:监控key的变化量
例:second 配100,changes 配10,这100秒内执行了10个 key 的变化,不管在第5秒达成还是在第99秒达成,都会马上进行持久化。若要超过这个时间,设定100秒内10个变,结果100秒内9个变化,到期没有key在变化,则要重新计时。下一次持久化会把整个进行拷贝,是快照的思想。
4、位置
在conf 文件中进行配置
5、范例
save 900 1(15分钟内变化一个存一个,若15分钟没有变化不进行保存,频度设的会低)
save 300 10(300秒内10个发生变化,即5分钟内变化5个存一次)
save 60 10000(每一分钟内有10000个发生变化就会存一次)
注:这种设置通常根据自己的业务需要进行设置,另外前面大,后面小,是一个较为普遍的设计经验。
6、进行操作
为了不影响实验效果,把所有东西清掉
1)、改配置
[root@localhost redis-4.0.0]#cd conf
[root@localhost conf]# vim redis-6379.conf
2)、敲击回车加上配置
save 10 2(配置成10秒2个发生变化进行持久化)
3)、保存后启动指令
[root@localhost conf]# redis-serve redis-6379.conf
[root@localhost conf]#
4)、启动右侧客户端并加数据
[root@localhost redis-4.0.0]# redis-cli
127.0.0.1:6379>set name 123
ok
127.0.0.1:6379>
5)、左侧服务端进入data目录下
[root@localhost conf]# redis-serve redis-6379.conf
[root@localhost conf]# cd ..
[root@localhost redis-4.0.0]# cd data
[root@localhost data]#ll
total12
-rw-r--r--,1 root root 11527 Oct 13 04:20 6379.log
[root@localhost data]#ll
此时文件没有出来,因为只改变了一个key
6)、分别在左右侧再进行一次
右侧:[root@localhost redis-4.0.0]# redis-cli
127.0.0.1:6379>set name 123
ok
127.0.0.1:6379>set age 39
ok
127.0.0.1:6379
左侧:[root@localhost conf]# redis-serve redis-6379.conf
[root@localhost conf]# cd ..
[root@localhost redis-4.0.0]# cd data
[root@localhost data]#ll
total12
-rw-r--r--,1 root root 11527 Oct 13 04:20 6379.log
[root@localhost data]#ll
total16
-rw-r--r--,1 root root 11852 Oct 13 04:20 6379.log
-rw-r--r--,1 root root 177 Oct 13 04:20 dump-6379.rdb
[root@localhost data]#
此时已经多了一个文件,两个key 发生变化后接着进行
7)、左右侧接着进行
右侧:[root@localhost redis-4.0.0]# redis-cli
127.0.0.1:6379>set name 123
ok
127.0.0.1:6379>set age 39
ok
127.0.0.1:6379>set age 40
ok
127.0.0.1:6379>
左侧:[root@localhost conf]# redis-serve redis-6379.conf
[root@localhost conf]# cd ..
[root@localhost redis-4.0.0]# cd data
[root@localhost data]#ll
total12
-rw-r--r--,1 root root 11527 Oct 13 04:20 6379.log
[root@localhost data]#ll
total16
-rw-r--r--,1 root root 11852 Oct 13 04:20 6379.log
-rw-r--r--,1 root root 177 Oct 13 04:20 dump-6379.rdb
[root@localhost data]#ll
total 16
-rw-r--r--,1 root root 11852 Oct 13 04:20 6379.log
-rw-r--r--,1 root root 177 Oct 13 04:20 dump-6379.rdb
[root@localhost data]#
此时文件没有变化,接着进行
右侧:[root@localhost redis-4.0.0]# redis-cli
127.0.0.1:6379>set name 123
ok
127.0.0.1:6379>set age 39
ok
127.0.0.1:6379>set age 40
ok
127.0.0.1:6379>set name 321
ok
127.0.0.1:6379>
左侧:[root@localhost conf]# redis-serve redis-6379.conf
[root@localhost conf]# cd ..
[root@localhost redis-4.0.0]# cd data
[root@localhost data]#ll
total12
-rw-r--r--,1 root root 11527 Oct 13 04:20 6379.log
[root@localhost data]#ll
total16
-rw-r--r--,1 root root 11852 Oct 13 04:20 6379.log
-rw-r--r--,1 root root 177 Oct 13 04:20 dump-6379.rdb
[root@localhost data]#ll
total 16
-rw-r--r--,1 root root 11852 Oct 13 04:20 6379.log
-rw-r--r--,1 root root 177 Oct 13 04:20 dump-6379.rdb
[root@localhost data]#ll
total 16
-rw-r--r--,1 root root 12177 Oct 13 04:21 6379.log
-rw-r--r--,1 root root 178 Oct 13 04:21 dump-6379.rdb
[root@localhost data]#
此时文件发生变化,因为两个 key 发生变化,
在右侧进行 get name、get key 看左侧是否发生变化
右侧:127.0.0.1:6379>get name
“321”
127.0.0.1:6379>get age
“40”
127.0.0.1:6379>
左侧接着进行依旧没有变化。
右侧执行 del name
右侧:127.0.0.1:6379>del name
(integer)1
左侧文件依旧没有发生变化
右侧执行set age 41
右侧:127.0.0.1:6379>set age 41
ok
127.0.0.1:6379>
左侧进行执行文件发生变化。
从以上操作可以看出 serve 只要在时间范围内 key 发生变化,马上就去执行对应的指令。
三、 RDB 启动方式——save 配置原理
若执行上图三条指令,会发送指令至 redis,每一个指令返回后都有一个结果。
1、结果会如何影响 save?
1)、会对数据产生影响
2)、真正产生了影响
3)、不进行数据比对
不会拿现在的数据改变的值与原来的值进行比对,比如连续进行两次 redis,那么会认为两个 key 发生变化
总结:只要影响了一个数据,那么就认为产生了一个影响量
2、注意
1)、save 配置要根据实际业务情况进行设置,品读过高或过低都会出现性能问题,结果可能是灾难性的
2)、save 配置中对于 second 与 changes 配置通常具有互补对应关系,尽量不要设置成包含性关系
3)、save 配置启动后执行的是 bgsave 操作
