Redis持久化

redis持久化:redis为什么要持久化,数据在内存中如果遇到突然断电等突发情况,如果将数据往数据库存,会带来很大的压力,所有我们让redis将数据存在磁盘上减轻数据库负担。

有两种持久化方式:

1.RDB(Redis数据库):RDB持久性以指定的时间间隔执行数据集的时间点快照。(简单意思是就是每隔一段时间将内存的数据写到磁盘,保证数据不丢失,快照文件:dump.rdb)

时间间隔60秒后一万次修改,5分组后100次修改,1小时后1次修改就进行快照。

那么我们如果想手动保存怎么办呢?

save 和bgsave

但是使用save会阻塞redis服务,实际中千万不要用!!!

使用bgsave会产生子进程进行快照备份。

当我插入数据后,查看磁盘大小

未发生变化

当我手动存入数据时

dump.rdb文件大小变化。

但是在执行flushall/flushdb命令会产生dump.rdb文件,但里面是空的,所有也没有意义,所以也不能把备份文件和生产redis服务器放同一台机器,以免备份文件挂了

缺点:1.如果意外down掉,从现在到最近一次快照期间的数据会丢失,2.内存数据全量同步会降低效率,有大致2倍的膨胀性,需要考虑

禁用:如果想禁用rdb,可以有两种方法

1.命令:redis-cli config set save ""

2.配置文件: 将配置文件中的save ""注释取消并保存

配置文件rdb部分参数

表示如果当前快照出错是否停止写的操作,为了数据一致性默认是yes

表示磁盘存储的rdb快照是否压缩,默认是yes

redis对快照的数据是否进行效验


2.AOF(日志记录):aof会将所有写指令以日志形式记录下来,只许追加不许修改文件,重启会将日志文件内容写指令重新执行。

默认未开,需将配置文件修改:appendonly yes

工作流程

命令到达后----->先存入内存的AOF缓冲区保存,当命令达到一定量-------->写入磁盘,避免频繁IO操作-------->随着AOF的增加,会将命令等进行合并,起到压缩目的

aof从缓存区到磁盘三种方法

everysec 每秒写(默认)

always 每个命令完成即写(IO频繁)

no 操作系统决定

总结

redis7后AOF文件(分为3)

base:基础AOF,通过重写产生,只有一个。

incr:增量AOF,存增改命令的文件,可多个。

HISTORY:每次保存后,就会不需要当前缓存文件,所以变为历史文件。

在高并发使用AOF时,如果AOF正在记录而出现断电意外情况,就会导致incr文件乱码,可以通过redis-check-aof --fix进行修复(及将最后未写完的命令直接删除)

优点:使用AOF更加持久,数据恢复更可靠

缺点:文件相比rdb更大,恢复速度慢

启动AOF内容 压缩,只保留可恢复数据最小指令集。

比如

set k1 v1

set k1 v2

set k1 v3

在aof日志文件会只保留最后一个命令,降低文件占用空间

bgrewriteaof 手动触发aof重写机制

AOF重写机制:读取服务器现有键值对,直接通过新建命令保存该数据到新的AOF中,替换原来AOF文件。


aof和rdb持久化如果都开启,那么数据恢复是用哪个文件呢?

aof的优先级更高,及有aof文件就使用aof,没有就使用rdb文件数据恢复。

纯缓存模式,同时关闭aof和rdb,但可以手动保存,这个模式优点提高了效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值