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混合持久化