溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis.conf基本配置項(xiàng)的示例分析

發(fā)布時(shí)間:2021-11-15 10:23:20 來(lái)源:億速云 閱讀:111 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹redis.conf基本配置項(xiàng)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

Redis的配置項(xiàng)看起來(lái)比較復(fù)雜,分析之下,其實(shí)可以分為幾大類(lèi)(以redis v2.6.14版本的redis.conf為例):
         1) 基本配置項(xiàng)
         2) 持久化(Persistence)相關(guān)配置
         3) Replication配置
         4) Security配置
         5) Limit配置
         6) SlowLog配置
         7) Advanced配置
         8) INCLUDES配置

        其中,持久化配置及Replication配置對(duì)redis來(lái)說(shuō)非常重要,后面單獨(dú)說(shuō)明。
        本篇筆記主要介紹其它幾類(lèi)配置項(xiàng)。

1. 基本配置項(xiàng)
        
1) daemonize
        是否以守護(hù)模式啟動(dòng),默認(rèn)為no,配置為yes時(shí)以守護(hù)模式啟動(dòng),這時(shí)redis instance會(huì)將進(jìn)程號(hào)pid寫(xiě)入默認(rèn)文件/var/run/redis.pid
        2) pidfile
        配置pid文件路徑,默認(rèn)/var/run/redis.pid,該配置項(xiàng)在以daemonized mode啟動(dòng)redis時(shí)有效
        3) port
        Redis進(jìn)程監(jiān)聽(tīng)的TCP端口,默認(rèn)為6379,如果配成0,則redis不會(huì)再listen TCP socket
        4) bind
        配置bind網(wǎng)卡,若配為具體ip值,則redis只偵聽(tīng)來(lái)自該網(wǎng)卡的連接。該配置項(xiàng)默認(rèn)為commented狀態(tài),表示redis會(huì)監(jiān)聽(tīng)來(lái)自該機(jī)器所有網(wǎng)卡的連接
        5) unixsocket和unixsocketperm
        配置unix sock file的路徑和權(quán)限,表明redis要偵聽(tīng)來(lái)自指定路徑下的unix socket file的數(shù)據(jù)請(qǐng)求。這些配置項(xiàng)默認(rèn)是commented的,即redis默認(rèn)不會(huì)偵聽(tīng)unix socket
        6) timeout
        配置連接超時(shí)時(shí)間,單位為秒,超時(shí)后redis進(jìn)程主動(dòng)斷開(kāi)連接;若配置為0,則表示redis服務(wù)進(jìn)程不會(huì)主動(dòng)斷開(kāi)來(lái)自client的連接
        7) tcp-keepalive
        配置redis向client發(fā)送?;預(yù)CKs的時(shí)間間隔,默認(rèn)為0,表示不發(fā)送keep-alive報(bào)文。
        備注:該配置項(xiàng)是新加的,2.6.7版本中沒(méi)有,最新的2.6.14有(還沒(méi)有調(diào)研是哪個(gè)版本引入的)。
        8) loglevel
        配置redis進(jìn)程的日志level,支持4種:debug/verbose/notice/warning,日志信息的詳細(xì)程度遞減,可根據(jù)實(shí)際情況做配置
        9) logfile
        redis輸出日志路徑,默認(rèn)stdout。若需改為其它目錄(如./log/redis-running.log),則日志文件的父路徑必須事先mkdir出來(lái),否則會(huì)啟動(dòng)失敗
        10) sys-log-enable/syslog-ident/syslog-facility
        這3個(gè)配置項(xiàng)與syslog相關(guān),默認(rèn)都是commented狀態(tài)。這里不再贅述,感興趣的話,可以在shell terminal中man syslog查看之。

        總結(jié):上述基本配置項(xiàng)中,port為必配項(xiàng),其余項(xiàng)一般情況下保持默認(rèn)即可。

2. 持久化(Persistence)相關(guān)配置
        
篇幅較多,下篇筆記做詳細(xì)說(shuō)明。update: 參見(jiàn)這里

3. Replication配置
        篇幅較多,下下篇筆記做詳細(xì)說(shuō)明。update: 參見(jiàn)這里

4. Security配置
        若redis實(shí)例可能會(huì)接收來(lái)自不受自己控制的客戶端的命令時(shí)(如來(lái)自第三方的訪問(wèn)),可以考慮啟用密碼保護(hù)(即客戶端必須先通過(guò)認(rèn)證(通過(guò)AUTH <passwd>)才能執(zhí)行其它命令),也可以通過(guò)rename-command來(lái)禁用某些會(huì)危及Redis正常運(yùn)行的危險(xiǎn)命令。
        1) requirepass <passwd>
        指定訪問(wèn)密碼
        2) rename-command <normal-cmd> <new-cmd>
        重命名命令。如rename-command CONFIG randomcommand或rename-command CONFIG "",其中后者會(huì)完全禁用CONFIG命令。
        注意:Changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems. 即若某些會(huì)寫(xiě)入aof文件或同步給從庫(kù)的命令被rename后,可能會(huì)引起問(wèn)題:aof文件回放時(shí),redis實(shí)例未必會(huì)識(shí)別出被rename后的命令;類(lèi)似地,master實(shí)例中被配置了rename的命令,同步到slave實(shí)例執(zhí)行時(shí),后者可能無(wú)法識(shí)別這些非官方支持的"自定義"命令。

 5. Limit配置
        1) maxclients
        客戶端的并發(fā)連接數(shù),默認(rèn)10000。當(dāng)redis實(shí)例無(wú)法更改系統(tǒng)fd限制時(shí),會(huì)以系統(tǒng)限制數(shù)n減去32作為Redis支持的最大連接數(shù)(減32是因?yàn)镽edis保留32個(gè)fd供內(nèi)部邏輯使用)。當(dāng)達(dá)到Redis支持的最大連接數(shù)后,新連接會(huì)被close,對(duì)應(yīng)的client會(huì)收到"max number of clients reached"的出錯(cuò)提示。 
        2) maxmemory
        配置Redis Server可占用的最大內(nèi)存值,單位byte。如果達(dá)到該閾值,根據(jù)用戶配置的淘汰策略,Redis會(huì)嘗試刪除符合淘汰條件的key。假如用戶配置了永不淘汰(noeviction)的策略,則Redis不會(huì)刪除現(xiàn)有的key,此時(shí),來(lái)自客戶端的所有寫(xiě)入或排序等需要使用更多內(nèi)存的命令都會(huì)報(bào)錯(cuò),而讀取命令可以正常執(zhí)行。
        在Redis被用來(lái)作為L(zhǎng)RU緩存時(shí),該配置項(xiàng)會(huì)很有用。
        特別注意:在主從部署下,master在配置了淘汰策略的前提下,配置maxmemory時(shí),需要配置一個(gè)比機(jī)器可用物理存儲(chǔ)器數(shù)量小一些的閾值,因?yàn)橹鲝耐叫枰獮閟lave保留output buffer。若master的maxmemory配置成與機(jī)器Physical Memory很接近的值,可能會(huì)引起master的key全部被淘汰的嚴(yán)重后果!
        具體的觸發(fā)過(guò)程:在Redis Server實(shí)際使用的內(nèi)存達(dá)到閾值后,開(kāi)始根據(jù)淘汰策略刪除master的key,同時(shí)會(huì)通過(guò)DEL命令同步刪除slave的key,此時(shí),master需要申請(qǐng)output buffer用于存放發(fā)往slave的命令,這會(huì)使master嘗試使用更多內(nèi)存,從而加劇內(nèi)存超限的嚴(yán)重程度。于是,master只能通過(guò)刪除更多的keys以便嘗試降低內(nèi)存使用,而這些keys的DELs命令同樣需要同步至slaves,意味著master需要申請(qǐng)更大的output buffer用于存放同步命令或數(shù)據(jù)。典型的"雪崩效應(yīng)",最壞的結(jié)果是master會(huì)把所有的key都刪干凈。
        而若maxmemory配置成比機(jī)器Physical Memory小一些的值(如配成后者的90%),當(dāng)Redis實(shí)際使用內(nèi)存達(dá)到配置閾值后,開(kāi)始淘汰key,發(fā)給slave的同步命令存到output buffer,此時(shí)Redis實(shí)際使用的內(nèi)存可能會(huì)繼續(xù)增長(zhǎng),由于目前系統(tǒng)還有大約10%的存儲(chǔ)器資源可供使用,因此output buffer會(huì)從這些free的memory中借用資源(從Redis 2.4開(kāi)始,master會(huì)認(rèn)為這個(gè)增長(zhǎng)是暫時(shí)的,同步完成后即可釋放內(nèi)存),從而避免master通過(guò)刪除更多的keys為output buffer騰空間。
        關(guān)于這個(gè)問(wèn)題的更詳細(xì)討論以及Redis作者的實(shí)現(xiàn)策略,可以參考這里。
        總之,要謹(jǐn)記:若系統(tǒng)以主從方式部署且master配置了淘汰策略,那么,master的maxmemory務(wù)必要配置一個(gè)合理的值(與用戶可以為Redis提供的最大物理內(nèi)存相比),以避免Redis實(shí)際使用的內(nèi)存達(dá)到閾值后發(fā)生所有的key被完全刪除的情況發(fā)生!
        3) maxmemory-policy
        配置Redis的淘汰策略,默認(rèn)為volatile-lru。目前支持6種策略:
          a. volatile-lru => remove the key with an expire set using an LRU algorithm; 
          b. allkeys-lru -> remove any key accordingly to the LRU algorithm
          c. volatile-random -> remove a random key with an expire set
          d. allkeys-random -> remove a random key, any key
          e. volatile-ttl -> remove the key with the nearest expire time (minor TTL)
           f. noeviction -> don't expire at all, just return an error on write operations
        4) maxmemory-samples
        配置key淘汰算法運(yùn)行時(shí)的采樣數(shù),默認(rèn)為3。之所以存在這個(gè)配置項(xiàng),是由于redis為節(jié)省內(nèi)存,采用了近似的淘汰算法,這個(gè)配置項(xiàng)可以用來(lái)調(diào)節(jié)淘汰算法的精度:當(dāng)需要淘汰key時(shí)(如內(nèi)存達(dá)到閾值),Redis會(huì)在符合淘汰條件(由maxmemory-policy指定)的key set中,隨機(jī)采樣n個(gè)key并將其中符合LRU的那個(gè)key刪掉。默認(rèn)情況下n取3,如果要提高淘汰算法的精度,n可以調(diào)大(代價(jià)是增加CPU運(yùn)算時(shí)間)。

6. SlowLog配置
        Redis可以記錄處理時(shí)間超過(guò)某個(gè)閾值的慢查詢,這里的處理時(shí)間不包括I/O操作(如與客戶端會(huì)話的讀/寫(xiě)時(shí)間等)。
        注意:由于Redis Server是單線程實(shí)現(xiàn),因此若其中某個(gè)查詢命令導(dǎo)致阻塞,會(huì)影響到后續(xù)的客戶端請(qǐng)求,因此,線上環(huán)境最好開(kāi)啟慢查詢記錄以便追蹤問(wèn)題。
        1) slowlog-log-slower-than
        指定慢查詢的閾值,單位:微秒。處理時(shí)間超過(guò)該值的查詢命令,會(huì)被記錄到日志中。
        2) slowlog-max-len
        配置slowlog記錄的最大條數(shù),大小無(wú)限制,但會(huì)消耗更多內(nèi)存。默認(rèn)128。

7. Advanced配置
        1) 內(nèi)部數(shù)據(jù)結(jié)構(gòu)優(yōu)化的閾值配置
        可以配置相應(yīng)的閾值,Redis據(jù)此判斷其內(nèi)部實(shí)現(xiàn)時(shí)是否優(yōu)化相關(guān)的數(shù)據(jù)結(jié)構(gòu)。例如:
            hash-max-ziplist-entries 512
            hash-max-ziplist-value 64
        上面的配置指定當(dāng)ziplist中的key個(gè)數(shù)不大于512且最大的value不大于64字節(jié)時(shí),Redis會(huì)用一種特殊的更節(jié)省內(nèi)存的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)這些k-v數(shù)據(jù)。
        類(lèi)似的配置還包括list、set、zset等數(shù)據(jù)類(lèi)型。
        2) activerehashing
        配置Redis是否主動(dòng)rehashing,默認(rèn)yes,意味著Redis每秒會(huì)有10次自動(dòng)rehashing的動(dòng)作(每100ms會(huì)觸發(fā)一次),以便盡可能優(yōu)化內(nèi)存使用。
        注意:Redis采取的是lazy rehashing策略,即越是被頻繁訪問(wèn)的hash table,Redis針對(duì)該表的rehashing也會(huì)越頻繁;相反,若某個(gè)hash table處于idle狀態(tài),則針對(duì)它的rehashing永遠(yuǎn)不會(huì)被真正執(zhí)行。
        3) output buffer
        output buffer是Redis為client分配的緩沖區(qū)(這里的"client"可能是真正的client,也可能是slave或monitor),若為某個(gè)客戶端分配的output buffer超過(guò)了預(yù)留大小,Redis可能會(huì)根據(jù)配置策略關(guān)閉與該端的連接。
        例如,若Redis被用作message queue,訂購(gòu)消息的consumer處理速度跟不上發(fā)布消息的producer時(shí),就會(huì)發(fā)生對(duì)應(yīng)的output buffer超限的情況。
        該配置項(xiàng)格式如下:
        client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
          <class>:目前支持3種客戶端:1) normal => normal clients; 2) slave clients and MONITOR clients; 3) pubsub => clients subcribed to at least one pubsub channel or pattern
          <hard limit>:若output buffer大小超過(guò)該值,Redis會(huì)立即關(guān)閉與對(duì)應(yīng)client的連接
          <soft limit> <soft seconds>:若output buffer大小超過(guò)soft limit且這種情況的持續(xù)時(shí)間超過(guò)soft seconds,則Redis會(huì)關(guān)閉與對(duì)應(yīng)client的連接。
        默認(rèn)的配置如下:
        client-output-buffer-limit normal 0 0 0          
        client-output-buffer-limit slave 256mb 64mb 60   
        client-output-buffer-limit pubsub 32mb 8mb 60    

8. INCLUDES配置
        當(dāng)機(jī)器不只存在1個(gè)Redis實(shí)例時(shí),這里可以實(shí)現(xiàn)每個(gè)Redis實(shí)例的"個(gè)性化"配置,此時(shí),可以將這些實(shí)例的共有配置寫(xiě)到redis.conf中,而個(gè)性化的配置寫(xiě)到由include配置路徑指定的文件中。
         配置格式:include /path/to/local.conf

以上是“redis.conf基本配置項(xiàng)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI