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 <seconds> <changes>
#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 ./
(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