面试题答案
一键面试高并发写入场景下对Redis性能的影响
- RDB:
- 优点:RDB是快照形式,在高并发写入时,由于是定期或手动触发生成快照,对写入性能基本无影响。因为它不会每次写入操作都进行持久化相关的I/O操作。
- 缺点:在生成RDB快照文件时,尤其是大数据量时,可能会fork出子进程来进行数据持久化,这个fork操作可能会阻塞主线程一小段时间,影响高并发写入场景下的响应及时性。
- AOF:
- 优点:AOF是追加日志形式,通常情况下,对写入性能影响较小,因为它是追加写,而不是像RDB那样需要一次性生成整个快照。
- 缺点:在高并发写入时,如果采用
always
同步策略(即每次写入操作都同步到磁盘),会有频繁的I/O操作,严重影响性能;如果采用everysec
策略(每秒同步一次),虽然性能有所提升,但在这一秒内如果发生故障,还是会丢失一秒内的数据;采用no
策略(由操作系统决定何时同步),性能最高,但数据丢失风险也最大。
故障恢复时的优缺点
- RDB恢复速度:
- 优点:恢复速度快。因为RDB是一个紧凑的二进制快照文件,恢复时直接将文件读入内存即可,数据量较小且结构简单,加载速度相对较快。
- 缺点:由于RDB是定期或手动触发快照,所以如果距离上一次快照时间较久,在故障恢复时会丢失这段时间内的数据。
- RDB数据完整性:
- 优点:因为RDB是基于某个时间点的完整数据快照,恢复的数据在结构上是完整的,不会出现数据冗余或错误记录(前提是快照生成时无错误)。
- 缺点:无法保证数据的最新性,会丢失上次快照之后的所有写入操作数据,数据完整性依赖于快照周期设置。
- AOF恢复速度:
- 优点:恢复数据时,AOF日志记录了所有的写操作,只要日志文件没有损坏,就能通过重放日志恢复到故障前尽可能近的状态,数据丢失较少。
- 缺点:恢复速度相对RDB较慢。因为需要重放AOF日志中的所有写操作,日志量较大时,重放操作耗时较长。
- AOF数据完整性:
- 优点:如果采用
always
或everysec
同步策略,相比RDB能保证更高的数据完整性,丢失的数据较少。 - 缺点:如果采用
no
同步策略,可能丢失大量数据;另外,由于AOF是追加写日志,可能会存在冗余的操作记录,虽然可以通过重写机制优化,但在重写之前,日志文件可能会较大,影响恢复速度和占用磁盘空间。
- 优点:如果采用