在《Redis:簡介與安裝》中我們介紹瞭如何在Linux服務器上安裝Redis,其中在Redis的解壓目錄下有個很重要的配置文件redis.conf
不知道大家是否還有印象。
在實際使用Redis的過程中,很多功能的配置都是在此文件中完成的。我們今天的重點就是說說這個配置文件裏都有些什麼。
1. 開頭說明
開頭部分主要描述了這個文件是幹嘛的,以及Redis必須通過向redis-server
傳入該配置文件的路徑才能啓動。比如:./redis-server /path/to/redis.conf
。緊接着還給出提示若我們需要使用內存大小時,可以指定單位,通常是以k、gb、m的形式出現,並且這些單位是不區分大小寫的。
2. INCLUDES
我們知道Redis只有一個配置文件,但如果是多個人進行開發維護,那麼就需要多個這樣的配置文件。Redis針對這種場景,提供了include
關鍵字將其他配置文件引入進來,比如:include /path/to/local.conf
。
需要注意的是: 如果將include
寫在redis.conf
文件的最開始,那麼後面的配置會覆蓋引入文件的配置,即redis.conf
的配置優先級是更高的。但如果想以引入文件的配置作爲最終生效的配置,那麼需要將include
配置寫在redis.conf
文件的末尾。
3. MODULES
模塊擴展功能是在redis4.0上新增出來的,我們通過這裏的loadmodule
配置引入自定義模塊來新增一些功能。比如新增一種數據類型。
4. NETWORK
注意:該段配置較長,截圖只是部分內容,完整內容參考redis.conf
。
(1)bind
:用於綁定redis服務器網卡IP,默認爲127.0.0.1,只能通過本機的客戶端連接redis服務,而無法通過遠程連接。如果允許遠程連接,則可以將該配置項設置爲空。
(2)port
:設置redis進程的端口號,默認是6379。
(3)timeout
:設置客戶端連接的超時時間,單位爲秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連接。默認值爲0,表示不關閉。
(4)tcp-keepalive
:週期性的檢查客戶端是否處於健康狀態,避免服務器一直阻塞,單位爲秒。默認爲300,如果設置爲0,則不會週期性的檢測。
(5)protected-mode
:該配置項設置外部網絡連接redis服務,設置方式如下:
- 關閉protected-mode模式,此時外部網絡可以直接訪問。
- 開啓protected-mode保護模式,需配置bind ip或者設置訪問密碼。
5. GENERAL
(1)daemonize
:設置redis是否在後臺啓動,默認值爲 no。
(2)pidfile
:設置PID文件路徑,當redis作爲守護進程啓動時,它會把pid默認寫到/var/run/redis_6379.pid
文件裏面。
(3)loglevel
:定義日誌級別。默認值爲notice,可選值有以下4種:
- debug(記錄大量日誌信息,適用於開發、測試階段)
- verbose(較多日誌信息)
- notice(適量日誌信息,適用於生產環境)
- warning(僅記錄部分重要、關鍵信息)
(4)logfile
:配置log文件地址,默認打印在命令行終端的窗口上。
(5)databases
:設置數據庫的數量,默認爲16。默認爲第0個數據庫,客戶端可通過select <dbid>
命令選擇一個數據庫。
6. SNAPSHOTTING
(1)save
:設置觸發RDB方式的持久化條件,默認如下配置:
save 900 1:表示900 秒內如果至少有 1 個 key 的值變化,則保存
save 300 10:表示300 秒內如果至少有 10 個 key 的值變化,則保存
save 60 10000:表示60 秒內如果至少有 10000 個 key 的值變化,則保存
如果我們只是使用Redis的緩存功能,不需要對數據進行持久化,那麼可以註釋掉所有的 save 行來停用持久化功能。
(2)stop-writes-on-bgsave-error
:默認值爲yes。當啓用了RDB並且最後一次保存數據失敗時,Redis是否停止寫入數據。
(3)rdbcompression
:默認值是yes。用於表示持久化時,寫入磁盤的快照文件是否需要壓縮處理。
(4)rdbchecksum
:默認值是yes。在存儲快照後,我們還可以讓redis進行數據校驗,但這樣做會增加更多的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能。
(5)dbfilename
:設置快照的文件名,默認是dump.rdb
。
(6)dir
:設置快照文件的存放路徑。
7. REPLICATION
(1)replica-serve-stale-data
:默認值爲yes。當從節點與主節點斷開連接,或者正在同步數據時,從節點可能會有兩種表現:
- 如果爲yes,從節點可以繼續響應客戶端請求,但返回的數據可能是過時的。
- 如果爲no,從節點在以上情況不再響應客戶端請求,此時會返回"SYNC with master in progress" 的錯誤。
(2)replica-read-only
:配置Redis的從節點是否只讀,默認值爲yes。
(3)repl-diskless-sync
:主從數據複製是否使用無硬盤複製功能,默認值爲no。
8. SECURITY
(1)rename-command
:命令重命名,通常用於將一些重要命令重命名,從而起到安全保護的作用。例如:
- flushdb(清空數據庫)
- flushall(清空所有記錄)
- config(客戶端連接後可配置服務器)
- keys(客戶端連接後可查看所有存在的鍵)
可通過rename-command FLUSHALL ""
禁用命令,也可以保留命令但是不能輕易使用,如:rename-command FLUSHALL abcdefg
。這樣的話,重啓服務器後則需要使用新命令來執行,否則服務器會報錯unknown command。
(2)requirepass
:設置redis的連接密碼,比如:requirepass 123
。
9. CLIENTS
(1)maxclients
:設置客戶端最大併發連接數,默認無限制。如果設置maxclients爲0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息。
10. MEMORY MANAGEMENT
(1)maxmemory
:設置Redis的最大內存,如果設置爲0,表示不作限制。該配置項通常是配合下面介紹的maxmemory-policy
參數一起使用。
(2)maxmemory-policy
:當內存使用達到maxmemory
設置的最大值時,redis使用的內存清除策略。有以下幾種可以選擇:
volatile-lru
:使用LRU算法移除即將過期的key,只針對設置了過期時間的key。allkeys-lru
:使用LRU算法移除即將過期的key。volatile-random
:隨機移除即將過期的key,只針對設置了過期時間的key。allkeys-random
:隨機移除即將過期的key。volatile-ttl
:移除即將過期的key。noeviction
:不移除任何key,直接返回一個寫錯誤,默認選項。
(3)replica-ignore-maxmemory
:默認值爲yes,是否忽略從節點的內存限制。
11. APPEND ONLY MODE
(1)appendonly
:默認情況下redis使用的是RDB方式持久化,這種方式在許多場景中已經足夠用了。但是這種方式可能會導致可能有幾分鐘的數據丟失,而AOF是另一種持久化方式, 可以提供更好的持久化特性。Redis會把寫命令都寫入appendonly.aof
文件,如果啓動AOF,每次啓動時,Redis都會先把這個文件的數據讀入內存裏,而忽略RDB文件。默認值爲no。
(2)appendfilename
:aof文件名,默認是appendonly.aof
。
(3)appendfsync
:aof持久化策略的配置,默認值爲everysec
。
no
:表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快;always
:表示每次寫入都執行fsync,以保證數據同步到磁盤;everysec
:表示每秒執行一次fsync,可能會導致丟失這1s數據。
(4)no-appendfsync-on-rewrite
:在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite
字段設置爲默認設置爲no。如果對延遲要求很高的應用,這個字段可以設置爲yes,這樣對持久化特性來說這是更安全的選擇。設置爲yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成後再寫入,默認爲no,建議yes。Linux的默認fsync策略是30秒,可能丟失30秒數據。
(5)auto-aof-rewrite-percentage
:默認值爲100。aof自動重寫配置,當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候,Redis能夠調用bgrewriteaof對日誌文件進行重寫。這樣做的目的是壓縮aof文件,當前AOF文件大小是上次日誌重寫得到AOF文件大小的二倍(設置爲100)時,自動啓動新的日誌重寫過程。
(6)auto-aof-rewrite-min-size
:64mb。設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
12. LUA SCRIPTING
(1)lua-time-limit
:一個lua腳本執行的最大時間,單位爲ms。默認值爲5000。
13. REDIS CLUSTER
(1)cluster-enabled
:是否啓用集羣,默認是不開啓集羣模式。
(2)cluster-config-file
:集羣配置文件的名稱,每個節點都有一個集羣相關的配置文件,持久化保存集羣的信息。 這個文件並不需要手動配置,這個配置文件有Redis生成並更新,每個Redis集羣節點需要一個單獨的配置文件。需要確保與實例運行的系統中配置文件名稱不衝突,默認配置爲nodes-6379.conf
。
(3)cluster-node-timeout
:可以配置值爲15000。節點互連超時的閥值,集羣節點超時毫秒數。
(4)cluster-slave-validity-factor
:可以配置值爲10。在進行故障轉移的時候,全部從節點都會請求申請爲主節點,但是有些從節點可能與主節點斷開連接一段時間了, 導致數據過於陳舊,這樣的從節點不應該被提升爲主節點。該參數就是用來判斷從節點與主節點斷開的時間是否過長,判斷方法是:比較從節點斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period
。如果節點超時時間爲三十秒, 並且slave-validity-factor爲10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移。
(5)cluster-require-full-coverage
:默認情況下,集羣全部的slot必須是有節點負責,集羣狀態才爲ok,才能對外提供服務。若該配置設置爲no,可以在slot沒有全部分配的時候提供服務。通常情況下不建議打開該配置,這樣會造成分區的時候,小分區的主節點一直在接受寫請求,從而造成很長時間數據不一致。