上一篇部落格聊了下redis的簡介以及redis的yum安裝和原始碼編譯安裝需要注意到問題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13378138.html;今天我們來對redis的配置檔案相關資料和配置的使用和說明;
yum安裝的redis預設版本是3.2.12,預設配置檔案就是/etc/redis.conf;預設配置檔案大概可以分如下段配置
[root@node1 ~]# grep "^###" /etc/redis.conf ################################## INCLUDES ################################### ################################## NETWORK ##################################### ################################# GENERAL ##################################### ################################ SNAPSHOTTING ################################ ################################# REPLICATION ################################# ################################## SECURITY ################################### ################################### LIMITS #################################### ############################## APPEND ONLY MODE ############################### ################################ LUA SCRIPTING ############################### ################################ REDIS CLUSTER ############################### ################################## SLOW LOG ################################### ################################ LATENCY MONITOR ############################## ############################# EVENT NOTIFICATION ############################## ############################### ADVANCED CONFIG ############################### [root@node1 ~]#
提示:預設配置檔案分了14個配置段,每個配置段都有相應的指令;
INCLUDE相關配置指令
提示:很多開源軟體都支援include這個指令,把某個目錄下的檔案匯入到指定位置做配置檔案的方式(最常見的就是把某個目錄下的以點conf結尾的檔案匯入到當前位置);以上紅框中的內容表示把/usrlocal/reds/conf.d/test.conf檔案都匯入到此處;這裡需要注意一點redis好像不支援以模式匹配的方式匯入多個檔案,必須單個匯入,除此之外匯入的檔案必須得存在可訪問;對於include指令放在哪個位置,需要自行定義,因為include以下的配置檔案如果和include指定的檔案配置有重複,以include之下的內容為準;也就說匯入配置會覆蓋匯入配置之前的配置;
NETWORK相關配置指令
bind:該指令用於指定redis監聽的ip地址,預設情況redis監聽在本機的127.0.0.1這個迴環地址上;
提示:bind支援繫結多個ip地址,繫結多個ip地址,每個ip地址分別用空格隔開即可;如果想要監聽在本機所有地址,可以寫成bind 0.0.0.0或者註釋bind指令,但是主註釋bind指令對於開啟了保護模式,雖然監聽在本機所有地址,也能夠連線redis,但是沒法做任何操作;以上配置表示讓redis監聽在本機的127.0.0.1 和192.168.0.41這兩個ip地址上;
驗證:重啟reids看看我們配置的地址是否處於監聽狀態?
protected-mode:該指令用於指定是否開啟保護模式;所謂保護模式就是如果redis在沒有配置密碼,也沒有配置bind地址,即便監聽在本機的所有地址,遠端客戶端是可以連線到redis,但是沒法正常使用;yes表示開啟保護功能;no表示不開啟此功能;
提示:以上配合表示開啟保護模式,這也就意味著,如果我們在配置檔案中如果沒有配置bind監聽地址和設定密碼,那麼redis是不能被遠端連線夠使用的;
驗證:把redis的bind指令註釋掉,然後重啟服務,使用另一臺客戶段連線192.168.0.41,看看是否可以用?
提示:註釋掉bind指令,重啟redis後,預設後監聽在本機所有地址上;
測試:本機是否可連線使用redis?
提示:本機上可以正常連線和使用redis
非本機客戶端是否可以連線使用呢?
提示:可以看到用非本機客戶端是可以正常連線到redis,但是沒有辦法執行命令,它告訴我們redis開啟了保護模式,解決上面的報錯,可以把保護模式關閉了(關閉保護模式可以使用CONFIG SET protected-mode no 這種就是在終端直接使用命令關閉(非當前終端,可以使用本機連線的終端上使用);第二中方式就是在配置檔案中把protected-mode 配置成no,然後重啟redis;第三種是停掉當前redis,啟動時加上--protected-mode no選項啟動;),其次就是給redis設定一個密碼或者啟動bind指令監聽一個可用地址即可;
測試:在本機上使用連線redis-server的方式在終端命令列中使用CONFIG SET protected-mode no命令關閉保護模式
提示:可以看到在本機連線終端上執行CONFIG SET protected-mode no 命令後,在非本機連線的客戶端終端就可以操作red
port:該指令用於指定redis TCP套接字監聽埠,預設是6379;如果使用0 表示不監聽tcp套接字
提示:以上配置表示redis使用TCP套接字的6380埠對外提供服務;
驗證:重啟redis服務,看看對應6380埠是否處於監聽狀態,redis-cli 是否可以連線6380使用redis?
提示:重啟服務6380埠正常監聽,用redis-cli也是可以正常連線訪問redis;這裡需要注意用-p指定埠需要有空格;
tcp-backlog:該指令用於指定TCP三次握手的時候 server 端收到 client ack 確認號之後的佇列值預設是511;通常會這個選項不需要我們去額外的更改,用預設的511是可以的;
unixsocket:該指令用於指定本地使用unix socket 方式連線時監聽的UNIX SOCKET檔案路徑;
unixsocketperm:該指令用於指定UNIX SOCKET檔案的許可權;
示例:啟用UNIX SOCKET
驗證:重啟redis服務,然後使用unix socket方式連線本機redis
提示:redis-cli命令 -s選項用於指定socket檔案路徑;從上面的測試可以看到,重啟redis後,在對應目錄下就生成了在配置檔案中我們指定的名稱的sock檔案;用redis-cli客戶端軟體使用/tmp/redis.sock檔案連線redis也是可以正常操作redis;
timeout:該指令用於指定客戶端和 Redis 服務端的連線超時時間,預設是 0,表示永不超時。
tcp-keepalive:該指令用於指定tcp連線的會話保持時間,預設配置是300秒。
GENERAL相關配置指令
daemonize:該指令用於指定是否讓redis執行為後臺守護程式執行,預設是no;如果你想讓它在後臺執行,你就把它改成yes,當 redis 作為守護程式執行的時候,它會寫一個 pid 到 /var/run/redis.pid 檔案裡面;
示例:配置redis執行為後臺守護程式
驗證:重啟redis,看看是否能夠執行為後臺守護程式?
提示:可以看到我們不用systemctl 去執行redis也可以讓redis執行為後臺,並且使用redis-cli工具也可以正常連線redis對它進行操作;
supervised:該指令用於指定redis作業系統相關引數,預設是no;可以設定通過 upstart 和 systemd 管理 Redis 守護程式,centos 7以後都使用 systemd;
pidfile:該指令用於指定redis pid檔案;預設是/var/run/redis_6379.pid;
提示:我這邊測試不管是編譯還是yum安裝,它預設能夠啟動起來,但是在/var/run/目錄下就找不到對應redis的pid檔案;後續看了下目錄的許可權,發現用root啟動redis在對應目錄下就能建立pid檔案,普通使用者就不行;
驗證:啟動reids,在/var/run/目錄下看看是否有redis_6379.pid檔案?
提示:可以看到redis啟動了,但是沒有找到pid檔案;大概是許可權的問題吧;
驗證:把/var/run/目錄新增一個redis使用者可以寫的許可權,然後重啟redis,看看對應目錄下是否可生成pid檔案?
提示:可以看到,當我們給對應目錄增加了acl許可權以後,重啟redis,pid檔案就生成了;對於這種,建議還是單獨建立一個目錄,把許可權都給redis使用者,然後配置pidfile 指向新建的目錄;
loglevel:該指令用於指定redis日誌的級別,預設是notice級別;
logfile:該指令用於指定redis日誌檔案路徑;預設是/var/log/redis/redis.log;
syslog-enabled:該指令用於指定是否啟用syslog記錄redis日誌;預設是no,不啟用;
syslog-ident:該指令用於指定syslog的標識,預設是redis
syslog-facility:該指令用於指定使用syslog的那個設施來記錄redis日誌;預設是local0
示例:開啟rsyslog記錄redis日誌
提示:以上配置是在redis上開啟了讓rsyslog記錄日誌,把redis的日誌傳送到local0這個設施上;
在rsyslog中定義local0把日誌記錄到某個檔案中
提示:以上配置是表示把local0這個設施上的任何級別日誌都記錄到/tmp/test.log中;
驗證:重啟rsyslog和redis 看看/tmp/test.log中是否記錄redis的日誌?
提示:可以看到重啟了rsyslog和redis後在/tmp/test.log中就記錄了redis的啟動日誌資訊;
提示:其實預設情況redis rsyslog會把系統上的info級別以上的日誌都記錄到/var/log/messages這個檔案中,所以我們啟動redis可以在/var/log/messages這個檔案中看到redis的日誌,也可以在/var/log/redis/redis.log中看到redis的日誌;通常情況不建議讓redis的日誌寫多份,建議還是用logfile指定日誌檔案,然後不啟用rsyslog;
databases:該指令用於指定redis的資料庫數量;預設人庫是0;就是說這個指令指定的值可以限定redis最大能有多少個資料庫,預設情況redis最大支援16個庫;當然如果16個庫少了,我們可以通過調整databases的值,來調大支援的資料庫數量;
示例:預設不更改databases的值,連線資料庫,用select命令看看最大能夠切換到那個庫?
提示:redis裡的資料庫都是以數字命名的,不像mysql裡的可以用字串命名;select命令是用於切換資料庫,類似mysql裡的use命令;從上面的資訊可以看到,我們在配置檔案中指定databases為16,客戶端連線redis最大也只能切換到15號庫,這是因為redis資料庫是從0號庫開始的;