redis配置文件
redis配置文件在mac中的默認位置在/usr/local/etc/redis.conf创泄,可以在服務(wù)啟動時指定,也支持服務(wù)啟動后的動態(tài)修改啤月。配置項的內(nèi)容具體如下:
# *********************************常用配置*********************************
# 是否作為守護進程運行挂滓。當為yes時它會寫一個pid到/var/run/redis.pid文件里面
daemonize yes or no
# 當運行多個server實例的時候岖食,需要指定不同的pid文件和端口
pidfile /var/run/redis.pid
port 6379 # 默認端口號
# TCP監(jiān)聽的最大容納數(shù)量
tcp-backlog 511
# 綁定ip
bind 127.0.0.1
# 客戶端和Redis服務(wù)端的連接超時時間(單位是秒),默認0代表永不超時
timeout 0
# socket心跳包(單位是秒)名船,默認0代表使用SO_KEEPALIVE方式檢測連接
tcp-keepalive 0
# 日志級別
# debug 開發(fā)or測試
# verbose
# notice 生產(chǎn)環(huán)境
# warning
loglevel notice
# 指定日志文件地址
logfile "/data/logs/redis/redis.log"
# 是否記錄到系統(tǒng)日志
syslog-enabled no
# 設(shè)置syslog的identity
# syslog-ident redis
# 可用數(shù)據(jù)庫數(shù)量绰上,默認16個,默認當前數(shù)據(jù)庫為0渠驼,范圍0到databases-1蜈块,可通過select num切換數(shù)據(jù)庫
databases 16
# *********************************快照*********************************
# 在n秒內(nèi)有m次改動就觸發(fā)保存動作,可以配置多個條件迷扇,關(guān)系相當于if百揭、else if
save 900 1
save 300 10
save 60 10000
# 當發(fā)生第一次寫保存失敗后是否強制關(guān)閉寫通道
# 這是強制通知用戶寫錯誤的方式,如果有靠譜的監(jiān)控蜓席,可以設(shè)置成no
stop-writes-on-bgsave-error yes
# 備份時是否進行數(shù)據(jù)壓縮
rdbcompression yes
# 讀寫時是否進行crc校驗
rdbchecksum yes
# 備份時的文件名
dbfilename dump.rdb
# 數(shù)據(jù)庫備份文件的位置
dir /data/data/redis/
# *********************************主從配置*********************************
# 設(shè)置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫器一,參數(shù)為主庫ip和端口
# slaveof <masterip> <masterport>
# 指定與主數(shù)據(jù)庫連接時需要的密碼驗證,本地為從庫時需要設(shè)置訪問主庫服務(wù)器的密碼
# masterauth <master-password>
# 當slave服務(wù)器和master服務(wù)器失去連接后厨内,或者當數(shù)據(jù)正在復(fù)制傳輸?shù)臅r候祈秕,如果此參數(shù)值設(shè)置“yes”,slave服務(wù)器可以繼續(xù)接受客戶端的請求雏胃,否則请毛,會返回給請求的客戶端如下信息“SYNC with master in progress”,除了INFO,SLAVEOF這兩個命令
slave-serve-stale-data yes
# 是否設(shè)置slave服務(wù)器節(jié)點只提供讀服務(wù)
slave-read-only yes
# 新的從站和重連后不能繼續(xù)備份的從站瞭亮,需要做所謂的“完全備份”方仿,即將一個RDB文件從主站傳送到從站。這個傳送有以下兩種方式:
# 1)硬盤備份:redis主站創(chuàng)建一個新的進程,用于把RDB文件寫到硬盤上兼丰。過一會兒玻孟,其父進程遞增地將文件傳送給從站。
# 2)無硬盤備份:redis主站創(chuàng)建一個新的進程鳍征,子進程直接把RDB文件寫到從站的套接字黍翎,不需要用到硬盤。
# 在硬盤備份的情況下艳丛,主站的子進程生成RDB文件匣掸。一旦生成,多個從站可以立即排成隊列使用主站的RDB文件氮双。在無硬盤備份的情況下碰酝,一次RDB傳送開始,新的從站到達后戴差,需要等待現(xiàn)在的傳送結(jié)束送爸,才能開啟新的傳送。
# 如果使用無硬盤備份暖释,主站會在開始傳送之間等待一段時間(可配置袭厂,以秒為單位),希望等待多個子站到達后并行傳送球匕。
# 在硬盤低速而網(wǎng)絡(luò)高速(高帶寬)情況下纹磺,無硬盤備份更好。
repl-diskless-sync no
# 當啟用無硬盤備份亮曹,服務(wù)器等待一段時間后才會通過套接字向從站傳送RDB文件橄杨,這個等待時間是可配置的。
# 這一點很重要照卦,因為一旦傳送開始式矫,就不可能再為一個新到達的從站服務(wù)。從站則要排隊等待下一次RDB傳送窄瘟。因此服務(wù)器等待一段時間以期更多的從站到達衷佃。
# 延遲時間以秒為單位,默認為5秒蹄葱。要關(guān)掉這一功能氏义,只需將它設(shè)置為0秒,傳送會立即啟動图云。
repl-diskless-sync-delay 5
# 從站以一個預(yù)先設(shè)置好的時間間隔向服務(wù)器發(fā)送PING惯悠。這個時間間隔可以通過repl_ping_slave_period選項改變。默認值是10秒竣况。
# repl-ping-slave-period 10
# 設(shè)置主從復(fù)制過期時間
# 這個值一定要比 repl-ping-slave-period 大
# repl-timeout 60
# 指定向slave同步數(shù)據(jù)時克婶,是否禁用socket的NO_DELAY選 項。若配置為“yes”,則禁用NO_DELAY情萤,則TCP協(xié)議棧會合并小包統(tǒng)一發(fā)送鸭蛙,這樣可以減少主從節(jié)點間的包數(shù)量并節(jié)省帶寬,但會增加數(shù)據(jù)同步到 slave的時間筋岛。若配置為“no”娶视,表明啟用NO_DELAY,則TCP協(xié)議棧不會延遲小包的發(fā)送時機睁宰,這樣數(shù)據(jù)同步的延時會減少肪获,但需要更大的帶寬。 通常情況下柒傻,應(yīng)該配置為no以降低同步延時孝赫,但在主從節(jié)點間網(wǎng)絡(luò)負載已經(jīng)很高的情況下,可以配置為yes红符。
repl-disable-tcp-nodelay no
# 設(shè)置主從復(fù)制容量大小青柄。這個 backlog 是一個用來在 slaves 被斷開連接時存放 slave 數(shù)據(jù)的 buffer,所以當一個 slave 想要重新連接违孝,通常不希望全部重新同步刹前,只是部分同步就夠了,僅僅傳遞 slave 在斷開連接時丟失的這部分數(shù)據(jù)雌桑。
# 這個值越大,salve 可以斷開連接的時間就越長祖今。
# repl-backlog-size 1mb
# 在某些時候校坑,master 不再連接 slaves,backlog 將被釋放千诬。
# 如果設(shè)置為 0 耍目,意味著絕不釋放 backlog 。
# repl-backlog-ttl 3600
# 指定slave的優(yōu)先級徐绑。在不只1個slave存在的部署環(huán)境下邪驮,當master宕機時,Redis Sentinel會將priority值最小的slave提升為master傲茄。
# 這個值越小毅访,就越會被優(yōu)先選中,需要注意的是盘榨,若該配置項為0喻粹,則對應(yīng)的slave永遠不會自動提升為master。
slave-priority 100
# 主站可以停止接受寫請求草巡,當與它連接的從站少于N個守呜,滯后少于M秒。N個從站必須是在線狀態(tài)。 延遲的秒數(shù)必須<=所定義的值查乒,延遲秒數(shù)是從最后一次收到的來自從站的ping開始計算弥喉。ping通常是每秒一次。
# 這一選項并不保證N個備份都會接受寫請求玛迄,但是會限制在指定秒數(shù)內(nèi)由于從站數(shù)量不夠?qū)е碌膶懖僮鱽G失的情況档桃。
# 如果想要至少3個從站且延遲少于10秒,這樣寫
# min-slaves-to-write 3
# min-slaves-max-lag 10
# *********************************安全配置*********************************
# 設(shè)置連接redis的密碼
# redis速度相當快憔晒,一個外部用戶在一秒鐘進行150K次密碼嘗試藻肄,需指定強大的密碼來防止暴力破解
requirepass set_enough_strong_passwd
# 重命名一些高危命令,用來禁止高危命令
rename-command FLUSHALL ZYzv6FOBdwflW2nX
rename-command CONFIG aI7zwm1GDzMMrEi
rename-command EVAL S9UHPKEpSvUJMM
rename-command FLUSHDB D60FPVDJuip7gy6l
# *********************************限制*********************************
# 限制同時連接的客戶數(shù)量,默認是10000
# 當連接數(shù)超過這個值時拒担,redis 將不再接收其他連接請求嘹屯,客戶端嘗試連接時將收到 error 信息
# maxclients 10000
# 設(shè)置redis能夠使用的最大內(nèi)存。
# 達到最大內(nèi)存設(shè)置后从撼,Redis會先嘗試清除已到期或即將到期的Key(設(shè)置過expire信息的key)
# 在刪除時,按照過期時間進行刪除州弟,最早將要被過期的key將最先被刪除
# 如果已到期或即將到期的key刪光,仍進行set操作低零,那么將返回錯誤
# 此時redis將不再接收寫請求,只接收get請求婆翔。
# maxmemory的設(shè)置比較適合于把redis當作于類似memcached 的緩存來使用
# maxmemory <bytes>
# 當內(nèi)存達到最大值的時候Redis會選擇刪除哪些數(shù)據(jù)?有六種方式可供選擇
# volatile-lru:只對設(shè)置了過期時間的key進行LRU(默認值)
# allkeys-lru :刪除lru算法的key
# volatile-random:隨機刪除即將過期key
# allkeys-random:隨機刪除
# volatile-ttl : 刪除即將過期的
# noeviction :永不過期掏婶,返回錯誤
# maxmemory-policy noeviction
# LRU和 minimal TTL 算法都不是精準的算法啃奴,而是相對精確的算法(為了節(jié)省內(nèi)存),隨意你可以選擇樣本大小進行檢測雄妥。
# Redis默認的會選擇3個樣本進行檢測最蕾,你可以通過maxmemory-samples進行設(shè)置
# maxmemory-samples 3
# *********************************append only*********************************
# redis 默認每次更新操作后會在后臺異步的把數(shù)據(jù)庫鏡像備份到磁盤,但該備份非常耗時老厌,且備份不宜太頻繁
# redis 同步數(shù)據(jù)文件是按上面save條件來同步的
# 如果發(fā)生諸如拉閘限電瘟则、拔插頭等狀況,那么將造成比較大范圍的數(shù)據(jù)丟失
# 所以redis提供了另外一種更加高效的數(shù)據(jù)庫備份及災(zāi)難恢復(fù)方式
# 開啟appendonly 模式后,redis將每一次寫操作請求都追加到appendonly.aof文件中
# redis重新啟動時,會從該文件恢復(fù)出之前的狀態(tài)枝秤。
# 但可能會造成 appendonly.aof 文件過大醋拧,所以redis支持BGREWRITEAOF指令,對appendonly.aof重新整理,默認是不開啟的淀弹。
appendonly no
# 默認為appendonly.aof丹壕。
appendfilename "appendonly.aof"
# 設(shè)置對appendonly.aof 文件進行同步的頻率,有三種選擇always、everysec垦页、no雀费,默認是everysec表示每秒同步一次。
# always 表示每次有寫操作都進行同步
# everysec 表示對寫操作進行累積,每秒同步一次
# no表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤痊焊,都進行同步盏袄,everysec表示對寫操作進行累積忿峻,每秒同步一次
# appendfsync always
# appendfsync everysec
# appendfsync no
# 指定是否在后臺aof文件rewrite期間調(diào)用fsync,默認為no辕羽,表示要調(diào)用fsync(無論后臺是否有子進程在刷盤)逛尚。Redis在后臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時刁愿,在某些linux系統(tǒng)中绰寞,調(diào)用fsync可能會阻塞
no-appendfsync-on-rewrite yes
# 指定Redis重寫aof文件的條件,默認為100铣口,表示與上次rewrite的aof文件大小相比滤钱,當前aof文件增長量超過上次afo文件大小的100%時,就會觸發(fā)background rewrite脑题。若配置為0件缸,則會禁用自動rewrite
auto-aof-rewrite-percentage 100
# 指定觸發(fā)rewrite的aof文件大小。若aof文件小于該值叔遂,即使當前文件的增量比例達到auto-aof-rewrite-percentage的配置值他炊,也不會觸發(fā)自動rewrite。即這兩個配置項同時滿足時已艰,才會觸發(fā)rewrite
auto-aof-rewrite-min-size 64mb
# Redis啟動加載aof文件痊末,如果發(fā)現(xiàn)末尾命令不完整則自動截掉,成功加載前面正確的數(shù)據(jù)哩掺。如果設(shè)置為no凿叠,遇到此類情況,Redis啟動失敗疮丛,用redis-check-aof工具手工修復(fù)
aof-load-truncated yes
# *********************************Lua*********************************
# 一個Lua腳本最長的執(zhí)行時間幔嫂,單位為毫秒,如果為0或負數(shù)表示無限執(zhí)行時間誊薄,默認為5000
lua-time-limit 5000
# *********************************集群配置*********************************
# 打開redis集群
# cluster-enabled yes
# cluster配置文件(啟動自動生成)
# cluster-config-file nodes-6379.conf
#節(jié)點互連超時時間
# cluster-node-timeout 15000
# 如果設(shè)置成0,則無論從節(jié)點與主節(jié)點失聯(lián)多久锰茉,從節(jié)點都會嘗試升級成主節(jié)點
# 如果設(shè)置成正數(shù)呢蔫,則cluster-node-timeout乘以cluster-slave-validity-factor得到的時間,是從節(jié)點與主節(jié)點失聯(lián)后飒筑,此從節(jié)點數(shù)據(jù)有效的最長時間片吊,超過這個時間,從節(jié)點不會啟動故障遷移
# 假設(shè)cluster-node-timeout=5协屡,cluster-slave-validity-factor=10俏脊,則如果從節(jié)點跟主節(jié)點失聯(lián)超過50秒,此從節(jié)點不能成為主節(jié)點
# 注意肤晓,如果此參數(shù)配置為非0爷贫,將可能出現(xiàn)由于某主節(jié)點失聯(lián)卻沒有從節(jié)點能頂上的情況认然,從而導(dǎo)致集群不能正常工作,在這種情況下漫萄,只有等到原來的主節(jié)點重新回歸到集群卷员,集群才恢復(fù)運作
# cluster-slave-validity-factor 10
# 主節(jié)點需要的最小從節(jié)點數(shù),只有達到這個數(shù)腾务,主節(jié)點失敗時毕骡,它從節(jié)點才會進行遷移
# cluster-migration-barrier 1
# 在部分key所在的節(jié)點不可用時,如果此參數(shù)設(shè)置為”yes”(默認值), 則整個集群停止接受操作岩瘦;如果此參數(shù)設(shè)置為”no”未巫,則集群依然為可達節(jié)點上的key提供讀操作
# cluster-require-full-coverage yes
# *********************************慢日志部分*********************************
# slowlog-log-slower-than表示slowlog的劃定界限,只有query執(zhí)行時間大于slowlog-log-slower-than的才會定義成慢查詢启昧,才會被slowlog進行記錄叙凡。slowlog-log-slower-than設(shè)置的單位是微妙,默認是10000微妙箫津,也就是10ms
slowlog-log-slower-than 10000
# slowlog-max-len表示慢查詢最大的條數(shù)狭姨,當slowlog超過設(shè)定的最大值后,會將最早的slowlog刪除苏遥,是個FIFO隊列
slowlog-max-len 128
# 服務(wù)端內(nèi)部的延遲監(jiān)控稍微麻煩一些饼拍,因為延遲記錄的默認閾值是0。盡管空間和時間耗費很小田炭,Redis為了高性能還是默認關(guān)閉了它师抄。所以首先我們要開啟它,設(shè)置一個合理的閾值教硫,例如下面命令中設(shè)置的100ms:
latency-monitor-threshold 0
# keyspace事件通知
notify-keyspace-events ""
# *********************************高階配置*********************************
# 當hash中包含超過指定元素個數(shù)并且最大的元素沒有超過臨界時叨吮,hash將以一種特殊的編碼方式(大大減少內(nèi)存使用)來存儲,這里可以設(shè)置這兩個臨界值
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# list數(shù)據(jù)類型多少節(jié)點以下會采用去指針的緊湊存儲格式
# list數(shù)據(jù)類型節(jié)點值大小小于多少字節(jié)會采用緊湊存儲格式
list-max-ziplist-entries 512
list-max-ziplist-value 64
# set數(shù)據(jù)類型內(nèi)部數(shù)據(jù)如果全部是數(shù)值型瞬矩,且包含多少節(jié)點以下會采用緊湊格式存儲
set-max-intset-entries 512
# zsort數(shù)據(jù)類型多少節(jié)點以下會采用去指針的緊湊存儲格式
# zsort數(shù)據(jù)類型節(jié)點值大小小于多少字節(jié)會采用緊湊存儲格式
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# HyperLogLog 稀疏表示字節(jié)限制茶鉴,這個限制包含了16個字節(jié)的頭部,當一個HyperLogLog使用sparse representation超過了這個顯示景用,它就會轉(zhuǎn)換到dense representation上
hll-sparse-max-bytes 3000
# Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash涵叮,可以降低內(nèi)存的使用
# 當你的使用場景中,有非常嚴格的實時性需要伞插,不能夠接受Redis時不時的對請求有2毫秒的延遲的話割粮,把這項配置為no。
# 如果沒有這么嚴格的實時性要求媚污,可以設(shè)置為yes舀瓢,以便能夠盡可能快的釋放內(nèi)存
activerehashing yes
# 客戶端buffer控制。在客戶端與server進行的交互中,每個連接都會與一個buffer關(guān)聯(lián)耗美,此buffer用來隊列化等待被client接受的響應(yīng)信息京髓。如果client不能及時的消費響應(yīng)信息航缀,那么buffer將會被不斷積壓而給server帶來內(nèi)存壓力。如果buffer中積壓的數(shù)據(jù)達到閥值朵锣,將會導(dǎo)致連接被關(guān)閉谬盐,buffer被移除
# 指令格式:client-output-buffer-limit <class> <hard> <soft> <seconds>,其中hard表示buffer最大值诚些,一旦達到閥值將立即關(guān)閉連接
# soft表示"容忍值"飞傀,它和seconds配合,如果buffer值超過soft且持續(xù)時間達到了seconds,也將立即關(guān)閉連接诬烹,如果超過了soft但是在seconds之后砸烦,buffer數(shù)據(jù)小于了soft,連接將會被保留
# 其中hard和soft都設(shè)置為0,則表示禁用buffer控制.通常hard值大于soft
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# redis內(nèi)部調(diào)度(進行關(guān)閉timeout的客戶端,刪除過期key等等)頻率
hz 10
# aof rewrite過程中,是否采取增量文件同步策略,默認為“yes”绞吁。 rewrite過程中,每32M數(shù)據(jù)進行一次文件同步,這樣可以減少aof大文件寫入對磁盤的操作次數(shù)
aof-rewrite-incremental-fsync yes
redis的主從設(shè)置幢痘、集群搭建、性能監(jiān)控以及安全設(shè)置等都需要通過配置來進行管理家破,配置文件的重要性不言而喻颜说。后邊的實戰(zhàn)將詳細講解這些方面的內(nèi)容,敬請期待~