(轉)Linux安裝部署Redis(超級詳細)
原文:https://www.cnblogs.com/hunanzp/p/12304622.html
前言
網上搜索了一筐如何在Linux下安裝部署Redis的文章,各種文章混搭在一起勉強安裝成功了。自己也記錄下,方便後續安裝時候有個借鑑之處。
- Redis版本 5.0.4
- 伺服器版本 Linux CentOS 7.6 64位
下載Redis
進入官網找到下載地址https://redis.io/download
右鍵Download按鈕,選擇複製連結。
進入到Xshell控制檯(預設當前是root根目錄),輸入wget 將上面複製的下載連結貼上上,如下命令:
1 |
wget http: //download.redis.io/releases/redis-5.0.7.tar.gz |
敲入回車鍵執行後如下圖:
等待下載完成。
解壓並安裝Redis
解壓
下載完成後需要將壓縮檔案解壓,輸入以下命令解壓到當前目錄
1 |
tar -zvxf redis-5.0.7.tar.gz
|
解壓後在根目錄上輸入ls 列出所有目錄會發現與下載redis之前多了一個redis-5.0.7.tar.gz檔案和 redis-5.0.7的目錄。
移動redis目錄
一般都會將redis目錄放置到 /usr/local/redis目錄,所以這裡輸入下面命令將目前在/root目錄下的redis-5.0.7資料夾更改目錄,同時更改資料夾名稱為redis。
1 |
mv /root/redis-5.0.7 /usr/local/redis
|
cd 到/usr/local目錄下輸入ls命令可以查詢到當前目錄已經多了一個redis子目錄,同時/root目錄下已經沒有redis-5.0.7資料夾
編譯
cd到/usr/local/redis目錄,輸入命令make執行編譯命令,接下來控制檯會輸出各種編譯過程中輸出的內容。
1 |
make
|
最終執行結果如下:
安裝
輸入以下命令
1 |
make PREFIX=/usr/local/redis install |
這裡多了一個關鍵字PREFIX=
這個關鍵字的作用是編譯的時候用於指定程式存放的路徑。比如我們現在就是指定了redis必須存放在/usr/local/redis目錄。假設不新增該關鍵字Linux會將可執行檔案存放在/usr/local/bin目錄,
庫檔案會存放在/usr/local/lib目錄。配置檔案會存放在/usr/local/etc目錄。其他的資原始檔會存放在usr/local/share目錄。這裡指定號目錄也方便後續的解除安裝,後續直接rm -rf /usr/local/redis 即可刪除redis。
執行結果如下圖:
啟動redis
根據上面的操作已經將redis安裝完成了。在目錄/usr/local/redis 輸入下面命令啟動redis
1 |
./bin/redis-server& ./redis.conf
|
上面的啟動方式是採取後臺程序方式,下面是採取顯示啟動方式(如在配置檔案設定了daemonize屬性為yes則跟後臺程序方式啟動其實一樣)。
1 |
./bin/redis-server ./redis.conf
|
兩種方式區別無非是有無帶符號&的區別。 redis-server 後面是配置檔案,目的是根據該配置檔案的配置啟動redis服務。redis.conf配置檔案允許自定義多個配置檔案,通過啟動時指定讀取哪個即可。
redis.conf配置檔案
在目錄/usr/local/redis下有一個redis.conf的配置檔案。我們上面啟動方式就是執行了該配置檔案的配置執行的。我麼可以通過cat、vim、less等Linux內建的讀取命令讀取該檔案。
也可以通過redis-cli命令進入redis控制檯後通過CONFIG GET * 的方式讀取所有配置項。 如下:
1 2 |
redis-cli
CONFIG GET *
|
回車確認後會將所有配置項讀取出來,如下圖
這裡列舉下比較重要的配置項
配置項名稱 | 配置項值範圍 | 說明 |
daemonize | yes、no | yes表示啟用守護程序,預設是no即不以守護程序方式執行。其中Windows系統下不支援啟用守護程序方式執行 |
port | 指定 Redis 監聽埠,預設埠為 6379 | |
bind | 繫結的主機地址,如果需要設定遠端訪問則直接將這個屬性備註下或者改為bind * 即可,這個屬性和下面的protected-mode控制了是否可以遠端訪問 。 | |
protected-mode | yes 、no | 保護模式,該模式控制外部網是否可以連線redis服務,預設是yes,所以預設我們外網是無法訪問的,如需外網連線rendis服務則需要將此屬性改為no。 |
timeout | 300 | 當客戶端閒置多長時間後關閉連線,如果指定為 0,表示關閉該功能 |
loglevel | debug、verbose、notice、warning | 日誌級別,預設為 notice |
databases | 16 | 設定資料庫的數量,預設的資料庫是0。整個通過客戶端工具可以看得到 |
rdbcompression | yes、no | 指定儲存至本地資料庫時是否壓縮資料,預設為 yes,Redis 採用 LZF 壓縮,如果為了節省 CPU 時間,可以關閉該選項,但會導致資料庫檔案變的巨大。 |
dbfilename | dump.rdb | 指定本地資料庫檔名,預設值為 dump.rdb |
dir | 指定本地資料庫存放目錄 | |
requirepass | 設定 Redis 連線密碼,如果配置了連線密碼,客戶端在連線 Redis 時需要通過 AUTH <password> 命令提供密碼,預設關閉 | |
maxclients | 0 | 設定同一時間最大客戶端連線數,預設無限制,Redis 可以同時開啟的客戶端連線數為 Redis 程序可以開啟的最大檔案描述符數,如果設定 maxclients 0,表示不作限制。當客戶端連線數到達限制時,Redis 會關閉新的連線並向客戶端返回 max number of clients reached 錯誤資訊。 |
maxmemory | XXX <bytes> | 指定 Redis 最大記憶體限制,Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放記憶體,Value 會存放在 swap 區。配置項值範圍列裡XXX為數值。 |
這裡我要將daemonize改為yes,不然我每次啟動都得在redis-server命令後面加符號&,不這樣操作則只要回到Linux控制檯則redis服務會自動關閉,同時也將bind註釋,將protected-mode設定為no。
這樣啟動後我就可以在外網訪問了。
更改方式:
1 |
vim /usr/local/redis/redis.conf
|
通過 /daemonize 查詢到屬性,預設是no,更改為yes即可。 (通過/關鍵字查找出現多個結果則使用 n字元切換到下一個即可,查詢到結果後輸入:noh退回到正常模式)
如下圖:
其他兩個屬性也是同樣方式查詢和編輯即可。
檢視Redis是否正在執行
1、採取檢視程序方式
1 |
ps -aux | grep redis
|
結果如下圖:
2、採取埠監聽檢視方式
1 |
netstat -lanp | grep 6379
|
結果如下圖:
redis-cli
redis-cli
是連線本地redis服務的一個命令,通過該命令後可以既然怒redis的指令碼控制檯。如下圖
輸入exit可以退出redis指令碼控制檯
關閉執行中的Redis服務
輸入redis-cli
進入控制檯後輸入命令shutdown
即可關閉執行中的Redis服務了。如下圖:
遠端連線不上問題
如下圖,已經開放了Redis服務的ip不為127.0.0.1,理論上遠端客戶端應該可以連線了,而且雲伺服器的埠號也在安全組裡開放了。
後面發現是啟動命令的問題,因為我比較偷懶,啟動redis我都是直接輸入命令redis-server
或redis-server&
這兩種方式都是直接讀取預設的配置檔案啟動,無非前者是顯示啟動後者是作為後臺應用啟動。我其實也很納悶,因為我修改的就是預設的配置檔案啊,我並沒有重新生成新的配置檔案,但是確實我輸入命令redis-server /usr/local/redis/etc/redis.conf
就是能成功,而且我輸入命令redis-server& /usr/local/redis/etc/redis.conf
也是遠端登入失敗。
關於直接輸入redis-server
不行的問題我還懷疑是不是Linux快取問題,我重啟伺服器嘗試下。結果還是一樣的。。。哎先不糾結了 後續再去找原因吧