在回答這個問題之前,我們先來看兩個面試中經常會被問到的Redis問題
Redis為什么這么快?
- 完全基於內存操作
- C語言實現,優化過的數據結構,性能高
- 單線程,無切換上下文的成本
- 異步非阻塞IO(多路復用IO)
再深入一點,多路復用IO是怎么實現的?
在Redis源碼中,很多地方都調用Linux的epoll
方法來實現多路復用。
然而Windows系統是沒有epoll
方法的,對應的則是IOCP
模型。具體這兩者的區別可以看看這個epoll和IOCP之比較
Redis是如何進行持久化的?
- RDB 快照,內存數據的二進制序列化文件
- AOF 日志,修改內存數據的指令記錄文本
RDB持久化的手動備份命令是bgsave
,AOF文件過大的重寫命令是bgrewriteaof
。
原理都是開辟一個子進程對內存進行處理(注意了是子進程,不是子線程),這就涉及到操作系統的多進程COW(Copy On Write)機制了。
或者換句話說Redis通過Linux系統的fork
函數創建子進程,共享內存里面的代碼段和數據段,從而實現了持久化。
然而Windows系統是沒有fork
函數的。
總結
總的來說,Redis在Windows和Linux上的區別主要還是操作系統的差異引起的(說起來像是一句廢話)。Redis誕生之初就是基於Linux運行的,移植到Windows上時必定會有一些調整。