Redis(七)------ Redis持久化

Redis(七)------ Redis持久化

12、持久化

  • 在面试和工作中,持久化都是重点
  • Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所有Redis提供了持久化功能

12.1 RDB(Redis DataBase)

12.1.1 什么是RDB

在这里插入图片描述

  • 快照:在指定的时间间隔内将内存中的数据集快照写入磁盘

  • 它恢复时是将快照文件直接读到内存

  • Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的。这确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效

  • RDB的缺点是最后一次持久化后,如果宕机了,数据可能丢失

  • 我们默认的是RDB,一般情况下不需要修改这个配置

  • 有时候在生产环境我们会将这个文件进行备份

  • rdb保存的文件是:dump.rdb

  • 在配置文件的快照中进行配置

在这里插入图片描述

  • 修改save 60 5:只要60s内修改了5次key,就会触发rdb操作
12.1.2 触发机制
  • 1、save的规则满足的情况下,会自动触发rdb规则
  • 2、执行flushall命令,也会触发rdb规则
  • 3、退出redis,也会产生rdb文件
12.1.3 恢复rdb文件
  • 只需要将rdb文件放在我们redis启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据

  • 查看需要存在的位置

127.0.0.1:6379> config get dir
1) "dir"
# 如果在这个目录下存在 dump.rdb文件,启动就会自动恢复其中的数据
2) "/usr/local/bin" 
12.1.4 优缺点
  • 优点:
    • 适合大规模的数据恢复
    • 对数据的完整性要求不高
  • 缺点:
    • 需要一定的时间间隔进行操作,如果redis意外宕机了,这个最后一次的修改数据就没有了
    • fork进程的时候,会占用一定的内容空间

12.2 AOF(Append Only File)

12.2.1 什么是AOF

在这里插入图片描述

  • 以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据回复工作

  • AOF的保存文件的:appendonly.aof

12.2.2 APPEND

在这里插入图片描述

  • 快照功能(RDB)并不是非常耐久:如果Redis因为某些原因造成故障停机,那么服务器将丢失最近写入、以及未保存到快照中的数据。从1.1版本开始,Redis增加了一种完全耐久的持久化方式:AOF持久化

  • 如果要使用AOF需要修改配置文件,appendonly yes,表示启用AOF,配置后重启Redis即可生效

  • 测试:新建5个键值对 k1 v1 …

  • 查看appendonly.aof文件

*2
$6
SELECT
$1
0
*3
$3
set
$2
k1
$2
v1
*3
$3
set
$2
k2
$2
v2
*3
$3
set
$2
k3
$2
v3
*3
$3
set
$2
k4
$2
v4
*3
$3
set
$2
k5
$2
v5
  • 手动写入一些乱码,此时再开启redis服务,会连接失败
  • 如果AOF文件有错误,Redis无法启动,需要修改aof文件
12.2.3 redis-check-aof
  • Redis提供了一个工具:redis-check-aof
  • 输入命令:./redis-check-aof --fix appendonly.aof
  • 此时再去查看aof文件,发现我们之前输入的乱码被删掉了,AOF文件正常,可以重启Redis服务
12.2.4 重写规则说明

在这里插入图片描述

  • AOF默认文件的无限追加,文件会越来越大,如果aof文件大于64M,会复制一个进程来将文件重写
12.2.5 优缺点
  • 优点:

    • 每一次修改都会同步,文件的完整性会更好
    • 每秒同步一次,可能会丢失1秒的数据
    • 从不同步,效率是最高的
  • 缺点

    • 相对于数据文件来说,AOF文件远大于RDB文件,修复速度也比RDB慢
    • AOF运行效率也比RDB慢,所以默认配置是RDB持久化

12.3 RDB和AOF比较

优点 RDB AOF
启动优先级
体积
恢复速度
数据安全性 会丢数据 根据策略决定
  • 一般来说。想达到足以媲美PostgreSQL的数据安全性,应该同时启用两种持久化功能
  • 如果非常关心数据,但可以承受数分钟内的数据丢失,可以只使用RDB持久化
  • 很多用户都只使用AOF持久化,并不推荐这种方式,因为定时生成RDB快照非常便于进行数据库备份,并且RDB恢复数据集的速度也比AOF恢复素的快

猜你喜欢

转载自blog.csdn.net/weixin_44176393/article/details/123708533