Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Redis AOF 持久化机制是在执行完命令之后再记录日志,这和关

在 Redis 的配置文件中存在三种不同的 AOF 持久化方式( `fsync`策略),它们分别是:

1. `appendfsync always`:主线程调用 `write` 执行写操作后,后台线程( `aof_fsync` 线程)立即会调用 `fsync` 函数同步 AOF 文件(刷盘),`fsync` 完成后线程返回,这样会严重降低 Redis 的性能(`write` + `fsync`)。
1. `appendfsync always`:主线程调用 `write` 执行写操作后,**主线程**立即会调用 `fsync` 函数同步 AOF 文件(刷盘),`fsync` 完成后线程返回。`always` 策略由**主线程直接执行 fsync**,而非后台线程。这种方式数据最安全,但每个写操作都会同步阻塞主线程,严重降低 Redis 的性能(`write` + `fsync`)。
2. `appendfsync everysec`:主线程调用 `write` 执行写操作后立即返回,由后台线程( `aof_fsync` 线程)每秒钟调用 `fsync` 函数(系统调用)同步一次 AOF 文件(`write`+`fsync`,`fsync`间隔为 1 秒)
3. `appendfsync no`:主线程调用 `write` 执行写操作后立即返回,让操作系统决定何时进行同步,Linux 下一般为 30 秒一次(`write`但不`fsync`,`fsync` 的时机由操作系统决定)。

Expand Down
2 changes: 1 addition & 1 deletion docs/database/redis/redis-persistence.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ AOF 工作流程图如下:

在 Redis 的配置文件中存在三种不同的 AOF 持久化方式( `fsync`策略),它们分别是:

1. `appendfsync always`:主线程调用 `write` 执行写操作后,会立刻调用 `fsync` 函数同步 AOF 文件(刷盘)。主线程会阻塞,直到 `fsync` 将数据完全刷到磁盘后才会返回。这种方式数据最安全,理论上不会有任何数据丢失。但因为每个写操作都会同步阻塞主线程,所以性能极差。
1. `appendfsync always`:主线程调用 `write` 执行写操作后,会立即调用 `fsync` 函数同步 AOF 文件(刷盘),期间主线程阻塞,直到 `fsync` 将数据完全刷到磁盘后才会返回。`always` 策略由**主线程直接执行 fsync**,而非后台线程。这种方式数据最安全,理论上不会有任何数据丢失。但因为每个写操作都会同步阻塞主线程,所以性能极差。
2. `appendfsync everysec`:主线程调用 `write` 执行写操作后立即返回,由后台线程( `aof_fsync` 线程)每秒钟调用 `fsync` 函数(系统调用)同步一次 AOF 文件(`write`+`fsync`,`fsync`间隔为 1 秒)。这种方式主线程的性能基本不受影响。在性能和数据安全之间做出了绝佳的平衡。不过,在 Redis 异常宕机时,通常可能丢失最近 1 秒内的数据。

> **生产级真相(2 秒丢失与阻塞风险)**:
Expand Down
2 changes: 1 addition & 1 deletion docs/database/redis/redis-questions-02.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而
与 RDB 持久化相比,AOF 持久化的实时性更好。在 Redis 的配置文件中存在三种不同的 AOF 持久化方式(`fsync` 策略),它们分别是:

```bash
appendfsync always #每次有数据修改发生时,都会调用fsync函数同步AOF文件,fsync完成后线程返回,这样会严重降低Redis的速度
appendfsync always #每次有数据修改发生时,主线程直接调用fsync同步AOF文件(刷盘),fsync完成后返回。always由主线程执行而非后台线程,严重降低Redis性能
appendfsync everysec #每秒钟调用fsync函数同步一次AOF文件
appendfsync no #让操作系统决定何时进行同步,一般为30秒一次
```
Expand Down