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文件末尾。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值