Redis (三) Redis如何做持久化

Redis如何做持久化

为什么要做redis持久化

redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

Redis如何做数据持久化

RDB(快照)持久化:保存某个时间点的全量数据快照

  • 找到redis.conf文件
  • 从文件中找到 save
    在这里插入图片描述
  • sava 900 1 在900s以内有一条是写入指令,则触发备份,产生一次快照
  • save 300 10 在300s以内 如果有10 条写入,那么就会产生快照,如果变动数 > 0 还没有到10条则会等到90s以后才去做备份
    在这里插入图片描述
  • 当进程操作出现问题的时候,则停止写入操作,这样是为了保护持久化数据一致性

在这里插入图片描述

  • 是将备份的文件压缩后再保存

备份文件 在src目录下,后缀名为.rdb

  • SAVE :阻塞Redis的服务器进程,直到RDB文件被创建完毕
  • BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程

自动化出发RDB持久化的方式

  • 根据redis.conf配置中的SAVE m n 定时触发(用的是BGSAVE)
  • 主从复制时,主节点自动触发
  • 执行Debug Reload
  • 执行Shutdown且没有开启AOF持久化

BGSAVE原理
在这里插入图片描述

fork:创建进程,实现了Copy-on-Write
Copy-on-Write : 如果有多个调用者同事要求相同资源,他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正的复制一份专用副本给该调用者,而其他调用者所见到的最初的资源任然不变

RDB持久化的缺点

  1. 内存数据的全量同步,数据量大会由于I/O而影响性能
  2. 可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据

AOF持久化:保存写状态

  • 记录下除了查询意外的所有变更数据库状态的指令
  • 以append的形式追加保存到AOF文件中

修改redis.conf文件
在这里插入图片描述

  • 设置为yes即可生效
    在这里插入图片描述
  • appendfilename 生成的文件名
    在这里插入图片描述
  • 生成aof文件的额写入方式
    • always:及时将缓存中的内容写入文件
    • everysec:将缓存区中的内容每隔1s写入文件
    • no :交由文件系统决定

日志重写解决AOF文件大小不断增大的问题,原理如下:

  • 调用fork(),创建一个子进程
  • 子进程把新的AOF写到一个临时文件里,不依赖原来的AOF文件
  • 主进程持续将新的变动同事写到内存和原来的AOF里
  • 主进程获取子进程重写AOF的完成信号,往新AOF同步增量变动
  • 使用新的AOF文件替换掉旧的AOF文件

Redis数据的恢复

在这里插入图片描述
RDB和AOF的优缺点

  1. RDB:
    • 优点:全量数据快照,文件小,恢复块
    • 缺点:无法保存最近一次快照之后的数据
  2. AOF
    • 优点:可读性高,适合保存增量数据,数据不易丢失
    • 缺点:文件体积大,恢复时间长

RDB-AOF混合持久化方式
在这里插入图片描述

  • BGSAVE做镜像全量持久化,AOF做增量持久化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值