Redis:redis.conf配置文件介紹

《Redis:簡介與安裝》中我們介紹了如何在Linux服務器上安裝Redis,其中在Redis的解壓目錄下有個很重要的配置文件redis.conf不知道大家是否還有印象。

在實際使用Redis的過程中,很多功能的配置都是在此文件中完成的。我們今天的重點就是說說這個配置文件里都有些什么。

1. 開頭說明

開頭部分主要描述了這個文件是干嘛的,以及Redis必須通過向redis-server傳入該配置文件的路徑才能啟動。比如:./redis-server /path/to/redis.conf。緊接著還給出提示若我們需要使用內存大小時,可以指定單位,通常是以k、gb、m的形式出現(xiàn),并且這些單位是不區(qū)分大小寫的。

2. INCLUDES

我們知道Redis只有一個配置文件,但如果是多個人進行開發(fā)維護,那么就需要多個這樣的配置文件。Redis針對這種場景,提供了include關鍵字將其他配置文件引入進來,比如:include /path/to/local.conf

需要注意的是:如果將include寫在redis.conf文件的最開始,那么后面的配置會覆蓋引入文件的配置,即redis.conf的配置優(yōu)先級是更高的。但如果想以引入文件的配置作為最終生效的配置,那么需要將include配置寫在redis.conf文件的末尾。

3. MODULES

模塊擴展功能是在redis4.0上新增出來的,我們通過這里的loadmodule配置引入自定義模塊來新增一些功能。比如新增一種數(shù)據(jù)類型。

4. NETWORK

注意:該段配置較長,截圖只是部分內容,完整內容參考redis.conf。

(1)bind:用于綁定redis服務器網卡IP,默認為127.0.0.1,只能通過本機的客戶端連接redis服務,而無法通過遠程連接。如果允許遠程連接,則可以將該配置項設置為空。

(2)port:設置redis進程的端口號,默認是6379。

(3)timeout:設置客戶端連接的超時時間,單位為秒。當客戶端在這段時間內沒有發(fā)出任何指令,那么關閉該連接。默認值為0,表示不關閉。

(4)tcp-keepalive:周期性的檢查客戶端是否處于健康狀態(tài),避免服務器一直阻塞,單位為秒。默認為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(記錄大量日志信息,適用于開發(fā)、測試階段)
  • verbose(較多日志信息)
  • notice(適量日志信息,適用于生產環(huán)境)
  • warning(僅記錄部分重要、關鍵信息)

(4)logfile:配置log文件地址,默認打印在命令行終端的窗口上。

(5)databases:設置數(shù)據(jù)庫的數(shù)量,默認為16。默認為第0個數(shù)據(jù)庫,客戶端可通過select <dbid>命令選擇一個數(shù)據(jù)庫。

6. SNAPSHOTTING

(1)save:設置觸發(fā)RDB方式的持久化條件,默認如下配置:

save 900 1:表示900 秒內如果至少有 1 個 key 的值變化,則保存
save 300 10:表示300 秒內如果至少有 10 個 key 的值變化,則保存
save 60 10000:表示60 秒內如果至少有 10000 個 key 的值變化,則保存

如果我們只是使用Redis的緩存功能,不需要對數(shù)據(jù)進行持久化,那么可以注釋掉所有的 save 行來停用持久化功能。

(2)stop-writes-on-bgsave-error:默認值為yes。當啟用了RDB并且最后一次保存數(shù)據(jù)失敗時,Redis是否停止寫入數(shù)據(jù)。

(3)rdbcompression:默認值是yes。用于表示持久化時,寫入磁盤的快照文件是否需要壓縮處理。

(4)rdbchecksum:默認值是yes。在存儲快照后,我們還可以讓redis進行數(shù)據(jù)校驗,但這樣做會增加更多的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能。

(5)dbfilename:設置快照的文件名,默認是dump.rdb。

(6)dir:設置快照文件的存放路徑。

7. REPLICATION

(1)replica-serve-stale-data:默認值為yes。當從節(jié)點與主節(jié)點斷開連接,或者正在同步數(shù)據(jù)時,從節(jié)點可能會有兩種表現(xiàn):

  • 如果為yes,從節(jié)點可以繼續(xù)響應客戶端請求,但返回的數(shù)據(jù)可能是過時的。
  • 如果為no,從節(jié)點在以上情況不再響應客戶端請求,此時會返回"SYNC with master in progress" 的錯誤。

(2)replica-read-only:配置Redis的從節(jié)點是否只讀,默認值為yes。

(3)repl-diskless-sync:主從數(shù)據(jù)復制是否使用無硬盤復制功能,默認值為no。

8. SECURITY

(1)rename-command:命令重命名,通常用于將一些重要命令重命名,從而起到安全保護的作用。例如:

  • flushdb(清空數(shù)據(jù)庫)
  • flushall(清空所有記錄)
  • config(客戶端連接后可配置服務器)
  • keys(客戶端連接后可查看所有存在的鍵)

可通過rename-command FLUSHALL ""禁用命令,也可以保留命令但是不能輕易使用,如:rename-command FLUSHALL abcdefg。這樣的話,重啟服務器后則需要使用新命令來執(zhí)行,否則服務器會報錯unknown command。

(2)requirepass:設置redis的連接密碼,比如:requirepass 123

9. CLIENTS

(1)maxclients:設置客戶端最大并發(fā)連接數(shù),默認無限制。如果設置maxclients為0,表示不作限制。當客戶端連接數(shù)到達限制時,Redis會關閉新的連接并向客戶端返回max number of clients reached錯誤信息。

10. MEMORY MANAGEMENT

(1)maxmemory:設置Redis的最大內存,如果設置為0,表示不作限制。該配置項通常是配合下面介紹的maxmemory-policy參數(shù)一起使用。

(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,是否忽略從節(jié)點的內存限制。

11. APPEND ONLY MODE

(1)appendonly:默認情況下redis使用的是RDB方式持久化,這種方式在許多場景中已經足夠用了。但是這種方式可能會導致可能有幾分鐘的數(shù)據(jù)丟失,而AOF是另一種持久化方式, 可以提供更好的持久化特性。Redis會把寫命令都寫入appendonly.aof文件,如果啟動AOF,每次啟動時,Redis都會先把這個文件的數(shù)據(jù)讀入內存里,而忽略RDB文件。默認值為no。

(2)appendfilename:aof文件名,默認是appendonly.aof。

(3)appendfsync:aof持久化策略的配置,默認值為everysec。

  • no:表示不執(zhí)行fsync,由操作系統(tǒng)保證數(shù)據(jù)同步到磁盤,速度最快;
  • always:表示每次寫入都執(zhí)行fsync,以保證數(shù)據(jù)同步到磁盤;
  • everysec:表示每秒執(zhí)行一次fsync,可能會導致丟失這1s數(shù)據(jù)。

(4)no-appendfsync-on-rewrite:在aof重寫或者寫入rdb文件的時候,會執(zhí)行大量IO,此時對于everysec和always的aof模式來說,執(zhí)行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置為默認設置為no。如果對延遲要求很高的應用,這個字段可以設置為yes,這樣對持久化特性來說這是更安全的選擇。設置為yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成后再寫入,默認為no,建議yes。Linux的默認fsync策略是30秒,可能丟失30秒數(shù)據(jù)。

(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腳本執(zhí)行的最大時間,單位為ms。默認值為5000。

13. REDIS CLUSTER

(1)cluster-enabled:是否啟用集群,默認是不開啟集群模式。

(2)cluster-config-file:集群配置文件的名稱,每個節(jié)點都有一個集群相關的配置文件,持久化保存集群的信息。 這個文件并不需要手動配置,這個配置文件有Redis生成并更新,每個Redis集群節(jié)點需要一個單獨的配置文件。需要確保與實例運行的系統(tǒng)中配置文件名稱不沖突,默認配置為nodes-6379.conf。

(3)cluster-node-timeout:可以配置值為15000。節(jié)點互連超時的閥值,集群節(jié)點超時毫秒數(shù)。

(4)cluster-slave-validity-factor :可以配置值為10。在進行故障轉移的時候,全部從節(jié)點都會請求申請為主節(jié)點,但是有些從節(jié)點可能與主節(jié)點斷開連接一段時間了, 導致數(shù)據(jù)過于陳舊,這樣的從節(jié)點不應該被提升為主節(jié)點。該參數(shù)就是用來判斷從節(jié)點與主節(jié)點斷開的時間是否過長,判斷方法是:比較從節(jié)點斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period 。如果節(jié)點超時時間為三十秒, 并且slave-validity-factor為10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移。

(5)cluster-require-full-coverage:默認情況下,集群全部的slot必須是有節(jié)點負責,集群狀態(tài)才為ok,才能對外提供服務。若該配置設置為no,可以在slot沒有全部分配的時候提供服務。通常情況下不建議打開該配置,這樣會造成分區(qū)的時候,小分區(qū)的主節(jié)點一直在接受寫請求,從而造成很長時間數(shù)據(jù)不一致。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容