认识
1)不是执行写命令后就会写日志到aof文件,而是先写到aof_buf缓冲区,而aof_buf也并非aof文件内核缓冲区。追加是写到aof_buf缓冲区,写入是写入到aof文件内核缓冲区,同步是将aof文件缓冲区的内容同步回磁盘;
2)appendfsync配置为always也还是回丢数据,但是也只是丢失一个事件循环的写命令;
3)从2可知,就算appendfsync配置为always,基于redis实现的分布式锁也还是会不安全;
4)写入到aof文件的内容是resp协议的字符串;
5)appendfsync配置为everysec,如果发现当前事件距离上一次同步操作1s,会同步aof文件,该操作不是由主线程来执行,这可能也是一种优化吧,毕竟如果1s内写入的命令过多,同步也是需要时间的。避免阻塞客户端的执行,所以redis选择了异步线程去同步aof文件,这里有异步线程同步aof文件并不会和主线程的命令写入aof_buf缓冲区产生冲突;
砸出一个问题
如果1s内redis来了10万条命令,并且都执行完了,那么aof_buf缓冲区就会很大,这个问题redis怎么解决?