Redis 学习笔记Redis持久化

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 学习笔记Redis持久化相关的知识,希望对你有一定的参考价值。

前言:默认情况下,Redis将数据库快照保存在名字为dump.rdb的二进制文件中

1.RDB(Redis Database)

1.修改规则(60s发生3次变动储存一次)
在这里插入图片描述

  • 测试
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> shutdown
not connected> 
  • dump.rdb文件生成
[root@localhost bin] ls
dump.rdb         redis-check-aof  redis-cli       redis-server
redis-benchmark  redis-check-rdb  redis-sentinel  xconfig
[root@localhost bin] cat dump.rdb 
REDIS0009	redis-ver6.2.1
redis-bits󿿀򳨭eÉjused-mem¸O
𮤭preamble~񩰂v2k5v5k4v4k3v3k1v1þ󂠧e
ÿ9Ӊ

2. 宕机也会生成rdb文件

#删除dump.rdb文件
[root@localhost bin]# rm -rf dump.rdb 
[root@localhost bin]# ls
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server  xconfig
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> shutdown 
not connected> 
[root@localhost bin]# ls 
dump.rdb         redis-check-aof  redis-cli       redis-server
redis-benchmark  redis-check-rdb  redis-sentinel  xconfig
  • save的规则满足的情况下,会自动触发rdb规则
  • 执行flushall命令,也会触发我们的rdb规则
  • 退出redis,也会产生rdb文件

3. 恢复RDB文件

  • 只需要将rdb文件放在redis启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据
  • 查看需要存放的位置【command】
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" # 如果这个目录下存在dump.rdb文件,启动就会自动恢复其中的数据

RDB保存工作流程

  • Redis 调用forks. 同时拥有父进程和子进程。并且子父进程共享内存
  • 子进程将数据集写入到一个临时 RDB 文件中
  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件
    在这里插入图片描述

RDB优缺点:

  1. 优点

    • rdb是一个紧凑的文件,适合大规模的数据恢复
    • rdb恢复大数据集时比aof要快
    • rdb通过fork一个子进程来工作,而父进程不需要做任何IO操作,最大化redis的性能
  2. 缺点

    • 需要一定的时间间隔进行操作。如果在不满足时间间隔的条件下,redis意外宕机,那么在最后一次进行持久化之后的数据都消失了
    • fork进程的时候,当数据集比较大的时候,fork的过程会非常耗时
2.AOF(Append Only File)

2.1AOF是什么?

文件名为:
在这里插入图片描述

功能:类似于历史记录,将所有的记录(命令)记录下来

2.2工作流程

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

在这里插入图片描述
2.3 手动开启AOF

在这里插入图片描述
默认是no,这里我们修改为yes

2.4 使用aof储存

# 重启redis
[root@localhost bin]# redis-server fatcats/redis.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
# 设置三个数据
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK

2.5 AOF文件损坏如何解决?

  • 一定是无法连接的
[root@localhost bin]# redis-server fatcats/redis.conf 
[root@localhost bin]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
  • 配置文件中提供了修复AOF文件机制
redis-check-aof –fix appendonly.aof
  • AOF的优点:
  1. 每一次修改同步,文件的完整性会更好
  2. 每秒同步一次,可能会丢失一秒的数据
  3. 从不同步,效率最高的
  • AOF的缺点:
  1. 相对于数据的文件来说,aof远远大于rdb,修复的速度也比rdb慢
  2. aof运行效率也比rdb慢,所以我们redis默认的配置是rdb持久化

2.6 AOF重写规则

  • 如果AOF文件大于64mb,fork一个新的进程来将文件进行重写
  • 重写后的新AOF文件里面包含了恢复当前数据库中的数据的最少命令。在Redis创建新AOF文件完成前,还是会把命令追加到旧AOF文件里,并且会把这一部分命令保存到内存缓存中,一旦新AOF文件创建完成,就会把内存缓存中的命令追加到新AOF文件末尾,并且替换掉旧AOF文件。之后所有的命令追加到新AOF文件末尾。

在这里插入图片描述

以上是关于Redis 学习笔记Redis持久化的主要内容,如果未能解决你的问题,请参考以下文章

Redis 学习笔记Redis持久化

Redis学习笔记三

Redis学习笔记7:Redis持久化-RDBAOF

Redis学习笔记7:Redis持久化-RDBAOF

尚硅谷Redis学习笔记-- Redis持久化操作

Redis6.x学习笔记持久化之AOF