redis的持久化

1、什么是redis的持久化
用来将redis存储的数据写入磁盘,方式数据丢失。通俗的讲假如没有执行持久化,那么redis关闭之后我们所写的数据将会全部丢失。持久化之后,当我们每次启动redis时,他会自动读取本地磁盘的持久化文件,将数据取出放入 。
持久化的两种方式

(1)RDB

1、RDB的原理
1>在某个时刻redist通过fork产生子进程,和一个父进程的快照,其中有和父进程相同的数据。
2>子进程负责将快照写入零时文件。
3>子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。

配置

** 00件名**

stop-writes-on-bgsave-error yes #快照失败后是否继续写操作

rdbcompression yes #是否压缩快照文件

细节

1> 如果发生系统崩溃,则会丢失最近一次rdb之后的数据,所以如果项目不能接受这样的数据损失,还需要其他安全手段

2> 不适于实时性持久化,但其数据体量小,执行速度快,适合做数据版本控制

3> 如果数据量巨大,则创建子进程的时间长,导致redis卡顿,要谨慎设置save参数时间间隔大一些;

或如果软件允许,可以每天在闲时手动同步(凌晨后…)

4> 将生成的快照文件,留在原地,则可以在重启redis后,保持数据状态

将生产的快照文件,复制到其他redis服务中,可以方便的将数据移植过去

触发方式

1> 某一个save参数被满足

2> 执行 bgsave

3> 执行 save

4> redis服务关闭时

(2) AOF

原理

1> Redis将每一个写操作(执行成功),写入一个aof文件,

2> Redis重启时只要从头到尾执行一次aof文件,即可恢复据;

也可以将aof文件复制到别的服务器,做数据移植

注意:在重启时,要恢复数据,如果rdb文件和aof文件同时存在,以AOF为准

配置

appendonly yes # 启动AOF机制

appendfsync always # 每次收到写命令就立即强制 写入磁盘,保证完全的持久化,但产生极大的IO开销(不推荐使用)

appendfsync everysec # 每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中(推荐使用)

appendfsync no # 由操作系统决定何时同步,如果系统宕机则导致redis丢失不定数量数据

appendfilename “appendonly.aof” #设置aof文件名

细节

1> AOF文件会不断增长(可能比快照文件大几倍),在极端情况下,可能会对硬盘空间造成压力

2> Redis重启时,需要重新执行一个可能非常大的AOF,时间会很长

3> AOF同步时间间隔小,数据更安全,理论上至多丢失1秒的数据,比rdb更擅长做更实时的持久化

AOF重写

在这里插入图片描述

原理

为了减小aof文件的体量,可以手动发送 bgrewriteaof 命令,则会创建子进程,生成更小体量的aof,然后替换掉旧的、大体量的aof文件。

配置

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

在体量超过64mb,且比上次重写后的体量增加了100%时自动触发重写

细节

1> 如果当前数据量巨大,则子进程创建过程会很耗时

2> 在替换aof文件时,如果旧aof很大,则删除它也是一个耗时的过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值