Redis啟動的時候,可以指定配置文件,如下:
1
|
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis .conf |
Redis.conf文件內容詳細說明:
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不是以后臺進程的方式啟動,如果需要在后臺運行,需要將這個值設置成yes # 以后臺方式啟動的時候,redis會寫入默認的進程文件/var/run/redis.pid daemonize yes # redis啟動的進程路徑 pidfile /var/run/redis .pid # 啟動進程端口號,這里最好不要使用默認的6379,容易被攻擊 port 7179 tcp-backlog 511 # 配置redis監聽到的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。生產環境下一般開啟notice loglevel notice # 日志文件地址 logfile "/usr/local/redis/logs/redis.log" # 設置數據庫的個數,可以使用SELECT 命令來切換數據庫。默認使用的數據庫是0號庫。默認16個庫 databases 16 #RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的所有數據進行快照并存儲在硬盤上。進行快照的條件可以由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大于指定的數值時就會進行快照。RDB是Redis默認采用的持久化方式,在配置文件中已經預置了3個條件: save 900 1 # 900秒內有至少1個鍵被更改則進行快照 save 300 10 # 300秒內有至少10個鍵被更改則進行快照 save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照 # 持久化數據存儲目錄 dir /usr/local/redis/data #當持久化出現錯誤時,是否依然繼續進行工作,是否終止所有的客戶端write請求。默認設置"yes"表示終止,一旦snapshot數據保存故障,那么此server為只讀服務。如果為"no",那么此次snapshot將失敗,但下一次snapshot不會受到影響,不過如果出現故障,數據只能恢復到"最近一個成功點" stop-writes-on-bgsave-errorno #在進行數據鏡像備份時,是否啟用rdb文件壓縮手段,默認為yes。壓縮可能需要額外的cpu開支,不過這能夠有效的減小rdb文件的大,有利于存儲/備份/傳輸/數據恢復 rdbcompression yes #checksum文件檢測,讀取寫入的時候rdb文件checksum,會損失一些性能 rdbchecksum yes #鏡像備份文件的文件名,默認為dump.rdb dbfilename dump.rdb #當主master服務器掛機或主從復制在進行時,是否依然可以允許客戶訪問可能過期的數據。在"yes"情況下,slave繼續向客戶端提供只讀服務,有可能此時的數據已經過期;在"no"情況下,任何向此server發送的數據請求服務(包括客戶端和此server的slave)都將被告知"error" slave-serve-stale-datayes # 如果是slave庫,只允許只讀,不允許修改 slave- read -only yes #slave與master的連接,是否禁用TCPnodelay選項。"yes"表示禁用,那么socket通訊中數據將會以packet方式發送(packet大小受到socket buffer限制)。可以提高socket通訊的效率(tcp交互次數),但是小數據將會被buffer,不會被立即發送,對于接受者可能存在延遲。"no"表示開啟tcp nodelay選項,任何數據都會被立即發送,及時性較好,但是效率較低,建議設為no,在高并發或者主從有大量操作的情況下,設置為yes repl-disable-tcp-nodelayno #適用Sentinel模塊(unstable,M-S集群管理和監控),需要額外的配置文件支持。slave的權重值,默認100.當master失效后,Sentinel將會從slave列表中找到權重值最低(>0)的slave,并提升為master。如果權重值為0,表示此slave為"觀察者",不參與master選舉 slave-priority 100 #限制同時連接的客戶數量。當連接數超過這個值時,redis 將不再接收其他連接請求,客戶端嘗試連接時將收到error 信息。默認為10000,要考慮系統文件描述符限制,不宜過大,浪費文件描述符,具體多少根據具體情況而定 maxclients 10000 #redis-cache所能使用的最大內存(bytes),默認為0,表示"無限制",最終由OS物理內存大小決定(如果物理內存不足,有可能會使用swap)。此值盡量不要超過機器的物理內存尺寸,從性能和實施的角度考慮,可以為物理內存3/4。此配置需要和"maxmemory-policy"配合使用,當redis中內存數據達到maxmemory時,觸發"清除策略"。在"內存不足"時,任何write操作(比如set,lpush等)都會觸發"清除策略"的執行。在實際環境中,建議redis的所有物理機器的硬件配置保持一致(內存一致),同時確保master/slave中"maxmemory""policy"配置一致。 maxmemory 0 #內存過期策略,內存不足"時,數據清除策略,默認為"volatile-lru"。 #volatile-lru ->對"過期集合"中的數據采取LRU(近期最少使用)算法.如果對key使用"expire"指令指定了過期時間,那么此key將會被添加到"過期集合"中。將已經過期/LRU的數據優先移除.如果"過期集合"中全部移除仍不能滿足內存需求,將OOM. #allkeys-lru ->對所有的數據,采用LRU算法 #volatile-random ->對"過期集合"中的數據采取"隨即選取"算法,并移除選中的K-V,直到"內存足夠"為止. 如果如果"過期集合"中全部移除全部移除仍不能滿足,將OOM #allkeys-random ->對所有的數據,采取"隨機選取"算法,并移除選中的K-V,直到"內存足夠"為止 #volatile-ttl ->對"過期集合"中的數據采取TTL算法(最小存活時間),移除即將過期的數據. #noeviction ->不做任何干擾操作,直接返回OOM異常 #另外,如果數據的過期不會對"應用系統"帶來異常,且系統中write操作比較密集,建議采取"allkeys-lru" maxmemory-policyvolatile-lru # 默認值5,上面LRU和最小TTL策略并非嚴謹的策略,而是大約估算的方式,因此可以選擇取樣值以便檢查 maxmemory-samples 5 #默認情況下,redis 會在后臺異步的把數據庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁。所以redis 提供了另外一種更加高效的數據庫備份及災難恢復方式。開啟append only 模式之后,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 文件中,當redis 重新啟動時,會從該文件恢復出之前的狀態。但是這樣會造成appendonly.aof 文件過大,所以redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行重新整理。如果不經常進行數據遷移操作,推薦生產環境下的做法為關閉鏡像,開啟appendonly.aof,同時可以選擇在訪問較少的時間每天對appendonly.aof 進行重寫一次。 #另外,對master機器,主要負責寫,建議使用AOF,對于slave,主要負責讀,挑選出1-2臺開啟AOF,其余的建議關閉 appendonly yes #aof文件名字,默認為appendonly.aof appendfilename "appendonly.aof" # 設置對appendonly.aof 文件進行同步的頻率。always表示每次有寫操作都進行同步,everysec 表示對寫操作進行累積,每秒同步一次。no不主動fsync,由OS自己來完成。這個需要根據實際業務場景進行配置 appendfsync everysec # 在aof rewrite期間,是否對aof新記錄的append暫緩使用文件同步策略,主要考慮磁盤IO開支和請求阻塞時間。默認為no,表示"不暫緩",新的aof記錄仍然會被立即同步 no-appendfsync-on-rewriteno #當Aof log增長超過指定比例時,重寫logfile,設置為0表示不自動重寫Aof 日志,重寫是為了使aof體積保持最小,而確保保存最完整的數據。 auto-aof-rewrite-percentage100 #觸發aof rewrite的最小文件尺寸 auto-aof-rewrite-min-size64mb #lua腳本執行的最大時間,單位毫秒 lua- time -limit 5000 #慢日志記錄,單位微妙,10000就是10毫秒值,如果操作時間超過此值,將會把command信息"記錄"起來.(內存,非文件)。其中"操作時間"不包括網絡IO開支,只包括請求達到server后進行"內存實施"的時間."0"表示記錄全部操作 slowlog-log-slower-than10000 #"慢操作日志"保留的最大條數,"記錄"將會被隊列化,如果超過了此長度,舊記錄將會被移除。可以通過"SLOWLOG<subcommand> args"查看慢記錄的信息(SLOWLOG get 10,SLOWLOG reset) slowlog-max-len 128 notify-keyspace-events "" #hash類型的數據結構在編碼上可以使用ziplist和hashtable。ziplist的特點就是文件存儲(以及內存存儲)所需的空間較小,在內容較小時,性能和hashtable幾乎一樣.因此redis對hash類型默認采取ziplist。如果hash中條目的條目個數或者value長度達到閥值,將會被重構為hashtable。 #這個參數指的是ziplist中允許存儲的最大條目個數,,默認為512,建議為128 hash -max-ziplist-entries512 #ziplist中允許條目value值最大字節數,默認為64,建議為1024 hash -max-ziplist-value64 #同上 list-max-ziplist-entries512 list-max-ziplist-value64 #intset中允許保存的最大條目個數,如果達到閥值,intset將會被重構為hashtable set -max-intset-entries512 #zset為有序集合,有2中編碼類型:ziplist,skiplist。因為"排序"將會消耗額外的性能,當zset中數據較多時,將會被重構為skiplist。 zset-max-ziplist-entries128 #zset中允許條目value值最大字節數,默認為64,建議為1024 zset-max-ziplist-value64 #是否開啟頂層數據結構的rehash功能,如果內存允許,請開啟。rehash能夠很大程度上提高K-V存取的效率 activerehashing yes #客戶端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. client-output-buffer-limitnormal 0 0 0 client-output-buffer-limitslave 256mb 64mb 60 client-output-buffer-limitpubsub 32mb 8mb 60 #Redis server執行后臺任務的頻率,默認為10,此值越大表示redis對"間歇性task"的執行次數越頻繁(次數/秒)。"間歇性task"包括"過期集合"檢測、關閉"空閑超時"的連接等,此值必須大于0且小于500。此值過小就意味著更多的cpu周期消耗,后臺task被輪詢的次數更頻繁。此值過大意味著"內存敏感"性較差。建議采用默認值。 hz 10 #當一個child在重寫AOF文件的時候,如果aof-rewrite-incremental-fsync值為yes生效,那么這個文件會以每次32M數據的來被同步,這大量新增提交到磁盤是有用的,并且能避免高峰延遲。 aof-rewrite-incremental-fsyncyes #額外載入配置文件 # include /path/to/local.conf # include /path/to/other.conf |