Redis啟動的時候,可以指定配置文件,如下:
1
|
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis .conf |
Redis.conf文件內(nèi)容詳細說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# 默認redis不是以后臺進程的方式啟動,如果需要在后臺運行,需要將這個值設(shè)置成yes # 以后臺方式啟動的時候,redis會寫入默認的進程文件/var/run/redis.pid daemonize yes # redis啟動的進程路徑 pidfile /var/run/redis .pid # 啟動進程端口號,這里最好不要使用默認的6379,容易被攻擊 port 7179 tcp-backlog 511 # 配置redis監(jiān)聽到的ip地址,可以是一個也可以多個 bind 127.0.0.110.254.3.42 # redis的sock路徑 unixsocket /tmp/redis .sock unixsocketperm 755 # 超時時間 timeout 0 #指定TCP連接是否為長連接,"偵探"信號有server端維護。默認為0.表示禁用 tcp-keepalive 0 # 日志級別,log 等級分為4 級,debug,verbose,notice, 和warning。生產(chǎn)環(huán)境下一般開啟notice loglevel notice # 日志文件地址 logfile "/usr/local/redis/logs/redis.log" # 設(shè)置數(shù)據(jù)庫的個數(shù),可以使用SELECT 命令來切換數(shù)據(jù)庫。默認使用的數(shù)據(jù)庫是0號庫。默認16個庫 databases 16 #RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內(nèi)存中的所有數(shù)據(jù)進行快照并存儲在硬盤上。進行快照的條件可以由用戶在配置文件中自定義,由兩個參數(shù)構(gòu)成:時間和改動的鍵的個數(shù)。當在指定的時間內(nèi)被更改的鍵的個數(shù)大于指定的數(shù)值時就會進行快照。RDB是Redis默認采用的持久化方式,在配置文件中已經(jīng)預(yù)置了3個條件: save 900 1 # 900秒內(nèi)有至少1個鍵被更改則進行快照 save 300 10 # 300秒內(nèi)有至少10個鍵被更改則進行快照 save 60 10000 # 60秒內(nèi)有至少10000個鍵被更改則進行快照 # 持久化數(shù)據(jù)存儲目錄 dir /usr/local/redis/data #當持久化出現(xiàn)錯誤時,是否依然繼續(xù)進行工作,是否終止所有的客戶端write請求。默認設(shè)置"yes"表示終止,一旦snapshot數(shù)據(jù)保存故障,那么此server為只讀服務(wù)。如果為"no",那么此次snapshot將失敗,但下一次snapshot不會受到影響,不過如果出現(xiàn)故障,數(shù)據(jù)只能恢復(fù)到"最近一個成功點" stop-writes-on-bgsave-errorno #在進行數(shù)據(jù)鏡像備份時,是否啟用rdb文件壓縮手段,默認為yes。壓縮可能需要額外的cpu開支,不過這能夠有效的減小rdb文件的大,有利于存儲/備份/傳輸/數(shù)據(jù)恢復(fù) rdbcompression yes #checksum文件檢測,讀取寫入的時候rdb文件checksum,會損失一些性能 rdbchecksum yes #鏡像備份文件的文件名,默認為dump.rdb dbfilename dump.rdb #當主master服務(wù)器掛機或主從復(fù)制在進行時,是否依然可以允許客戶訪問可能過期的數(shù)據(jù)。在"yes"情況下,slave繼續(xù)向客戶端提供只讀服務(wù),有可能此時的數(shù)據(jù)已經(jīng)過期;在"no"情況下,任何向此server發(fā)送的數(shù)據(jù)請求服務(wù)(包括客戶端和此server的slave)都將被告知"error" slave-serve-stale-datayes # 如果是slave庫,只允許只讀,不允許修改 slave- read -only yes #slave與master的連接,是否禁用TCPnodelay選項。"yes"表示禁用,那么socket通訊中數(shù)據(jù)將會以packet方式發(fā)送(packet大小受到socket buffer限制)。可以提高socket通訊的效率(tcp交互次數(shù)),但是小數(shù)據(jù)將會被buffer,不會被立即發(fā)送,對于接受者可能存在延遲。"no"表示開啟tcp nodelay選項,任何數(shù)據(jù)都會被立即發(fā)送,及時性較好,但是效率較低,建議設(shè)為no,在高并發(fā)或者主從有大量操作的情況下,設(shè)置為yes repl-disable-tcp-nodelayno #適用Sentinel模塊(unstable,M-S集群管理和監(jiān)控),需要額外的配置文件支持。slave的權(quán)重值,默認100.當master失效后,Sentinel將會從slave列表中找到權(quán)重值最低(>0)的slave,并提升為master。如果權(quán)重值為0,表示此slave為"觀察者",不參與master選舉 slave-priority 100 #限制同時連接的客戶數(shù)量。當連接數(shù)超過這個值時,redis 將不再接收其他連接請求,客戶端嘗試連接時將收到error 信息。默認為10000,要考慮系統(tǒng)文件描述符限制,不宜過大,浪費文件描述符,具體多少根據(jù)具體情況而定 maxclients 10000 #redis-cache所能使用的最大內(nèi)存(bytes),默認為0,表示"無限制",最終由OS物理內(nèi)存大小決定(如果物理內(nèi)存不足,有可能會使用swap)。此值盡量不要超過機器的物理內(nèi)存尺寸,從性能和實施的角度考慮,可以為物理內(nèi)存3/4。此配置需要和"maxmemory-policy"配合使用,當redis中內(nèi)存數(shù)據(jù)達到maxmemory時,觸發(fā)"清除策略"。在"內(nèi)存不足"時,任何write操作(比如set,lpush等)都會觸發(fā)"清除策略"的執(zhí)行。在實際環(huán)境中,建議redis的所有物理機器的硬件配置保持一致(內(nèi)存一致),同時確保master/slave中"maxmemory""policy"配置一致。 maxmemory 0 #內(nèi)存過期策略,內(nèi)存不足"時,數(shù)據(jù)清除策略,默認為"volatile-lru"。 #volatile-lru ->對"過期集合"中的數(shù)據(jù)采取LRU(近期最少使用)算法.如果對key使用"expire"指令指定了過期時間,那么此key將會被添加到"過期集合"中。將已經(jīng)過期/LRU的數(shù)據(jù)優(yōu)先移除.如果"過期集合"中全部移除仍不能滿足內(nèi)存需求,將OOM. #allkeys-lru ->對所有的數(shù)據(jù),采用LRU算法 #volatile-random ->對"過期集合"中的數(shù)據(jù)采取"隨即選取"算法,并移除選中的K-V,直到"內(nèi)存足夠"為止. 如果如果"過期集合"中全部移除全部移除仍不能滿足,將OOM #allkeys-random ->對所有的數(shù)據(jù),采取"隨機選取"算法,并移除選中的K-V,直到"內(nèi)存足夠"為止 #volatile-ttl ->對"過期集合"中的數(shù)據(jù)采取TTL算法(最小存活時間),移除即將過期的數(shù)據(jù). #noeviction ->不做任何干擾操作,直接返回OOM異常 #另外,如果數(shù)據(jù)的過期不會對"應(yīng)用系統(tǒng)"帶來異常,且系統(tǒng)中write操作比較密集,建議采取"allkeys-lru" maxmemory-policyvolatile-lru # 默認值5,上面LRU和最小TTL策略并非嚴謹?shù)牟呗裕谴蠹s估算的方式,因此可以選擇取樣值以便檢查 maxmemory-samples 5 #默認情況下,redis 會在后臺異步的把數(shù)據(jù)庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁。所以redis 提供了另外一種更加高效的數(shù)據(jù)庫備份及災(zāi)難恢復(fù)方式。開啟append only 模式之后,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 文件中,當redis 重新啟動時,會從該文件恢復(fù)出之前的狀態(tài)。但是這樣會造成appendonly.aof 文件過大,所以redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行重新整理。如果不經(jīng)常進行數(shù)據(jù)遷移操作,推薦生產(chǎn)環(huán)境下的做法為關(guān)閉鏡像,開啟appendonly.aof,同時可以選擇在訪問較少的時間每天對appendonly.aof 進行重寫一次。 #另外,對master機器,主要負責寫,建議使用AOF,對于slave,主要負責讀,挑選出1-2臺開啟AOF,其余的建議關(guān)閉 appendonly yes #aof文件名字,默認為appendonly.aof appendfilename "appendonly.aof" # 設(shè)置對appendonly.aof 文件進行同步的頻率。always表示每次有寫操作都進行同步,everysec 表示對寫操作進行累積,每秒同步一次。no不主動fsync,由OS自己來完成。這個需要根據(jù)實際業(yè)務(wù)場景進行配置 appendfsync everysec # 在aof rewrite期間,是否對aof新記錄的append暫緩使用文件同步策略,主要考慮磁盤IO開支和請求阻塞時間。默認為no,表示"不暫緩",新的aof記錄仍然會被立即同步 no-appendfsync-on-rewriteno #當Aof log增長超過指定比例時,重寫logfile,設(shè)置為0表示不自動重寫Aof 日志,重寫是為了使aof體積保持最小,而確保保存最完整的數(shù)據(jù)。 auto-aof-rewrite-percentage100 #觸發(fā)aof rewrite的最小文件尺寸 auto-aof-rewrite-min-size64mb #lua腳本執(zhí)行的最大時間,單位毫秒 lua- time -limit 5000 #慢日志記錄,單位微妙,10000就是10毫秒值,如果操作時間超過此值,將會把command信息"記錄"起來.(內(nèi)存,非文件)。其中"操作時間"不包括網(wǎng)絡(luò)IO開支,只包括請求達到server后進行"內(nèi)存實施"的時間."0"表示記錄全部操作 slowlog-log-slower-than10000 #"慢操作日志"保留的最大條數(shù),"記錄"將會被隊列化,如果超過了此長度,舊記錄將會被移除。可以通過"SLOWLOG<subcommand> args"查看慢記錄的信息(SLOWLOG get 10,SLOWLOG reset) slowlog-max-len 128 notify-keyspace-events "" #hash類型的數(shù)據(jù)結(jié)構(gòu)在編碼上可以使用ziplist和hashtable。ziplist的特點就是文件存儲(以及內(nèi)存存儲)所需的空間較小,在內(nèi)容較小時,性能和hashtable幾乎一樣.因此redis對hash類型默認采取ziplist。如果hash中條目的條目個數(shù)或者value長度達到閥值,將會被重構(gòu)為hashtable。 #這個參數(shù)指的是ziplist中允許存儲的最大條目個數(shù),,默認為512,建議為128 hash -max-ziplist-entries512 #ziplist中允許條目value值最大字節(jié)數(shù),默認為64,建議為1024 hash -max-ziplist-value64 #同上 list-max-ziplist-entries512 list-max-ziplist-value64 #intset中允許保存的最大條目個數(shù),如果達到閥值,intset將會被重構(gòu)為hashtable set -max-intset-entries512 #zset為有序集合,有2中編碼類型:ziplist,skiplist。因為"排序"將會消耗額外的性能,當zset中數(shù)據(jù)較多時,將會被重構(gòu)為skiplist。 zset-max-ziplist-entries128 #zset中允許條目value值最大字節(jié)數(shù),默認為64,建議為1024 zset-max-ziplist-value64 #是否開啟頂層數(shù)據(jù)結(jié)構(gòu)的rehash功能,如果內(nèi)存允許,請開啟。rehash能夠很大程度上提高K-V存取的效率 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被移除。 #buffer控制類型包括:normal -> 普通連接;slave->與slave之間的連接;pubsub ->pub/sub類型連接,此類型的連接,往往會產(chǎn)生此種問題;因為pub端會密集的發(fā)布消息,但是sub端可能消費不足.指令格式: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-limitnormal 0 0 0 client-output-buffer-limitslave 256mb 64mb 60 client-output-buffer-limitpubsub 32mb 8mb 60 #Redis server執(zhí)行后臺任務(wù)的頻率,默認為10,此值越大表示redis對"間歇性task"的執(zhí)行次數(shù)越頻繁(次數(shù)/秒)。"間歇性task"包括"過期集合"檢測、關(guān)閉"空閑超時"的連接等,此值必須大于0且小于500。此值過小就意味著更多的cpu周期消耗,后臺task被輪詢的次數(shù)更頻繁。此值過大意味著"內(nèi)存敏感"性較差。建議采用默認值。 hz 10 #當一個child在重寫AOF文件的時候,如果aof-rewrite-incremental-fsync值為yes生效,那么這個文件會以每次32M數(shù)據(jù)的來被同步,這大量新增提交到磁盤是有用的,并且能避免高峰延遲。 aof-rewrite-incremental-fsyncyes #額外載入配置文件 # include /path/to/local.conf # include /path/to/other.conf |