Redis主从间是异步复制,这里提到强一致是如何做到的?应用层的工作吗?
收起不得不说,redis的数据同步,强一致性是有前置条件的
强一致性的根据有两个前提,1:持久化文件的生成的一致性;2:持久化文件的写入的一致性
针对1,目前有两种持久化方式,RDB和AOF,针对两者而言,其实都是异步的,两个都有优缺点,但针对落地数据而言,都是异步的,所以能做到准实时,不能做到真正意义上的实时。很多人有疑问了,appendfsync always这个参数明明是同步的,是能牺牲性能保证数据的一致性的。仔细看官网的介绍,AOF持久化中的文件写入操作其实是将aof_buf缓冲区的内容存放到了内存缓冲区中,这时还没有真正写入到磁盘中,这个缓冲区达到同步条件时,才会执行fsync将这个缓冲区的内容写入到硬盘中,完成文件同步。所以持久化和REDIS事务的原子性是解耦的。
针对2,取决于持久化文件的大小,曾遇到一种情况,当持久化文件非常大的时候,同步也是需要时间的。
综上所述,不能做到绝对的强一致性,只能做到可接受的范围的强一致性。