Skip to content

Commit b558dfd

Browse files
committed
Redis持久化
1 parent f6d043e commit b558dfd

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

Interview/sad/Redis持久化.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
面试官:Redis的持久化了解嘛?
2+
3+
我:了解,Redis的持久化分为两种:**RDB和AOF**
4+
5+
**RDB**
6+
7+
**RDB**是一种**快照存储持久化**方式,具体就是将`Redis`某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为`dump.rdb`。在`Redis`服务器启动时,会重新加载`dump.rdb`文件的数据到内存当中恢复数据。
8+
9+
优点:
10+
1. RDB会生成多个数据文件,**每个数据文件都代表了某一个时刻中redis的数据**,这种多个数据文件的方式,非常适合**做冷备**
11+
2. RDB对redis对外提供读写服务的时候,影像非常小,因为redis 主进程只需要fork一个子进程出来,让子进程对磁盘io来进行rdb持久化
12+
3. **RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快**
13+
14+
缺点:
15+
1. **如果redis要故障时要尽可能少的丢失数据,RDB没有AOF好**,例如1:00进行的快照,在1:10又要进行快照的时候宕机了,这个时候就会丢失10分钟的数据。
16+
2. RDB每次fork出子进程来执行RDB快照生成文件时,如果文件特别大,可能会导致客户端提供服务暂停数毫秒或者几秒
17+
18+
![rdb](http://media.dreamcat.ink/uPic/iShot2020-08-12下午04.56.18.png)
19+
20+
**AOF**
21+
22+
**AOF**:把所有的**对Redis的服务器进行修改的命令都存到一个文件里,命令的集合**。 使用AOF做持久化,每一个写命令都通过write函数追加到appendonly.aof中。aof的默认策略是每秒钟fsync一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据。 缺点是对于相同的数据集来说,AOF的文件体积通常要大于RDB文件的体积。根据所使用的fsync策略,AOF的速度可能会慢于RDB。 Redis默认是快照RDB的持久化方式。对于主从同步来说,主从刚刚连接的时候,进行全量同步(RDB);全同步结束后,进行增量同步(AOF)。
23+
24+
优点:
25+
1. **AOF可以更好的保护数据不丢失,一般AOF会以每隔1秒**,通过后台的一个线程去执行一次fsync操作,如果redis进程挂掉,最多丢失1秒的数据。
26+
2. **AOF以appen-only的模式写入,所以没有任何磁盘寻址的开销,写入性能非常高**
27+
3. AOF日志文件的命令通过非常可读的方式进行记录,这个非常适合做灾难性的误删除紧急恢复,如果某人不小心用flushall命令清空了所有数据,只要这个时候还没有执行rewrite,那么就可以将日志文件中的flushall删除,进行恢复。
28+
29+
缺点:
30+
1. 对于同一份文件**AOF文件比RDB数据快照要大**
31+
2. AOF开启后支持写的QPS会比RDB支持的写的QPS低,因为AOF一般会配置成每秒fsync操作,每秒的fsync操作还是很高的
32+
3. **数据恢复比较慢,不适合做冷备**
33+
34+
![AOF](http://media.dreamcat.ink/uPic/iShot2020-08-12下午04.57.10.png)
35+
36+
**如何选择:**
37+
38+
如何选择:
39+
40+
综合AOF和RDB两种持久化方式,**用AOF来保证数据不丢失,作为恢复数据的第一选择****用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,可以使用RDB进行快速的数据恢复**
41+

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
- [类加载过程](/Interview/sad/类加载过程.md)
7070
- [类加载器](/Interview/sad/类加载器.md)
7171
- [JVM内存区域](/Interview/sad/JVM内存区域.md)
72-
- [逃逸分析](/Interview/sad/逃逸分析.md))
72+
- [逃逸分析](/Interview/sad/逃逸分析.md)
7373
- [对象的创建过程](/Interview/sad/对象的创建过程.md)
7474
- [垃圾回收](/Interview/sad/垃圾回收.md)
7575
- [InnoDB和MyISAM](/Interview/sad/InnoDB和MyISAM.md)
@@ -80,6 +80,7 @@
8080
- [MySQL的锁](/Interview/sad/MySQL的锁.md)
8181
- [Redis的模型](/Interview/sad/Redis的模型.md)
8282
- [Redis数据结构](/Interview/sad/Redis数据结构.md)
83+
- [Redis持久化](/Interview/sad/Redis持久化.md)
8384

8485
## 刷题系列
8586
- [推荐:CS-Notes](https://cyc2018.github.io/CS-Notes/#/?id=✏️-算法)

0 commit comments

Comments
 (0)