Skip to content

Commit f41207d

Browse files
authored
Merge pull request #2816 from Senrian/fix-appendfsync-always
docs: correct appendfsync always description - main thread fsync, not background thread
2 parents 192a543 + 646757a commit f41207d

File tree

3 files changed

+3
-3
lines changed

3 files changed

+3
-3
lines changed

docs/database/redis/redis-common-blocking-problems-summary.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Redis AOF 持久化机制是在执行完命令之后再记录日志,这和关
6868

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

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

docs/database/redis/redis-persistence.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ AOF 工作流程图如下:
194194

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

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

200200
> **生产级真相(2 秒丢失与阻塞风险)**

docs/database/redis/redis-questions-02.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而
163163
与 RDB 持久化相比,AOF 持久化的实时性更好。在 Redis 的配置文件中存在三种不同的 AOF 持久化方式(`fsync` 策略),它们分别是:
164164

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

0 commit comments

Comments
 (0)