Redis持久化

        Redis的数据都是存储在内存中,为了数据的永久保存,需要把数据同步到硬盘上,这个过程就叫做持久化. Redis的持久化存在有两种方式: rdb方式,aof方式,这两种方式可以单独使用,也可以综合使用.

1.rdb持久化方式: 是在指定的时间间隔写入硬盘

2.aof持久化方式:是以日志,记录每一个操作,服务器启动后,根据日志来构建数据.

一、redis持久化之RDB方式 

        RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照(snapshot)。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。

1.执行时机

RDB持久化在四种情况下会执行
①:执行save命令。②:执行bgsave命令。③:Redis停机时。④:触发RDB条件时

1)save命令

执行下面的命令,可以立即执行一次RDB:

save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
 

2)bgsave命令

下面的命令可以异步执行RDB:

这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。

3)停机时

Redis停机时会执行一次save命令,实现RDB持久化。

4)触发RDB条件

Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 900 1  
save 300 10  
save 60 10000 

1) save 900 1 表示每900秒内至少有一个key发生变化,就持久化

2) save 300 10 表示每300秒内至少有10个key发生变化,就持久化

3) save 60 10000 表示每60秒至少有10000个key发生变化,就持久化

 二、redis持久化之AOF方式 

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

AOF方式,以日志记录每一个操作。Redis可以通过日志去还原数据。

优势: 安全性相对RDB方式高很多,它记录了每一个操作

劣势:效率相对于RDB方式低很多。

Redis默认是关闭AOF方式的

打开redis.config

 

appendonly no 默认关闭aof方式,我们修改为yes就开启
appendfilename 就是aof方式的日志文件

上图的配置是aof的三种同步策略:

always 同步持久化,每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
everysec 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
no 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

 三、AOF重写机制

        因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

原理

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。 AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

触发条件

在 APPEND ONLY MODE模块下有两条默认配置:

在这里插入图片描述

这两条配置就是触发重写aof文件的条件,第一个表示文件大小达到前一次保存文件的一倍,第二个表示aof文件大小最少达到64MB,两个条件必须同时满足。

 四、RDB与AOF对比

        RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值