編譯實戰 | 手把手教你在Windows環境下運行Redis6.x
哈嘍大家好啊,我是沒事就愿意瞎搗鼓的Hydra。
不知道有沒有小伙伴像我一樣,平常開發中用的是windows操作系統,有時候想裝點什么軟件,一看只支持linux系統,無奈要么啟動虛擬機、要么裝在云服務器上。
這不前幾天又是這樣,剛想用一下Redis 6.x版本來嘗試一下新特性,打開官網一看,好家伙我直呼內行,果然不支持windows系統:
不過雖然redis的官網上不提供windows版本下載,但是這也難不倒我這個面向百度編程的小能手,一番查找后讓我找到了微軟在github上維護的幾個可以在windows上運行的redis版本:
項目的git地址是 https://github.com/MicrosoftArchive/redis/releases,我翻了一下,微軟維護了2.x和3.x的多個windows版本redis,不過比較遺憾,在維護到3.0.504正式版本后就放棄了更新。
不過問題不大,眼看微軟撂挑子不干了,波蘭的熱心市民 Tomasz Poradowski 先生這時候站出來,繼續開始提供可以在windows上運行的4.x和5.x版本的redis,并且從2017年到2022年一干就是5年。
項目git地址是https://github.com/tporadowski/redis/releases,沒錯,其實我本地環境運行的redis-5.0.9就是以前從這里下載的,而且綠色版使用起來真的是干凈又衛生,所以我強烈建議大家給這位老哥來一個Star支持一下。
不過繞了這么一大圈,我的問題還是沒有解決啊,既然沒有現成的可以在windows上運行的redis6.x版本,那我們干脆就來自己編譯一個吧。
初識Cygwin
首先介紹一下我們今天要用到的工具Cygwin,先簡單看一下它的官網 https://cygwin.com/,上面很清晰的解釋了幾個容易引起大家混淆的問題:
先解釋了cygwin是什么:
- cygwin是GNU和開源工具的大型集合,它提供了類似于在windows上運行linux發行版的模擬環境功能。
- cygwin是一個動態鏈接庫cygwin1.dll,它提供了大量POSIX的API功能。
再糾正了大家的常見誤區:
- cygwin并不能讓原生的linux應用程序運行在windows上,如果想讓它運行在windows上,那么你必須通過源代碼重新構建你的應用。
- cygwin并不能神奇地讓原生的windows應用程序感知到unix的功能,例如信號、偽終端等。
其實可以用一句話來概括一下它的功能,cygwin是一個可運行于原生windows系統上的POSIX兼容環境,可以通過重新編譯將linux應用移植到windows中。
好了,這樣簡單了解一下cygwin的功能對我們來說暫時就足夠了,下面我們看看如何使用它來編譯windows版本redis。
Cygwin安裝
下面我們先進行編譯工具Cygwin的下載和安裝,在它的官網上就可以直接下載,完成后就可以開始安裝了。下面我會貼出一些需要特殊配置的步驟,如果沒有特殊說明的話,那么直接痛快的點擊下一步就可以了。
網絡連接配置這里選擇第二項,也就是直接連接,不需要任何代理方式:
在選擇下載源這一步,先手動輸入User URL,添加阿里云的鏡像http://mirrors.aliyun.com/cygwin,點擊add后再選擇我們剛才添加的這個源,然后點擊下一步:
接下來選擇需要下載安裝的組件包,我們只需要下載我們編譯相關的模塊即可。先通過上面的搜索框進行定位,選擇安裝Devel模塊下面的make、gcc-core,gcc-g++,以及Libs模塊下的libgcc1 、libgccpp1,然后點擊New這一列的Skip,選擇要安裝的版本號,全部添加完成后點擊下一步:
接下來會自動進行下載上面選擇的模塊,等待全部下載結束后安裝就完成了:
安裝完成后,我們運行Cygwin64 Terminal,通過命令檢測可以看到Status為OK,表示cygwin運行正常:
編譯redis源碼
準備好編譯工具后,我們接下來先下載redis6.x版本的源碼,6.0.16的下載地址為:
??https://download.redis.io/releases/redis-6.0.16.tar.gz。??
cygwin安裝完成后,會在它的安裝路徑的home目錄下,創建一個以你登錄系統的用戶名來命名的目錄,我們把下載完成后的壓縮包放到這個cygwin64\home\${user}目錄下,在cygwin命令行中先執行解壓命令:
tar -xvf redis-6.0.16.tar.gz
使用下面的命令先切換到解壓后的根目錄,然后執行編譯和安裝:
cd redis-6.0.16
make && make install
點擊回車,然后就開始漫長的等待吧,不得不說編譯和安裝的過程真的很慢,我這大概花了20分鐘才全部完成。
不出意外的最后果然出現了意外,報了兩個Error,不過貌似沒有什么太大影響,切換到src目錄下,就已經可以看到編譯完成后已經生成了6個exe可執行文件了:
但是如果這個時候雙擊redis-server.exe嘗試進行啟動的話,那么就會報錯提示缺少dll動態鏈接庫:
我們可以在cygwin的bin目錄下找到這個文件,為了方便,把可執行文件、動態鏈接庫文件、redis配置文件拷貝到一個單獨的目錄下再次嘗試啟動:
這次能夠正常啟動成功,我們再使用客戶端連接工具連接并進行測試,終于,6.0.16版本的redis可以在windows環境下正常運行了。
最后
忙活一大頓總算成功了,我們也終于可以在windows上體驗redis6.x版本了,不過這里還是給小伙伴們提個醒,這樣編譯的redis我們平常自己在學習中體驗一下就可以了,盡量不要用在生產上。
因為cygwin編譯后的程序,相當于在windows系統上模擬實現了POSIX兼容層,應用程序在底層多了一層函數調用,因此效率比運行在linux系統的原生應用低了很多。因此,這樣在windows上運行的redis,無疑會損失掉它引以為傲的高性能這一優勢。