• 幕客老师召集小伙伴
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

课程八、Redis持久化

一、Redis持久化

持久化:就是讲Redis内存的数据持保存到磁盘中。防止数据意外丢失。

持久化方式:RDB(存储数据) AOF(存储修改命令)

注意:AOF持久化频率通畅鼻RDB更新频率高,所以:

1、服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原。

2、只有AOF关闭时,才会使用RDB持久化。

二、RDB持久化

2.1 RDB文件的创建和载入

www.iaskjob.com:6379> SAVE
OK
www.iaskjob.com:6379> BGSAVE  #派生出子进程,防止操作进程阻塞
Background saving started

2.2 RDB文件载入

服务器在载入RDB文件时,会一直出于阻塞状态,直到工作载入完毕。

2.3 配置

redis.conf

save 900 1  #服务器在900秒内,对数据进行了至少1次修改

save 300 10  

save 60 10000

#只需满足其中一个条件

2.4 周期性原理

Redis中serverCron 默认每隔100毫秒就会执行一次BGSAVE,如果满足以上条件,就会生成新的RDB文件

2.5 分析RDB文件

RDB文件就是二进制文件

www.iaskjob.com:6379> FLUSHALL
OK
(0.55s)
www.iaskjob.com:6379> SAVE
OK
(0.56s)
www.iaskjob.com:6379>

# od -c /opt/redisdb/6379db/dump.rdb
0000000 R E D I S 0 0 0 6 377 334 263 C 360 Z 334
0000020 362 V
0000022

2.6 RDB文件结构

REDIS db_version databases EOF check_sum

db_version=文件的版本号 四个字节:0006

EOF常量 = 377 

databases=数据库

check_sum=校验和 334 263   C 360   Z 334 362 V

对比:

www.iaskjob.com:6379> SET MSG "HELLO"
OK
www.iaskjob.com:6379> SAVE
OK
www.iaskjob.com:6379>
[com@Iaskjob ~]# od -c /opt/redisdb/6379db/dump.rdb
0000000 R E D I S 0 0 0 6 376 \0 \0 003 M S G
0000020 005 H E L L O 377 207 z = 304 f T L 343
0000037
更为专业的RDB分析命令:redis-check-dump

三、AOF持久化

3.1 AOF持久化的实现

追加(append)、文件写入、文件同步(sync)

追加:追加到AOF_buf缓冲区

文件写入:文件写入通过定时任务机制,刷入AOF文件

同步:就是在写入时,并发发生的客户端写入命令

always 将所有的缓冲区文件写入,并同步到AOF文件

everysec(默认) 将所有的缓冲区文件写入,如果超过1s则对AOF文件,用派生线程的方式。

no 将所有的缓冲区文件写入,不同步,由系统来决定

3.2 AOF文件的载入和数据还原

3.3 AOF重写

3.3.1 为什么要进行AOF的重写

记录的命令太多,节约空间,提高还原效率。

www.iaskjob.com:6379> RPUSH lsit 'a' 'b'
(integer) 2
www.iaskjob.com:6379> RPUSH lsit 'c'
(integer) 3
www.iaskjob.com:6379> RPUSH lsit 'D' 'E'
(integer) 5
www.iaskjob.com:6379> LPOP lsit
"a"
www.iaskjob.com:6379> LPOP lsit

 用一条命令代替RPUSH "c" "D" "E"

3.3.2 重写的过程

时间 服务器进程(父进程) 子进程
T1 执行命令SET k1 v1  
T2 执行命令SET k1 v2  
T3 执行命令SET k1 v3  
T4 创建自进程,执行AOF重写 开始AOF文件重写
T5 执行命令 SET k2 100 执行重写操作
T6 执行命令 SET k3 2222 执行重写操作
T7 执行命令 SET K4 3r32 完成AOF文件重写,向父进程发送信号
T8 接手到子进程信号,将命令SET k2 100 SET k3 2222 SET K4 3r32追加至文件末尾  
T9 新的AOF替换旧的AOF  

 

课程八、Redis持久化

Pingbacks已打开。

引用地址

暂无评论

发表评论