- 一般redis在生产都是当做缓冲服务器,把后端数据库的数据存储在内存中,然后直接从内存中读取数据。这样有个致命的问题就是:一旦服务器宕机,数据全部丢失。 目前,Redis 的持久化主要有两大机制,即 AOF 日志和 RDB 快照。
- AOF(Append Only File),表示文件只能追加写,熟悉mysql的可能会联想到WAL(writ ahend log)就是先写日志再写实际数据,redis恰恰相反是先写实际数据在写日志.传统数据库的日志,例如 redo log(重做日志),记录的是修改后的数据,而 AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。
![]()
- AOF 还有一个好处:它是在命令执行后才记录日志,所以不会阻塞当前的写操作,1.不过这样带来了存在的风险如果刚执行完一个命令,还没有来得及记日志就宕机了,那么这个命令和相应的数据就有丢失的风险。2.AOF 虽然避免了对当前命令的阻塞,但可能会给下一个操作带来阻塞风险。这是因为,AOF 日志也是在主线程中执行的,如果在把日志文件写入磁盘时,磁盘写压力大,就会导致写盘很慢,进而导致后续的操作也无法执行了。
AOF 机制给我们提供了三个选择,也就是 AOF 配置项appendfsync 的三个可选值。
- Always,同步写回:每个写命令执完,立马同步地将日志写回磁盘;
- Everysec,每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;
- No,操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
![]()
posted @
2025-06-09 16:26
白日梦不要钱
阅读(
45)
评论()
收藏
举报