6、持久化--RDB快照

1、持久化简介
  • 意外断电
  • 自动备份
  • 什么是持久化
    • 利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化
  • 为什么要进行持久化
    • 防止数据的意外丢失,确保数据安全性
  • 持久化过程保存什么
    • 将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据:RDB
    • 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程:AOF
2、RDB启动方式--save指令
  • 命令执行
    • 谁:redis操作者(用户)
    • 什么时间:即时(随时进行)
    • 干什么事情:保存数据
  • RDB启动方式--save指令(线上环境不建议使用)
    • 命令:
save
    • 作用:
      • 手动执行一次保存操作
  • RDB启动方式--save指令相关配置
    • dbfilename dump.rdb
      • 说明:设置本地数据库文件名,默认值为dump.rdb
      • 经验:通常设置为dump-端口号.rdb
    • dir /redis文件夹/data
      • 说明:设置存储.rdb文件的路径
      • 经验:通常设置成存储空间较大的目录中,目录名称data
    • rdbcompression yes
      • 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
      • 经验:通常设置为开启状态,如果设置为no,可以节省CPU运行时间,但会使存储的文件变大(巨大)
    • rdbchecksum yes
      • 说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程中均进行
      • 经验:通常默认为开启状态,如果设置为no,可以解析读写性过程约10%时间消耗,但是存储一定的数据损坏风险
  • 举例:
# 在conf/redis-6380.conf配置rdb的配置
port 6380
daemonize yes
logfile "6380.log"
# rdb和log存储的位置
dir /root/redis-4.0.0/data
# rdb在本地数据库中的文件名
dbfilename dump-6380.rdb
# 存储rdb时开启压缩
rdbcompression yes
# 对rdb文件格式校验
rdbchecksum yes

# 在窗口1中,连接redis 6380
redis-cli -p 6380
127.0.0.1:6380> keys *
=>	(empty list or set)
127.0.0.1:6380> set name 123
=>	OK
127.0.0.1:6380> get name
=>	"123"
127.0.0.1:6380> save
=>	OK
127.0.0.1:6380> set age 39
=>	OK
127.0.0.1:6380> save
=> OK
    • 在我们的dir配置的data目录中可以看到dump-6380.rdb的文件存在
    • 数据恢复过程:我们尝试进行断开redis 6380的连接,然后重新启动查看是否还有数据存在(当我们重启6380这个端口后,可以发现数据是存在的)
root@ubuntu:~/redis-4.0.0/conf# ps -ef| grep redis
zhao     26735 26702  0 18:43 ?        00:00:00 redis-server *:6379
root     27366     1  0 18:43 ?        00:00:00 redis-server *:6380
root     31509 12083  0 18:46 pts/6    00:00:00 grep --color=auto redis
root@ubuntu:~/redis-4.0.0/conf# kill -9 27366
root@ubuntu:~/redis-4.0.0/conf# ps -ef| grep redis
zhao     26735 26702  0 18:43 ?        00:00:00 redis-server *:6379
root     31781 12083  0 18:46 pts/6    00:00:00 grep --color=auto redis
root@ubuntu:~/redis-4.0.0# redis-server conf/redis-6380.conf
root@ubuntu:~/redis-4.0.0# ps -ef | grep redis
root      1049     1  0 18:48 ?        00:00:00 redis-server *:6380
root      1174 12083  0 18:48 pts/6    00:00:00 grep --color=auto redis
zhao     26735 26702  0 18:43 ?        00:00:00 redis-server *:6379
root@ubuntu:~/redis-4.0.0# redis-cli -p 6380
127.0.0.1:6380> keys *
    1) "name"
=>  2) "age"
127.0.0.1:6380> mget name age
    1) "123"
=>  2) "24"
  • rdb启动方式--save指令工作原理
  • 注意:save指令的执行会阻塞当前Redis服务器,直到RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用
3、RDB启动方式--bgsave指令
  • 后台执行
    • 谁:redis操作者(用户)发起指令;redis服务器控制指令执行
    • 什么时间:即时(发起);合理的时间(执行)
    • 干什么事情:保存数据
  • RDB启动方式--bgsave指令
    • 命令
bgsave
    • 作用:
      • 手动启动后台保存操作,但不是立即执行
  • 举例:
127.0.0.1:6380> set addr beijing
=>	OK
127.0.0.1:6380> bgsave
=> 	Background saving started
  • 我们启动了bgsave,怎么看是否成功了呢,我们打开日志可以看到
  • bgsave指令工作原理
  • 注意:bgsave命令是针对save阻塞问题做的优化。redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。
  • bgsave指令相关配置:
    • dbfilename dump.rdb
      • 说明:设置本地数据库文件名,默认值为dump.rdb
      • 经验:通常设置为dump-端口号.rdb
    • dir /redis文件夹/data
      • 说明:设置存储.rdb文件的路径
      • 经验:通常设置成存储空间较大的目录中,目录名称data
    • rdbcompression yes
      • 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
      • 经验:通常设置为开启状态,如果设置为no,可以节省CPU运行时间,但会使存储的文件变大(巨大)
    • rdbchecksum yes
      • 说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程中均进行
      • 经验:通常默认为开启状态,如果设置为no,可以解析读写性过程约10%时间消耗,但是存储一定的数据损坏风险
    • stop-writes-on-bgsave-error yes
      • 说明:后台存储过程中如果出现错误现象,是否停止保存操作
      • 经验:通常默认为开启状态
4、rdb启动方式--save配置
  • 自动执行
    • 谁:redis服务器发起指令(基于条件)
    • 什么时间:满足条件
    • 干什么事情:保存数据
  • rdb启动方式--save配置
    • 配置:
save second changes
    • 作用:满足限定时间范围内key的变化数量达到指定数量即进行持久化
    • 参数:
      • second:监控时间范围
      • changes:监控key的变化量
    • 位置:
      • 在conf文件中进行配置
    • 范例:
save 900 1 
save 300 10
save 60 10000
"""
举例:save 100 10
在100s内执行了10个key的变化,不管你是在第5秒内还是在第99秒达成的,都会马上进行持久化;如果100s内只有9个key的变化,到期了没有key在变化了,重新计时,下次再进行持久化的时候会把整个都拷贝过去,包括前面到期了没有达到持久化的9个key。
"""
  • rdb启动方式--save配置原理
    • 注意:
      • save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的
      • save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系
      • save配置启动后执行的是bgsave操作
5、rdb三种启动方式的对比
  • save配置的方式后台执行的也是bgsave,所以只比对save和bgsave
6、rdb特殊启动形式
  • 全量复制:在主从复制中查看
  • 服务器运行过程中重启
debug reload
  • 关闭服务器时指定保存数据
shutdown save
# 默认情况下执行shutdown命令时,自动执行bgsave(如果没有开启AOF持久化功能)
7、rdb的优缺点
  • 优点:
    • rdb是一个紧凑压缩的二进制文件,存储效率较高
    • rdb内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
    • rdb恢复数据的速度要比aof快很多
    • 应用:服务器中每x小时执行bgsave指令,并将RDB文件拷贝到远程机器中,用于灾难恢复
  • 缺点:
    • rdb方式无论是执行命令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数
    • bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能
    • redis的众多版本中未进行rdb文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象
posted @ 2022-04-12 09:21  郭祺迦  阅读(73)  评论(0)    收藏  举报