思维导图
AOF日志
如何实现:写后日志,Redis先执行命令,把数据写入内存,然后记录日志(记录的是修改数据集的命令)
为什么要先执行命令再记日志
避免额外的检查开销
AOF日志文件中保存的是Redis执行修改数据集的命令。在写入日志文件时并不会检查这些命令是否有语法错误,所以,如果先写入日志在执行命令的话,日志中可能记录的就是错误的命令,当Redis使用日志进行数据恢复时,就会出错。
Redis 使用写后日志这一方式的一大好处是,可以避免出现记录错误命令的情况。
不会阻塞当前写操作
潜在风险
执行完命令,写日志之前宕机,则这条命令和相应数据有丢失的风险
有阻塞的风险
AOF 虽然避免了对当前命令的阻塞,但可能会给下一个操作带来阻塞风险。这是因为,AOF 日志也是在主线程中执行的,如果在把日志文件写入磁盘时,磁盘写压力大,就会导致写盘很慢,进而导致后续的操作也无法执行了
解决风险
3种写回策略
Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘
- 同步写回”可以做到基本不丢数据,但是它在每一个写命令后都有一个慢速的落盘操作,不可避免地会影响主线程性能;
Everysec,每秒写回:每个写命令执行完,只是先把日志写到