1. 程式人生 > 其它 >Redis6.x 在Windows上面編譯安裝的過程

Redis6.x 在Windows上面編譯安裝的過程

背景說明


  • 在github上面僅能夠找到 redis3.2.100的Windows安裝檔案
  • 比較新的版本比較難以找到, 同事經常出現這個版本的redis卡死的情況, 所以想嘗試進行一下升級.

第一部分下載檔案


下載 cygwin的安裝檔案

https://cygwin.com/setup-x86_64.exe
  • 注意:公司裡的網速可能會導致不好下載.

下載redis的安裝檔案

https://download.redis.io/releases/redis-6.0.10.tar.gz
  • 注意:我用2021.6.25 的最新版本 redis6.2.4 版本進行安裝時出現錯誤提示無法進行安裝. 所以退而求其次使用這個版本安裝成功了.

第二部分 cygwin的安裝與設定


雙擊安裝即可.

注意選擇使用Install from internet

  • 需要注意使用 Root directory 需要記住

  • 後續編譯的檔案也是以這個檔案為根目錄進行處理的.

  • 下一步的LocalPackagesDirectory 只的是網際網路下載的臨時路徑.

注意選擇網際網路安裝可以add 一個 阿里雲的 預設映象,不然可能無法安裝

http://mirrors.aliyun.com/cygwin/
  • 注意這裡需要通過Search 將部分元件新增進來以便進行編譯
    需要新增的主要有:
make,gcc-core,gcc-g++ libgcc1 libgccpp1
  • 注意 每一個單獨的包都需要單獨進行下載然後進行安裝不能偷懶.

  • 注意不要全部下載 不然會打爆磁碟

  • 選擇完成之後點選下一步進行安裝即可

  • 注意 這一步可能會很漫長,需要慢慢等待,有下載和安裝的步驟

  • 安裝完成之後就可以進行後續的編譯操作了

  • 安裝完只有大概下載120m的檔案,安裝完大約 600m磁碟大小


第三步 編譯安裝redis


  • 啟動cygwin 注意 可以選擇第一步裡面選擇的root 路徑直接雙擊bat檔案即可.

  • 雙擊bat 就會在 此路徑下的 home 建立當前使用者的一個目錄名

  • 可以講redis的tar包放進來, 這裡我使用最新版,驗證錯誤內容.

  • 進行解壓縮和安裝處理

tar -zxvf redis-6.2.4.tar.gz
cd redis-6.2.4
make

就會進入編譯過程截圖如下:

注意: 這個版本會報錯

debug.c: 在函式‘dumpX86Calls’中:
debug.c:1751:5: 錯誤:未知的型別名‘Dl_info’
 1751 |     Dl_info info;
      |     ^~~~~~~
debug.c:1761:13: 警告:implicit declaration of function ‘dladdr’; did you mean ‘s_addr’? [-Wimplicit-function-declaration]
 1761 |         if (dladdr((void*)target, &info) != 0 && info.dli_sname != NULL) {
      |             ^~~~~~
      |             s_addr
debug.c:1761:54: 錯誤:在非結構或聯合中請求成員‘dli_sname’
 1761 |         if (dladdr((void*)target, &info) != 0 && info.dli_sname != NULL) {
      |                                                      ^
debug.c:1763:63: 錯誤:在非結構或聯合中請求成員‘dli_sname’
 1763 |                 printf("Function at 0x%lx is %s\n",target,info.dli_sname);
      |                                                               ^
debug.c: 在函式‘dumpCodeAroundEIP’中:
debug.c:1772:5: 錯誤:未知的型別名‘Dl_info’
 1772 |     Dl_info info;
      |     ^~~~~~~
In file included from debug.c:31:
debug.c:1781:17: 錯誤:在非結構或聯合中請求成員‘dli_sname’
 1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
      |                 ^
server.h:2735:27: 附註:in definition of macro ‘serverLog’
 2735 |         _serverLog(level, __VA_ARGS__);\
      |                           ^~~~~~~~~~~
debug.c:1781:33: 錯誤:在非結構或聯合中請求成員‘dli_saddr’
 1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
      |                                 ^
server.h:2735:27: 附註:in definition of macro ‘serverLog’
 2735 |         _serverLog(level, __VA_ARGS__);\
      |                           ^~~~~~~~~~~
debug.c:1781:49: 錯誤:在非結構或聯合中請求成員‘dli_fname’
 1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
      |                                                 ^
server.h:2735:27: 附註:in definition of macro ‘serverLog’
 2735 |         _serverLog(level, __VA_ARGS__);\
      |                           ^~~~~~~~~~~
debug.c:1781:65: 錯誤:在非結構或聯合中請求成員‘dli_fbase’
 1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
      |                                                                 ^
server.h:2735:27: 附註:in definition of macro ‘serverLog’
 2735 |         _serverLog(level, __VA_ARGS__);\
      |                           ^~~~~~~~~~~
debug.c:1782:17: 錯誤:在非結構或聯合中請求成員‘dli_saddr’
 1782 |             info.dli_saddr);
      |                 ^
server.h:2735:27: 附註:in definition of macro ‘serverLog’
 2735 |         _serverLog(level, __VA_ARGS__);\
      |                           ^~~~~~~~~~~
debug.c:1783:44: 錯誤:在非結構或聯合中請求成員‘dli_saddr’
 1783 |         size_t len = (long)eip - (long)info.dli_saddr;
      |                                            ^
debug.c:1789:38: 錯誤:在非結構或聯合中請求成員‘dli_saddr’
 1789 |             void *base = (void *)info.dli_saddr;
      |                                      ^
make[1]: *** [Makefile:368:debug.o] 錯誤 1
make[1]: 離開目錄“/home/Administrator/redis-6.2.4/src”
make: *** [Makefile:6:all] 錯誤 2

網上沒找到方法

  • 換成 redis6.0.10 之後就可以了.
  • 可以看一下編譯時間

第四步 啟動驗證


  • 需要在 redis-6.0.10/src 裡面講 所有的二進位制檔案抽取出來

  • 需要在cygwin 的bin 目錄下面的 cygwin1.dll 這個檔案一起放到一個特定的路徑裡面

  • 需要在redis的目錄裡面講redis.conf 同時copy過來便於使用.

  • 注意 需要修改redis.conf 內的密碼

為了簡單起見可以講 deamonize 開啟

修改配置節
daemonize yes

可以建立一個配置檔案用來一鍵啟動redis

在上一層目錄建立檔案
redis.bat
內容為:

taskkill /im redis-server.exe /F
cd redis
redis-server.exe redis.conf

進行啟動驗證

可以找人進行其他驗證了.