在回答这个问题之前,我们先来看两个面试中经常会被问到的Redis问题
再深入一点,多路复用IO是怎么实现的?
在Redis源码中,很多地方都调用Linux的epoll
方法来实现多路复用。
然而Windows系统是没有epoll
方法的,对应的则是IOCP
模型。具体这两者的区别可以看看这个epoll和IOCP之比较
RDB持久化的手动备份命令是bgsave
,AOF文件过大的重写命令是bgrewriteaof
。
原理都是开辟一个子进程对内存进行处理(注意了是子进程,不是子线程),这就涉及到操作系统的多进程COW(Copy On Write)机制了。
或者换句话说Redis通过Linux系统的fork
函数创建子进程,共享内存里面的代码段和数据段,从而实现了持久化。
然而Windows系统是没有fork
函数的。
总的来说,Redis在Windows和Linux上的区别主要还是操作系统的差异引起的(说起来像是一句废话)。Redis诞生之初就是基于Linux运行的,移植到Windows上时必定会有一些调整。