面试题答案
一键面试appendfsync
- 作用:该参数用于控制AOF文件写入磁盘的时机。
- 取值及影响:
- always:每次执行写命令时,都会将命令追加到AOF文件并同步到磁盘。这种方式数据安全性最高,因为一旦发生故障,只会丢失未同步的那一小部分数据。但由于每次都进行磁盘I/O操作,会对性能产生较大影响,因为磁盘I/O速度相对内存操作较慢。
- everysec:默认值,每秒将缓冲区中的命令追加到AOF文件并同步到磁盘。这种方式在数据安全性和性能之间取得了较好的平衡。每秒同步一次,即使发生故障,最多丢失1秒的数据。虽然每秒都有一次磁盘I/O,但相较于always模式,性能损耗相对较小。
- no:命令会先写入AOF缓冲区,但并不主动进行同步操作,而是交由操作系统来决定何时将缓冲区数据刷入磁盘。这种方式性能最好,因为减少了Redis自身的磁盘I/O操作。然而,数据安全性最低,如果操作系统发生故障或崩溃,可能会丢失大量未被刷入磁盘的数据。
no-appendfsync-on-rewrite
- 作用:该参数用于控制在AOF重写期间,是否暂停执行
appendfsync
操作。 - 取值及影响:
- yes:在AOF重写期间,会暂停
appendfsync
操作。这意味着新的写命令会先缓存起来,等重写完成后再批量写入AOF文件。这样做的好处是可以避免在重写过程中,因频繁的appendfsync
操作导致磁盘I/O竞争,从而影响重写性能。但在重写期间,如果发生故障,可能会丢失缓存中的数据。 - no:在AOF重写期间,依然会按照
appendfsync
的配置规则执行同步操作。这样可以保证即使在重写期间发生故障,数据丢失量也能控制在appendfsync
配置允许的范围内,但可能会因为磁盘I/O竞争影响AOF重写的速度。
- yes:在AOF重写期间,会暂停