# include /path/to/local.conf
# include /path/to/other.conf
主從配置檔案引用。
1 daemonize no
是否背景運作,預設redis不是在背景運作的,一般啟動會改為yes。
2 pidfile var/lib/redis/6379/run/redis.pid
程序檔案及路徑設定。當redis在背景運作的時候,redis預設會把pid檔案放在/var/run/redis.pid,你可以配置到其他位址。當一台server同時運作多個redis執行個體時,需要指定不同的pid檔案和端口。
3 port
端口設定,預設6379。
4 #bind 127.0.0.1
指定redis隻接收來自于該ip位址的請求,如果不進行設定,那麼将處理所有請求,在生産環境中為了安全最好設定該項。一般啟用。
5 timeout 0
設定用戶端連接配接時的逾時時間,機關為秒。當用戶端在這段時間内沒有發出任何指令,那麼關閉該連接配接。預設為0表示禁用。
6 tcp-keepalive 0
指定tcp連接配接是否為長連接配接。“偵探”信号由server端維護。預設為0表示禁用。
7 loglevel notice
log等級。等級分為debug, verbose, notice和warning。預設一般開啟notice。
8 logfile “var/lib/redis/6379/log/redis.log”
配置log檔案位址,預設使用标準輸出,即列印在指令行終端的視窗上,修改為日志檔案目錄。
9 databases 16
設定資料庫的個數,可以使用select指令來切換db(cluster模式下此項設定無效,select指令無效,叢集預設db0)。預設使用的資料庫是0号庫。預設16個庫
10
save 900 1
save 300 10
save 60 10000
儲存資料快照的頻率,即将資料持久化到dump.rdb檔案中的頻度。根據時間次元及操作數次元來觸發快照持久化。
預設設定,意思是:
if(在60 秒之内有10000 個keys發生變化時){
進行鏡像備份
}else if(在300 秒之内有10 個keys發生了變化){
}else if(在900 秒之内有1 個keys發生了變化){
}
11 stop-writes-on-bgsave-error yes
當持久化出現錯誤時,是否依然繼續進行工作。是否停止用戶端write請求。預設為“yes”。redis作者考慮當持久化異常出現時,停止寫請求,異常才會被人為的關注到。如果系統做了其他方面的監控可以把這個功能關閉。如果設為“no”,就算本次快照儲存失敗,下次儲存不受影響,也不會影響redis本身讀寫狀态。但資料隻能恢複到最近一次成功的節點(快照原理)。
12 rdbcompression yes
在進行資料鏡像備份時,是否壓縮rdb檔案,預設為yes。壓縮需要額外的cpu開支。
13 rdbchecksum yes
對rbd檔案進行crc64校驗,利于保證檔案正确性和完整性。該功能使持久化檔案格式更難被污染,但是讀寫rdb檔案時會損失大約10%性能。
14 dbfilename dump.rdb
鏡像備份檔案的檔案名,預設為dump.rdb
15 dir var/lib/redis/6379/persistent/
資料庫鏡像備份的檔案存放置的路徑。這裡的路徑跟檔案名要分開配置是因為redis在進行備份時,先會将目前資料庫的狀态寫入到一個臨時檔案中,等備份完成時,再把該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。
16 # slaveof <masterip> <masterport>
設定該資料庫為其他資料庫的從資料庫。
17 masterauth
當主資料庫連接配接密碼驗證。
18 slave-serve-stale-data yes
當主master伺服器挂機或主從複制在進行時,是否依然可以允許客戶通路可能過期的資料。在"yes"情況下,slave繼續向用戶端提供隻讀服務,有可能此時的資料已經過期;在"no"情況下,任何向此server發送的資料請求服務(包括用戶端和此server的slave)都将被告知"error"
19 slave-read-only yes
slave是否隻讀,一般設定為yes
20 #repl-ping-slave-period 10
slave向master發送ping消息的間隔(秒),master傳回pong,keep alive功能。
21 #repl-timeout 60
slave與master通訊逾時時間,預設60秒。
22 repl-disable-tcp-nodelay no
slave與master的連接配接是否禁用tcp nodelay。預設no
如果選yes,redis會使用較小的tcp包傳輸資料到slave。該方式使用較小的網絡帶寬,slave同步到資料會有一定的延時。
如果選no,表示開啟tcp nodelay選項,slave收到同步資料較快,使用網絡帶寬較大。
23 repl-backlog-size 32mb
增量緩存檔案大小。防止slave閃短觸發全同步,根據實際redis用量可以調整大小。
24 slave-priority 100
slave權重值。當觸發主從切換時,會從slave清單中找到權重值最低(>0)的slave提升為master。如果權重值是0,表示此slave為觀察者不參與master選舉。
25 #requirepass foobared
是否需要安全驗證。絕大部分公司都不使用密碼。由于redis速度相當快,很容易被暴力破解。
25 # rename-command config 3ed984507a5dcd722aeade310065ce5d (方式:md5('config^!'))
重命名指令,對于一些與"server"控制有關的指令,可能不希望遠端用戶端(非管理者使用者)連結随意使用,那麼就可以把這些指令重命名為"難以閱讀"的其他字元串
26 # maxclients 10000
限制同時連接配接的客戶數量。當連接配接數超過這個值時,redis 将不再接收其他連接配接請求,用戶端嘗試連接配接時将收到error資訊。預設值為10000,大小應根據應用及伺服器實際情況調整。
27 maxcmemory 10000
reids最大使用記憶體值。
記憶體值大小應考慮單機最大記憶體,slave最大記憶體,及觸發持久化是記憶體緩沖區。
redis-cache所能使用的最大記憶體(bytes),預設為0,表示"無限制",最終由os實體記憶體大小決定(如果實體記憶體不足,有可能會使用swap)。此值盡量不要超過機器的實體記憶體尺寸,從性能和實施的角度考慮,可以為實體記憶體3/4。此配置需要和"maxmemory-policy"配合使用,當redis中記憶體資料達到maxmemory時,觸發"清除政策"。在"記憶體不足"時,任何write操作(比如set,lpush等)都會觸發"清除政策"的執行。在實際環境中,建議redis的所有實體機器的硬體配置保持一緻(記憶體一緻),同時確定master/slave中"maxmemory""policy"配置一緻。
當記憶體滿了的時候,如果還接收到set 指令,redis 将先嘗試剔除設定過expire 資訊的key,而不管該key 的過期時間還沒有到達。在删除時,
将按照過期時間進行删除,最早将要被過期的key
将最先被删除。如果帶有expire 資訊的key 都删光了,記憶體還不夠用,那麼将傳回錯誤。這樣,redis 将不再接收寫請求,隻接收get
請求。maxmemory 的設定比較适合于把redis 當作于類似memcached的緩存來使用。
28 # maxmemory-policy volatile-lru
記憶體不足"時,資料清除政策,預設為"volatile-lru"。
allkeys-lru ->對所有的資料,采用lru算法
volatile-random ->對"過期集合"中的資料采取"随即選取"算法,并移除選中的k-v,直到"記憶體足夠"為止. 如果如果"過期集合"中全部移除全部移除仍不能滿足,将oom
allkeys-random ->對所有的資料,采取"随機選取"算法,并移除選中的k-v,直到"記憶體足夠"為止
volatile-ttl ->對"過期集合"中的資料采取ttl算法(最小存活時間),移除即将過期的資料.
noeviction ->不做任何幹擾操作,直接傳回oom異常
另外,如果資料的過期不會對"應用系統"帶來異常,且系統中write操作比較密集,建議采取"allkeys-lru"
29 # maxmemory-samples 3
預設值3,上面lru和最小ttl政策并非嚴謹的政策,而是大約估算的方式,是以可以選擇取樣值以便檢查
29 appendonly no
預設情況下,redis
會在背景異步的把資料庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁。是以redis
提供了另外一種更加高效的資料庫備份及災難恢複方式。開啟append only 模式之後,redis
會把所接收到的每一次寫操作請求都追加到appendonly.aof 檔案中,當redis
重新啟動時,會從該檔案恢複出之前的狀态。但是這樣會造成appendonly.aof 檔案過大,是以redis 還支援了bgrewriteaof
指令,對appendonly.aof
進行重新整理。如果不經常進行資料遷移操作,推薦生産環境下的做法為關閉鏡像,開啟appendonly.aof,同時可以選擇在通路較少的時間每天對appendonly.aof
進行重寫一次。
另外,對master機器,主要負責寫,建議使用aof,對于slave,主要負責讀,挑選出1-2台開啟aof,其餘的建議關閉
31 appendfilename appdonly.aof
aof檔案名
31
# appendfsync always
appendfsync everysec
# appendfsync no
設定對appendonly.aof 檔案進行同步的頻率。always 表示每次有寫操作都進行同步,everysec 表示對寫操作進行累積,每秒同步一次。no不主動fsync,由os自己來完成。這個需要根據實際業務場景進行配置
32 no-appendfsync-on-rewrite no
在aof rewrite期間,是否對aof新記錄的append暫緩使用檔案同步政策,主要考慮磁盤io開支和請求阻塞時間。預設為no,表示"不暫緩",新的aof記錄仍然會被立即同步
33 auto-aof-rewrite-percentage 100
當aof log增長超過指定比例時,重寫log file, 設定為0表示不自動重寫aof 日志,重寫是為了使aof體積保持最小,而確定儲存最完整的資料。
34 auto-aof-rewrite-min-size 64mb
觸發aof rewrite的最小檔案尺寸
35 lua-time-limit 5000
lua腳本運作的最大時間
36 slowlog-log-slower-than 10000
"慢記錄檔"記錄,機關:微秒(百萬分之一秒,1000 * 1000),如果操作時間超過此值,将會把command資訊"記錄"起來.(記憶體,非檔案)。其中"操作時間"不包括網絡io開支,隻包括請求達到server後進行"記憶體實施"的時間."0"表示記錄全部操作
37 slowlog-max-len 128
"慢記錄檔"保留的最大條數,"記錄"将會被隊列化,如果超過了此長度,舊記錄将會被移除。可以通過"slowlog <subcommand> args"檢視慢記錄的資訊(slowlog get 10,slowlog reset)
38
hash-max-ziplist-entries 512
hash類型的資料結構在編碼上可以使用ziplist和hashtable。ziplist的特點就是檔案存儲(以及記憶體存儲)所需的空間較小,在内容較小時,性能和hashtable幾乎一樣.是以redis對hash類型預設采取ziplist。如果hash中條目的條目個數或者value長度達到閥值,将會被重構為hashtable。
這個參數指的是ziplist中允許存儲的最大條目個數,,預設為512,建議為128
hash-max-ziplist-value 64
ziplist中允許條目value值最大位元組數,預設為64,建議為1024
39
list-max-ziplist-entries 512
list-max-ziplist-value 64
對于list類型,将會采取ziplist,linkedlist兩種編碼類型。解釋同上。
40 set-max-intset-entries 512
intset中允許儲存的最大條目個數,如果達到閥值,intset将會被重構為hashtable
41
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zset為有序集合,有2中編碼類型:ziplist,skiplist。因為"排序"将會消耗額外的性能,當zset中資料較多時,将會被重構為skiplist。
42 activerehashing yes
是否開啟頂層資料結構的rehash功能,如果記憶體允許,請開啟。rehash能夠很大程度上提高k-v存取的效率
43
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
用戶端buffer控制。在用戶端與server進行的互動中,每個連接配接都會與一個buffer關聯,此buffer用來隊列化等待被client接受的響應資訊。如果client不能及時的消費響應資訊,那麼buffer将會被不斷積壓而給server帶來記憶體壓力.如果buffer中積壓的資料達到閥值,将會導緻連接配接被關閉,buffer被移除。
buffer控制類型包括:normal -> 普通連接配接;slave ->與slave之間的連接配接;pubsub ->pub/sub類型連接配接,此類型的連接配接,往往會産生此種問題;因為pub端會密集的釋出消息,但是sub端可能消費不足.
指令格式:client-output-buffer-limit <class> <hard> <soft> <seconds>",其中hard表示buffer最大值,一旦達到閥值将立即關閉連接配接;
soft表示"容忍值",它和seconds配合,如果buffer值超過soft且持續時間達到了seconds,也将立即關閉連接配接,如果超過了soft但是在seconds之後,buffer資料小于了soft,連接配接将會被保留.
其中hard和soft都設定為0,則表示禁用buffer控制.通常hard值大于soft.
44 hz 10
redis server執行背景任務的頻率,預設為10,此值越大表示redis對"間歇性task"的執行次數越頻繁(次數/秒)。"間歇性task"包括"過期集合"檢測、關閉"空閑逾時"的連接配接等,此值必須大于0且小于500。此值過小就意味着更多的cpu周期消耗,背景task被輪詢的次數更頻繁。此值過大意味着"記憶體敏感"性較差。建議采用預設值。
45
額外載入配置檔案。