Redis在Windows上和Linux上的區別
阿新 • • 發佈:2021-06-26
在回答這個問題之前,我們先來看兩個面試中經常會被問到的Redis問題
Redis為什麼這麼快?
- 完全基於記憶體操作
- C語言實現,優化過的資料結構,效能高
- 單執行緒,無切換上下文的成本
- 非同步非阻塞IO(多路複用IO)
再深入一點,多路複用IO是怎麼實現的?
在Redis原始碼中,很多地方都呼叫Linux的epoll
方法來實現多路複用。
然而Windows系統是沒有epoll
方法的,對應的則是IOCP
模型。具體這兩者的區別可以看看這個epoll和IOCP之比較
Redis是如何進行持久化的?
- RDB 快照,記憶體資料的二進位制序列化檔案
- AOF 日誌,修改記憶體資料的指令記錄文字
RDB持久化的手動備份命令是bgsave
bgrewriteaof
。
原理都是開闢一個子程序對記憶體進行處理(注意了是子程序,不是子執行緒),這就涉及到作業系統的多程序COW(Copy On Write)機制了。
或者換句話說Redis通過Linux系統的fork
函式建立子程序,共享記憶體裡面的程式碼段和資料段,從而實現了持久化。
然而Windows系統是沒有fork
函式的。
總結
總的來說,Redis在Windows和Linux上的區別主要還是作業系統的差異引起的(說起來像是一句廢話)。Redis誕生之初就是基於Linux執行的,移植到Windows上時必定會有一些調整。