关于Redis持久化

1.前言概述

        众所周知,Redis是一款C语言编写,类似键值对Key-Value的NoSQL非关系型数据库。它的工作区域是我们计算机的内存中,那么它也面临着和内存一样的困扰,断电即消失,不能长久存储。针对这个问题,Redis提出了两套解决方案。下面我们就来介绍这两种解决方案。

2.持久化方式


     2.1 RDB

Redis Database
        内存数据镜像,把内存所有数据拍一个快照,把数据全部保存到一个二进制的磁盘文件:dump.rdb  中。这个就可以理解成我们常说的备份,Redis会在一定时间内去备份所有的缓存中的数据,这个时间我们可以通过redis.conf中添加配置,也就是说,当多少秒内有多少条数据改动时才会去触发一次Redis持久化操作。例如: 

-save 3600 1:1小时内,有一条数据改动
-save 300 100:5分钟内,有100条数据改动
-save 60 10000:1分钟,有10000条数据改动


      
默认不自动保存内存快照,需要手动调用:
- save            同步保存
- bgsave        异步保存

Redis借助了linux系统的写时复制(Copy-On-Write)技术,在生成快照的同时,仍然可以接收命令处理数据。写时复制:
-  保存快照时,先写到临时文件,完成后删除dump.rdb,把临时文件盖明成 dump.rdb
- 临时文件写入失败数据损坏,也不会影响dump.rdb

dump.rdb文件修复:

redis-check-rdb dump.rdb

RDB的优缺点:
        优点: 恢复数据速度快
        缺点:  - 可能丢失少量新数据         - 持久化时存储数据效率低

    2.2 AOF

AOF - Append Only File

AOF的持久化方式就是记录所有Redis数据操作指令,每执行一条增删改的命令,都会实时地追加到 aof 日志文件。
默认不开启AOF,需要在配置文件中开启AOF:

appendonly yes		#默认是no

时间方面的设置

appendfsync参数,三个取值:

always: 每个事件周期都同步刷新一次
everysec: 每一秒都同步刷新一次
no: 我只管写,让操作系统自己决定什么时候真正写入吧

AOF的优缺点:

- 优点     - 持久化效率高          - 不会丢失数据
- 缺点  - 恢复数据时效率低          - aof中记录的所有命令进行重放,效率低

随着运行时间变长,AOF这个备份文件会越来越大,非常占空间,所以就引出了重写的机制。

rewrite压缩:

对文件中记录的指令,能合并的指令合并成一条执行。

- 文件大小达到min-size时触发,每增长100%时再次触发

  auto-aof-rewrite-percentage 100
  auto-aof-rewrite-min-size 64mb
 

3. 官方建议使用 RDB+AOF 混合模式

存储:

- RDB完整存储内存数据
- RDB之后的增量数据,使用AOF来记录

恢复:

- 从RDB恢复绝大多数数据
- 重放AOF,恢复少量增量数据 


 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值