5.Redis持久化
- 总体介绍
 - 持久双雄
 - 一图:
 - Redis persistence
 
- RDB(Redis Database)
 - 官网介绍
 - RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。
 - 能干嘛?
 - 案例演示:
 - 需求说明
 - 配置文件
 - Redis6.0.16以下:
 - Redis6.2以及Redis-7.0.0
 
- 操作步骤
 - 自动触发
 - 本次案例:5秒修改2次则保存到rdb
 - 修改dump文件保存路径
 - 修改dump文件名称
 - 如何备份
 
- 如何恢复
 - 手动触发
 - Save
 - BGSAVE(默认)
 
- 优势
 - 劣势
 - 如何检查修复dump.rdb文件
 - 哪些情况会触发RDB快照?
 
- AOF(Append Only File)
 - 官网介绍
 - 是什么?
 - 能干嘛?
 - AOF持久化工作流程
 - AOF缓冲区三种写回策略
 - 案例演示和说明&&AOF配置/启动/修复/恢复
 - 配置文件说明(6 VS 7)
 - Redis7.0 Multi Part AOF的设计
 - 正常恢复
 - 异常恢复
 
- 优势
 - 劣势
 - AOF重写机制
 - 是什么?
 - 触发机制
 - 触发
 - 案例说明
 
- 重写原理:
 - AOF优化.配置项详解
 - 小总结
 
- RDB-AOF混合持久化
 - 纯缓存模式
 
总体介绍
https://redis.io/docs/management/persistence/

持久双雄
一图:

Redis persistence

RDB(Redis Database)
官网介绍

RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。
能干嘛?

案例演示:
需求说明

配置文件
Redis6.0.16以下:

Redis6.2以及Redis-7.0.0

可以看到,总体上时间是延长了,即相同时间下要求操作数更多了,才能触发保存rdb.
操作步骤
自动触发


################################ SNAPSHOTTING  ################################
 413 
 414 # Save the DB to disk.
 415 #
 416 # save <seconds> <changes> [<seconds> <changes> ...]
 417 #
 418 # Redis will save the DB if the given number of seconds elapsed and it
 419 # surpassed the given number of write operations against the DB.
 420 #
 421 # Snapshotting can be completely disabled with a single empty string argument
 422 # as in following example:
 423 #
 424 # save ""
 425 #
 426 # Unless specified otherwise, by default Redis will save the DB:
 427 #   * After 3600 seconds (an hour) if at least 1 change was performed
 428 #   * After 300 seconds (5 minutes) if at least 100 changes were performed
 429 #   * After 60 seconds if at least 10000 changes were performed
 430 #
 431 # You can set these explicitly by uncommenting the following line.
 432 #
 433 # save 3600 1 300 100 60 10000
 
本次案例:5秒修改2次则保存到rdb

修改dump文件保存路径

# The working directory.
 497 #
 498 # The DB will be written inside this directory, with the filename specified
 499 # above using the 'dbfilename' configuration directive.
 500 #
 501 # The Append Only File will also be created inside this directory.
 502 #
 503 # Note that you must specify a directory here, not a file name.
 504 dir ./
 

修改dump文件名称

如何备份
情况一:

情况二:

如何恢复
1.将备份文件(dump.rdb)移动到redis安装目录并启动服务即可
2.备份成功后故意用flushdb清空redis,看看是否可以恢复数据
3.物理恢复,一定服务和备份分机隔离
手动触发

 
Save
在主程序中执行会阻塞当前redis服务器,直到持久化工作完成执行save命令期间,Redis不能处理其他命令,线上禁止使用。

BGSAVE(默认)

 
Redis会使用bgsave对当前内存中的所有数据做快照,这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据。


 
优势

 
劣势

 
如何检查修复dump.rdb文件

哪些情况会触发RDB快照?

 
stop-writes-on-bgsave-error


AOF(Append Only File)
官网介绍

 AOF(仅追加文件):AOF持久性记录服务器接收到的每个写操作。然后,这些操作可以在服务器启动时再次重播,重建原始数据集。命令使用与Redis协议本身相同的格式进行记录。
是什么?

能干嘛?

Aof保存的是appendonly.aof文件
AOF持久化工作流程

AOF缓冲区三种写回策略

 
三种写回策略小总结update
案例演示和说明&&AOF配置/启动/修复/恢复
配置文件说明(6 VS 7)
1.如何启动AOF


 
 
aof文件-保存名称

Redis7.0 Multi Part AOF的设计

正常恢复


异常恢复


优势

 
更好的保护数据不丢失、性能高、可做紧急恢复
劣势
- 相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb。
 - aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同。
 
AOF重写机制
是什么?

启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。
触发机制
默认

触发

案例说明

 
重写原理:
1:在重写开始前,redis会创建一个“重写子进程”,
这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
2:与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,
这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
3:当“重写子进程”完成重写工作后,它会给父进程发一个信号,
父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中
4:当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中
5:重写aof文件的操作,并没有读取旧的aof文件,
而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似
 
AOF优化.配置项详解

小总结

RDB-AOF混合持久化

 
 
纯缓存模式
























