Redis持久化——RDB和AOF

Redis数据库是内存数据库,一旦出现服务宕机,那么内存中的数据就容易丢失。所以需要进行redis的持久化动作。
Redis持久化是指将Redis内存数据持存储到磁盘中,若出现了Redis服务宕机后,能够从硬盘中再恢复到Redis内存中。
Redis的持久化方式包含RDB和AOF 两种方式。

1 RDB 持久化

RDB (Redis Database BackUp ),Redis数据内存文件,又称作Redis 数据快照。该文件 d u m p . r d b \textcolor{red}{dump.rdb} dump.rdb一般放在redis安装的根路径下。

R D B 持久化命令 \textcolor{red}{RDB持久化命令} RDB持久化命令
s a v e \textcolor{blue}{save} save : 当前命令会在redis停机前由 主线程 \textcolor{red}{主线程} 主线程执行。将redis中的数据持久化到硬盘中。由于是主线程执行,当需要持久化的数据特别多时,主线程会阻塞。此时无法从redis中读取数据

b g s a v e \textcolor{blue}{bgsave} bgsave :该命令会开启一个子线程去持久化redis数据。

关于RDB持久化的形式是由配置文件 r e d i s . c o n f 来决定的 \textcolor{red}{redis.conf}来决定的 redis.conf来决定的

#当seconds内redis有changes个变化时,将会自动执行bgsave命令去持久化数据到硬盘中中
save    
#900m内1个变化时,持久化数据
save 900 1   
#300s内10个key变化,进行持久化
save 300 10  
#60s内有10000个key变化,进行持久化
save 60 10000 /

#禁用RDB持久化
save ""


##持久化文件的名字为dump.rdb
dbfilename dump.rdb //

#持久化时的文件存储目录
dir ./  

Redis持久化——RDB和AOF_第1张图片

(1)bgsave是基于异步去同步数据的,由主进程创建一个子进程

(2) 本来进程之间的数据是无法共享的,bgsave会通过fork操作,将主进程的页表赋值到子进程中。 页表保存了物理内存和虚拟内存的映射关系,因此主进程和子进程在某种程度上就属进程中的物理数据共享。通过操作虚拟内存间接的操作了物理内存中的数据 \textcolor{red}{页表保存了物理内存和虚拟内存的映射关系,因此主进程和子进程在某种程度上就属进程中的物理数据共享。通过操作虚拟内存间接的操作了物理内存中的数据} 页表保存了物理内存和虚拟内存的映射关系,因此主进程和子进程在某种程度上就属进程中的物理数据共享。通过操作虚拟内存间接的操作了物理内存中的数据
(3)子进程操作内存数据持久化到RDB文件中。然后用新的RDB文件替换旧的RDB文件

在使用RDB持久化redis内存数据的时候,会有以下几个缺点。
(1)save 由于指令会在指定秒内发生指定数目的key变化时,才会触发RDB 持久化动作,若是还未持久化就发生了Redis宕机,那么此段时间内写入的数据都会丢失
(2)Redis在Fork子进程、进程写RDB文件和文件压缩都是较耗时的

1 AOF 持久化

AOF(Appending Only File),将redis的每一个写命令记录下来,相当于一个命令日志文件。当redis宕机后,为了恢复数据,可以读取该文件。

在redis中,AOF持久化的方式默认是关闭的,开启时需要修改redis.conf文件

# 默认是关闭的 no
appendonly yes
#aof文件名称 
appendfilename "appendonly.aof"

AOF的命令记录的频率也可以通过redis.conf文件来配置

## 每执行一次写命令,立即记录到AOF文件
appendfsync always
## 写命令执行完先放到AOF缓冲区,然后每个1s将缓冲区数据写到AOF文件中,是默认方案
appendfsync everysec
## 写命令执行完先放到缓冲区,由操作系统决定何时将缓冲区数据写入到硬盘中。
appendfsync no
配置项 刷盘时机 优点 缺点
always 同步刷机 可靠性高,几乎不丢失数据 性能影响大
everysec 每秒刷机 性能适中 会丢失1s数据
no 操作系统控制 性能最好 可靠性最差,可能会丢失大量数据

AOF触发阈值

##相较于上个AOF文件,增长了100%时,触发AOF持久化
auto-aof-rewrite-percentage 100
##相较于上个AOF文件,增长了64M时,触发AOF持久化
auto-aof-rewrite-min-size 64mb

你可能感兴趣的:(redis,redis,数据库)