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