写日志的方式:
-
WAL:写前日志(Write Ahead Log, WAL)在实际写数据前,先把修改的数据记到日志文件中,以便故障时进行恢复(mysql 先把数据写到redo log,再落盘)。
-
AOF:写后日志, Redis 是先执行命令,把数据写入内存,然后才记录日志。(所以AOF不是crash-safe的)
AOF:
- AOF 里记录的是 Redis 收到的
每一条写操作
。以文本形式保存的。 - 优点:
- AOF是
顺序写
,不需要检查和索引操作,避免了额外检查的开销 - 不会阻塞
当前
的写入操作
- AOF是
- 缺点:
- 未写入AOF的那部分数据可能会丢失
- 因为些操作和写AOF都是在主进程中,所以写AOF时,可能会阻塞后一个
写操作
- 刷盘时机:
-
配置
appendfsync
:- Always:每次执行命令后,通过系统调用fsync刷盘
- Everysec:创建异步,每隔1秒,调用一次fsync刷盘
- No:由操作系统控制,不主动调用fsync
-
图片
-
AOF 缓冲区
:- 将命令刷盘前,先放入 AOF 缓冲区,然后通过fsync刷盘。服务于AOF 文件刷盘,提高刷盘效率。
2025年6月17日...大约 3 分钟