Redis3.2.6最新配置文件詳細中文說明,啥都不說直接看說明
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
|
############## # 指定配置文件: ################################## INCLUDES ##################################### # # 1 包含文件 # 如果想要使用到配置文件,Redis服務必須以配置文件的路徑作為第一個參數啟動。如:./redis-server /path/to/redis.conf # 單位說明:當需要指定內存大小時,可能會使用到不同的單位,如1k、5GB、4M等,這里給出其單位含義: # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes # s指定單位是大小寫不敏感。如1GB、1gB、1Gb是一樣的。 # include使用: # 用于include一個或多個配置文件。 # 當需要在一個標準的通用配置模板上進行一些個性化定制,則可以使用include 關鍵字來include這些個性化配置文件。 # 注意:雖然admin 或Redis Sentinel下執行的“CONFIG REWRITE”命令(Redis 2.8 引入的命令)會重寫配置,但并不包含“include”關鍵字。也就是說“CONFIG REWRITE”覆蓋“include”相關內容。 # 由于redis以最后的配置作為直接配置,所以建議將include命令放置在配置文件的最前面以防止配置被覆蓋。 # 但是如果打算使用另外的配置文件來覆蓋當前文件的部分或全部配置,那么則可將include命令放置到該文件的末尾。 # Redis這里使用了最后生效原則,即最后被解析的配置將作為最后的配置。 # 格式如下: # include /path/to/local.conf # include /path/to/other.conf ############## # 網絡配置: # 對服務器網絡相關的參數進行一個配置。 ################################## NETWORK ##################################### # # 1 bind命令 # 我們知道,一臺服務器上可能有多個網絡接口,所以如果沒有使用bind指定接口,Redis將監聽該機器上的所有網絡接口的連接請求。 # 如果僅需要監聽一個或多個指定的接口,則可以使用“bind”命令來指定接口。 # 實例如下: # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # ~~~ WARNING ~~~ 如果運行Redis服務的機器直接暴漏在Internet中,那么綁定所有的接口是一件危險的事。因為這樣會將Redis服務暴漏給Internet中的每一個人。所以默認情況下,使用bind 127.0.0.1命令強制Redis監聽IPv4環回接口地址,也就是說Redis僅接受本機的客戶端請求。 # 服務器可以有一個網絡接口(通常表述為網卡),或者多個。假設某機器上有兩個網卡,分別為192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那么只有該網卡地址接受外部請求,如果不綁定,則兩個網卡口都接受請求。 # 如果需要進行外網訪問則需注銷該命令行。在配置文件中,“#”代表注釋。 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1 # 2 保護模式 # 保護模式是Redis提供的安全防護層。設立該層是為了避免網絡對未關閉Redis實例的隨意訪問。 # 該模式需要開啟,當: # 1) 沒有使用“bind”命令明確需要綁定的地址; # 2) 沒有為Redis配置密碼。 # 該模式啟動后,服務器僅能接受使用IPv4、IPv6環回地址(127.0.0.1或::1)和本地Socket的客戶端的連接請求。 # 默認情況下,保護模式是開啟的。建議只有在已明確待連接的客戶端無需授權或無需使用bind指定特定的接口時才關閉該模式。 # 使用如下: protected-mode yes # 3 端口 # 在指定的端口上進行監聽,默認是 6379。當端口設置為0時,Redis就不會在TCP socket上進行監聽。 # 使用如下: port 6379 # 4 TCP listen() backlog設置 # 在一個并發量高的環境中,需要指定一個比較大的backlog值來避免慢連接情況的發生。注意,linux內核會默認使用/proc/sys/net/core/somaxconn值來減小backlog實際值。因此為了獲得期望的值,需要確保增大 somaxconn 和 tcp_max_syn_backlog 這兩個值。 # 建議配置: tcp-backlog 511 # 5 Unix socket # 指定Unix socket路徑來進行連接監聽。默認是不指定,因此redis不會在Unix socket上進行監聽。 # 使用方法如下: # unixsocket /tmp/redis.sock # unixsocketperm 700 # 6 Client timeout # 當client在空閑N秒后,關閉該連接(0表示不處理空閑連接,默認方式) # 實例: timeout 0 # 7 TCP keepalive時間 # 當該值非零時,如果通信缺失,Redis會使用SO_KEEPALIVE發送TCP ACKs給客戶端。這樣做的好處有二: # 1)檢測已經死亡對端。(TCP關閉存在無法完成4次握手的情況,如斷電,斷網,數據丟失等等) # 2)保存已有連接的活性。 # 在Linux中,該指定時間是一次發送ACKs的時間片。對于其他內核系統,其時間片大小與內核配置有關。 # 一個比較合理的值是300 seconds。Redis 3.2.1版本之后默認指定該值為300 seconds。 # 實例如下: tcp-keepalive 300 ############## # 通用配置: # 對一些通用參數進行配置。 ################################# GENERAL ##################################### # # 1 daemon # 默認情況下,Redis并不是一個守護進程,如果需要將Redis設置成守護進程,則可以使用daemonize yes進行配置。注意:當Redis作為守護進程時, 其pid 文件為 /var/run/redis.pid。 # 使用如下: daemonize no # 2 supervision # Redis 3.2新增命令。如果需要在機器啟動(upstart模式 或systemd模式)時就啟動Redis服務器,可以通過該選項來配置Redis。 # 支持的模式: # supervised no – 無,不會與supervised tree進行交互 # supervised upstart – 將Redis服務器添加到SIGSTOP 模式中 # supervised systemd – 將READY=1 寫入 $NOTIFY_SOCKET # supervised auto – 根據環境變量UPSTART_JOB 或NOTIFY_SOCKET檢測upstart 還是 systemd # 注意,上述supervision方法(upstart或systemd)僅發出“程序已就緒”信號,不會繼續給supervisor返回ping回復。 # 默認是不開啟: supervised no # 3 pid文件 # 如果指定了pid文件,Redis會在啟動時寫該pid文件,在退出時刪除該文件。 # 當Redis服務器已守護進程啟動時,如果指定了配置文件,則直接使用,如果沒有指定,則創建/var/run/redis.pid作為配置文件。 # 使用如下: pidfile /var/run/redis_6379 .pid # 4 日志級別 # 指定服務器的verbosity級別。Redis提供四種級別: # debug —- 包含大量信息,用于開發和測試 # verbose —- 包含一些稀有的有用信息,但沒有debug級別混亂 # notice —- 適量提示信息,用于生產環境 # warning —- 只包含非常重要和關鍵的信息 # 默認是notice級別: loglevel notice # 5 日志文件名稱 # 指定日志文件名稱。指定為空時將輸出到標準輸出設備中。如果Redis以守護進程啟動,當日志文件名稱為空時,日志將會輸出到 /dev/null。 # 默認設置如下: logfile "" # 6 寫系統日志 # 6.1允許寫系統日志 # 將syslog-enabled設置為yes時, 允許將Redis服務日志記錄到系統日志中。此外,還 # 可以使用更多的日志參數來滿足特定要求。 # 實例如下: # syslog-enabled no # 6.2指定在系統日志身份 # 一旦enable寫入系統日志,可以指定服務在系統日志身份。實例如下: # syslog-ident redis # 6.3指定系統日志能力級別 # 系統日志級別必須是 LOCAL0 到 LOCAL7 之間(閉區間)的值。實例如下: # syslog-facility local0 # 7 數據庫數量 # 設置數據庫的數量。默認使用0號數據庫。可以在每一個連接上使用SELECT <dbid> 來指定另外的數據庫,但是這個值必須在 0到 ‘database'-1之間。 # 實例如下: databases 16 ################ # 快照配置: # Redis提供快照功能,記錄某一時刻數據庫中保存的數據。 ################################ SNAPSHOTTING ################################ # # 1 DB持久化 # 將DB數據保存到磁盤。格式為:save <seconds> <changes>。當在規定的時間內seconds,如果寫磁盤的次數超過了changes,則將DB數據保存到磁盤。如save 900 1表示在900秒內,如果對DB進行了至少一次寫操作,則將DB數據持久化到磁盤上。 # 注意,可以通過注銷所有save命令或將在所有save命令后追加save置空(save “”)命令來禁用save功能。使用示例: save 900 1 save 300 10 save 60 10000 # 2 bgsave-error # 默認情況下,在發生RDB快照或BGSAVE執行失敗的那一刻,Redishi執行接收寫請求。這會使用戶察覺(通常比較困難)到數據沒有正確的持久化到磁盤。否則有可能出現不被察覺的災難性后果。 # 當后臺BGSAVE程序可以再次開始工作時,Reidis會再次自動允許寫入。 # 如果已經對Server和服務器持久化建立了正確的監控,那么當你禁用該功能后,即使磁盤、持久化等出現問題,Redis也能繼續提供服務。 # 實例如下: stop-writes-on-bgsave-error yes # 3 rdbcompression # 默認情況下,在dump RDB文件時,Redis采用LZF(一種高效的壓縮算法)算法進行字符串對象數據的壓縮,其性能較高。雖然LZF算法會消耗部分CPU性能,但是其數據壓縮能夠較高,所以建議不要關閉: rdbcompression yes # 4 RDB文件名稱 # 該命令用于定義dump DB文件的文件名。格式如下: dbfilename dump.rdb # 5 工作目錄 # 指定RDB文件所在目錄。該目錄也是AOF文件所在目錄。注意,這里是指定一個目錄而不是文件名。默認是當前目錄,格式如下: dir ./ ################## # 復制配置: # Redis提供主從復制功能保證數據的可靠性。 ################################# REPLICATION ################################### # # 1 主從關系建立 # Redis主從復制。單機模式下,Redis支持使用slaveof命令從另一個Redis服務器的拷貝中來創建一個實例。集群模式下則使用cluster replicate <master-id>命令。Redis復制使用前須知: # 1)Redis復制是異步復制,但是可以配置連接的從節點數量。 # 2)當連接斷開,Redis從節點支持部分重同步(psync)功能來保證主從節點數據同步。 # 3)復制過程是一個自動化過程,無需人工干預。當出現網絡分區后,從節點會自動嘗試建立與主節點的連接,并嘗試同步。 # 建立主從連接的命令如下: # slaveof <masterip> <masterport> # 2 授權密碼 # 當主節點開啟密碼保護時(通過配置"requirepass" 命令),從節點必須在開始復制同步前進行授權操作,否則其請求不會被接受。 # 命令如下: # masterauth <master-password> # 注意,該命令只有在主節點開啟密碼保護時才生效。 # 3 從節點是否支持臟讀 # 當主從斷開連接或主從進行復制時,從節點對外擁有兩種策略: # 1)如果“slave-serve-stale-data”參數設置成“yes”(默認情況下),則從節點可以響應客戶端請求,盡管可能會恢復過期數據或空數據(如果主從第一次進行同步)。 # 2)如果“slave-serve-stale-data”參數設置成“no”,則從節點會對除INFO 和SLAVEOF之外的命令返回"SYNC with master in progress"信息。 # 默認設置如下: slave-serve-stale-data yes # 4 從節點是否支持寫入 # 指定從節點是否支持寫操作。當需要存儲一些臨時數據時,讓從節點支持寫操作很有用。這樣一來,就可以通過主從同步輕松的將已寫入從節點的數據刪除。但是,如果配置出錯,也會出現客戶端寫入出錯等問題。 # 注意,從Redis 2.6之后,從節點默認是只讀的。 # 提示,只讀的從服務器并不是設計給非信任的互聯網客戶端提供服務。這種模式的服務器設置只是一個用來防止對服務器實例進行誤操作的保護層。默認情況下,只讀從服務器能夠輸出管理員命令,如CONFIG、 DEBUG等。如果想限制只讀從節點輸出的管理型命令,可以通過'rename-command' 命令來隱藏這些管理員命令或危險命令。 # 提高它的安全性,使得她作為一個影子來執行管理或者危險的命令。默認設置如下: slave- read -only yes # 5 復制策略:有無磁盤 # 主從節點的數據同步策略有兩種:磁盤同步、套接字同步。 # ——————————————————- # WARNING: 無磁盤復制(DISKLESS REPLICATION I)當前仍處于實驗階段 # ——————————————————- # # 對于新連接的slaves或斷開重連的slaves將無法執行“部分同步”,需要進行一次完全同# 步。當進行完全同步時,主節點將傳播一個RDB文件給從節點。該RDB文件的傳播方式# 有兩種: # 1)基于磁盤:Redis主節點創建一個新進程將RDB文件寫到磁盤,然后將生成的RDB文件傳播給從節點。 # 2)無磁盤:Redis主節點創建一個新進程直接將RDB文件寫到slaves的套接字中,RDB文件無需落盤。 # 基于磁盤的復制,一旦RDB文件生成,多個slaves將排隊等待并可以共享該文件。而無磁盤復制一旦開始傳輸數據,新slaves到來后將會排隊等待。 # 在使用無磁盤復制時,主節點在開始傳輸同步數據前將根據配置的時間進行等待,從而實現多個從節點的并發傳輸。 # 在磁盤速度緩慢且網絡速度很快(高帶寬)時,無磁盤復制效率更高。默認情況下,無磁盤復制同步關閉。配置如下: repl-diskless- sync no # 6 無磁盤復制等待時間 # 無磁盤復制前,主節點需要等待的時間。該配置在啟用無磁盤復制時將生效。 # 由于一旦開啟一次數據傳輸,其余slaves將排隊等待,所以最好讓主節點等待一段時間,這樣主節點就可對多個slaves并發傳播數據。 # 等待的單位是秒(second),默認是5秒。一旦將其設置為0,主節點將會馬上開始數據傳輸。默認配置如下: repl-diskless- sync -delay 5 # 7 slaves定時向master發送PING的時間片 # 默認情況下,slaves每10秒向master發送一次PING消息。可以根據網絡等因素進行設置。該配置默認在配置文件中關閉: # repl-ping-slave-period 10 # 8 復制超時閾值 # 以下情境將使用到復制超時閾值: # 1) 從節點在執行SYNC期間,檢測塊文件傳輸超時 # 2) 從節點檢測主節點離線(data、pings) # 3) 主節點檢測從節點離線(REPLCONF ACK) # 必須要確保復制超時閾值(repl-timeout)大于slaves定時向master發送PING的時間片(repl-ping-slave-period),否則將總會檢測到復制超時(當slave發送PING的時間片大于復制超時閾值時,slave還未發送ping就會被定性為復制超時)。使用格式如下: # repl-timeout 60 # 9 TCP_NODELAY功能 # 執行完SYNC后,是否要禁用TCP_NODELAY。 # 當禁用該功能后,Redis會使用占用更少帶寬的小TCP包向從節點發送數據。但是這樣做將會增大從節點端數據傳輸延時。在Linux下禁用TCP_NODELAY功能將導致40 微秒的延遲。 # 當啟動該功能后,在進行復制時將會減少數據傳輸延遲,但是會占用更大的帶寬。 # 默認情況下,我們優先選擇低延遲,但是在高速網絡或主從節點存在多hops路徑時,建議禁用TCP_NODELAY功能。 # 默認開啟TCP_NODELAY功能。格式如下: repl-disable-tcp-nodelay no # 10 復制積壓緩沖區大小 # 設置復制積壓緩沖區(replication backlog)大小。當slaves斷開與節點連接后,Redis使用復制積壓緩沖區記錄需要未發送給slave的數據。當從節點重連后,僅需執行一次部分同步,將從節點缺失數據補全。 # 復制積壓緩沖區(replication backlog)越大,Redis可以支持的slave離線時間就越長。復制積壓緩沖區用于部分重同步。 # 復制緩沖區只有在有slave連接時才分配內存。沒有slave時,該內存會被釋放出來,默認大小為1m。格式如下: # repl-backlog-size 1mb # 11 復制積壓緩沖區釋放時間片 # 當主節點不再有新連接的從節點后,復制積壓緩沖區將會被釋放。為避免因從節點頻繁掉線后上線而頻繁的進行復制積壓緩沖區的釋放與申請,Redis提供復制積壓緩沖區釋放時間片(repl-backlog-ttl)參數,保證主節點在檢測到從節點掉線后的規定時間內不會釋放該緩沖區。 # 值為零時表示不會釋放該復制積壓緩沖區。 # 單位為秒,配置如下: # repl-backlog-ttl 3600 # 12 從節點優先級 # 使用整數表示從節點優先級。 # 當主節點無法正常工作后,Sentinel將使用該優先級在從節點中推選出新的主節點。 # 優先級對應的整數值越小,被推選成主節點的可能性更大。但是當優先級的值為零時表示該從節點不具備成為主節點的身份。 # 默認優先級為100。配置形式如下: slave-priority 100 # 13 從節點連接數及從節點延時設置 # 當主節點的已連接從節點數小于N且這些從節點延遲均大于M秒,該主節點將停止接收寫請求。 # 從節點處于“online”狀態,當且僅當延遲(通過計算距離上一次接收從節點的ping消息的時間間隔獲得)小于指定的閾值。 # 這個選項配置不是用來保證N個部分接收寫信息,而是為了在沒有足夠的從節點可用時,限制寫丟失。 # 如需要至少需要3個從節點并在10s內可用,則設置: # min-slaves-to-write 3 # min-slaves-max-lag 10 # 一旦對這兩個中的一個賦值為零,則該功能失效。 # 默認min-slaves-to-write 參數設置為0,即該功能默認不啟用。 # 14 從節點指定的IP和port # Redis主節點可以通過多種途徑顯示已連接從節點的IP和port。如Sentinel 可以使用“INFO replication”命令來發現從節點實例;Master可以使用“ROLE”命令顯示從節點IP和port信息等。 # slave獲取IP和port的方式是: # IP:自動檢測獲取。當從節點連接主節點時,通過檢查對應套接字地址獲取。 # Port:從節點在復制中和主節點握手時需要使用到port。通常情況下,port即為連接時的port。 # 但是,當發生端口轉發(port forwarding,轉發一個網絡端口從一個網絡節點到另一個網絡節點的行為)或使用NAT(Network Address Translation,網絡地址轉換)技術是,從節點需要被分配不同IP和port后才能被訪問。 # 接下來的兩個配置用來設置從節點的IP和port,用來告知主節點所指定的IP和port,這樣INFO和ROLE 才能繼續返回結果。 # 當需要重寫IP和port時,則無需配置該選項。 # 配置格式如下: # slave-announce-ip 5.5.5.5 # slave-announce-port 1234 ############## # 安全配置: # Redis提供一些安全策略,盡量保證訪問安全性。 ################################## SECURITY ################################### # # 1 認證密碼 # Server在處理客戶端命令前,該客戶端需要提供提供認證密碼。這在非可信網絡環境中很有用。 # 為減少后臺執行復雜度,這個選項一般都會被注釋掉。因為大多數用戶不需要授權。(如用戶使用自己的服務器) # Warning: 由于Redis執行高效,所以外部用戶每秒可以嘗試認證15w次。也就是說,為避免密碼被快送攻破,用戶需要使用一個極其復雜的密碼。 # 設置認證密碼格式如下: # requirepass foobared # 2 命令重命名 # 重命名命令。 # 在一個共享環境中有必要對危險命令進行重命令,從而避免危險命令的濫用、無用。 # 如給CONFIG命令重新設置一個難以猜測的命令,這樣這個命令就很難被普通用戶使用的,但仍能被內部工具使用。 # 如: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 當然,有時需要禁用一些命令。可以通過將命令置空實現: # rename-command CONFIG "" # 注意,一定要避免重命名那些寫AOF文件或傳輸數據給slaves的命令,否則將會導致各種難以預料的錯誤。 ########### # 限制配置: # 對一些參數范圍進行限定。 ################################### LIMITS #################################### # # 1 最大客戶端連接數 #設置某一時刻客戶端的并發連接數。默認情況下,限制上限是1w。但是,如果Redis服務器沒有配置進程文件limit,那么可允許連接的最大客戶端個數將被設置為當前文件限制的最小值32(Redis會保留一部分文件給內部用戶)。 # 一旦得到了連接上限,Redis將關閉所有新連接并發送錯誤“max number of clients reached”提示。連接上限配置格式如下: # maxclients 10000 # 2 最大可用內存 # 不要再內存超過指定限制時仍然使用內存。 # 當達到內存上限時,Redis會根據選定的過期鍵策略移除一些key。 # 如果根據過期鍵策略仍不能移除一些鍵或者過期鍵策略設置成“noeviction”(不啟用過期鍵策略),那么Redis會向如SET、LPUSH等使用內存的命令返回錯誤,向諸如GET等讀命令正常返回結果。 # 這個配置通常在將Redis當過LRU 緩存或對以設置硬性的內存上限的Redis很適用。 # WARNING: slaves的輸出緩沖區不在主節點的maxmemory計算中,所以設置的maxmemory不宜過大。如果過大,可能導致主機的剩余內存過小,從而不能預留足夠的內存用于創建slaves的輸出緩沖區。 # 簡言之,如果當前節點存在已連接的從節點,建立設置一個較小的maxmemory上限,這樣系統就可以有多余的RAM用與創建從節點輸出緩存。(當過期鍵策略設置成'noeviction'時,則沒有必要這么做) # 設置格式如下: # maxmemory <bytes> # 3 內存淘汰策略 # MAXMEMORY POLICY: 當達到maxmemory時,可以采用的內存淘汰策略。 # Redis提供五種內存淘汰策略: # volatile-lru:利用LRU算法移除過期keys。 # allkeys-lru:利用LRU算法移除keys。 # volatile-random:隨機移除過期keys。 # allkeys-random:隨機移除keys。 # volatile-ttl:按照最近過期時間來刪除(輔以TTL),移除即將過期的keys。 # noeviction:不移除任何key,只是返回一個寫錯誤。 # Note: 不管采用了上述何種淘汰策略,當沒有合適的鍵進行移除時,Redis仍會返回寫錯誤。 # 這些寫命令是: set setnx setex append # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby # getset mset msetnx exec sort # 默認內存淘汰策略是'noeviction'。 # 4 最大樣例檢測數 # LRU算法和最小TTL算法都不是精確算法,所以可以對其進行執行速度或精確度上的判定。 # 默認情況下,Redis會從五個鍵中選擇一個最近最久未使用的鍵進行淘汰。可以通過配置該選擇設置檢測基數。 # 一般情況下,五個檢測樣本可以獲得足夠好的結果。10個樣本的結果更接近LRU算法,但是會消耗更多的CPU。3個樣本可以獲得較高的執行速度但是不夠精確。 # 配置格式如下: # maxmemory-samples 5 ############## # AOF配置: # AOF持久化模式對應的一些配置。 ############################## APPEND ONLY MODE ############################### # # 1 是否開啟AOF持久化功能 # 默認情況下,Redis會異步將數據集快照到磁盤上。盡管這種模式對許多應用友好,但是當Redis進程崩潰或發生掉電時,幾分鐘內的寫信息將丟失(根據快照執行的粒度)。 # AOF作為一種可替換的持久化策略,能夠提供更好的耐久性。如使用默認的fsync策略,Redis僅會丟失1s的寫信息,當發生突發事件(服務器掉電、服務器進程崩潰但OS運行正常) # AOF持久化和RDB持久化可以同時開啟。如果在啟動Redis時已經存在AOF文件,則會直接加載AOF文件(考慮到AOF文件相比RDB文件有更好的耐久性)。 # 關于AOF的更多訊息見: http://redis.io/topics/persistence # 默認AOF關閉,配置如下: appendonly no # 2 指定AOF文件名稱 # 指定AOF文件名稱,默認是appendonly.aof。配置如下: appendfilename "appendonly.aof" # 3 fsync()系統函數調用頻率 # 調用fsync()系統函數用來告知OS將數據寫入磁盤,而不是在輸出緩沖區等待數據。有些OS將直接flush數據到磁盤,有些其他的OS僅會嘗試去flush。 # Redis支持三種fsync()調用模式: # no:不執行fsync,由OS決定flush數據的頻率。高效。Linux下默認是每30s執行一次flush。 # always:每寫入一次AOF就調用一次fsync。慢,最安全。 # everysec:每秒調用一次fsync。適中。 # 默認fsync的調用頻率是“everysec”,這種策略在執行速度和數據安全進行折中。 # 當可以容忍一定程度數據丟失并期望更高的性能時,可以使用“no”策略(由操作系統決定flush的頻率)。相反的,如果不能容忍數據丟失,可以使用“always”獲得更好的安全性,盡管執行更慢。 # 更多AOF信息可以參考: # http://antirez.com/post/redis-persistence-demystified.html # 在無法確定fsync調用頻率時,推薦使用“everysec”策略。 # 在開啟AOF持久化功能后,該配置才會生效。 # 配置設置如下: # appendfsync always appendfsync everysec # appendfsync no # 4 AOF rewrite與fsync # 當AOF執行fsync的策略是always和everysec時,如果此時有一個后臺進程(BGSAVE進程或AOF rewrite進程)正在執行大量的I/O操作到磁盤,在一些Linux系統中,執行fsync會造成較長的阻塞。當前對這種情況還沒有很好的解決策略,即使在不同的線程中執行fsync也會導致調用同步write(2)阻塞。 # 為了緩解上述問題,可以通過配置下述選項來避免在主線程調用fsync()時執行BGSAVE或 BGREWRITEAOF帶來的阻塞。 # 也就是說,默認情況下,當子進程執行BGSAVE或BGREWRITEAOF時,Redis的耐久性將默認轉變成"appendfsync none"。在實際的應用中就意味著在最壞的場景下將丟失30s的數據,即使配置了fsync調用頻率為always或everysec。(默認情況下,Linux每30s自動調用一次fsync將緩存數據flush到磁盤) # 如果當前應用已考慮延遲問題,則將該配置設置成“yes”。否則使用默認配置(“no”),這是從耐久性角度考慮的最安全的選擇。 no-appendfsync-on-rewrite no # 上述配置等價于appendfsync-on-rewrite(在rewrite時仍執行fsync) # 4 AOF rewrite觸發時機 # 設置AOF 重寫的觸發條件。 # 當AOF日志按照指定的比例增長時,可以通過調用BGREWRITEAOF執行自動的AOF rewrite。 # 工作原理:Redis通過對比上一次執行rewrite時AOF文件的大小與當前AOF文件大小(在重啟時將沒有上一次執行rewrite的記錄,這時將使用startup時的AOF文件大小),決定是否進行rewrite。 # 如果當前AOF對于上一次執行rewrite的AOF文件的增長比率大于指定的比率,將會觸發一次rewrite。 # 當然,還需指定一個AOF進行重寫的最小單位。這樣做可以避免增長比率已經達到要求,但對應的AOF仍很小的情況(這種情況下沒有必要進行rewrite)的發生。 # 如果想要關閉自動AOF rewrite功能,可將進行rewrite要求的增長比率設置0。 # 默認當AOF大于64MB且相比于上一次rewrite,AOF以擴充了兩倍時會觸發一次rewrite執行。默認配置如下: auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 5 AOF 文件不完整 # 在將AOF文件加載到內存時(重啟Redis),可能會出現AOF被截斷的情況。 # 如當Redis運行所在系統突然崩潰(當ext4文件系統在安裝時沒有配置成數據按序存儲),會出現AOF被截斷情況。 # 如果Redis程序發生崩潰或異常,但操作系統仍能正常工作,則不會出現AOF被截斷的情況。 # 出現AOF被截斷后,Redis要么直接退出并返回錯誤,要么加載被截斷AOF中盡可能多的數據(當前默認方式)。 # 可以通過aof-load-truncated選項進行配置 # 當aof-load-truncated設置成“yes”,Redis仍會加載一個被截斷的AOF文件,同時向用戶報告AOF文件被截斷。如果設置成“no”,Redis會直接返回錯誤并拒絕啟動,這時用戶需要使用"redis-check-aof"程序修復AOF,只有這樣才能重啟Server。 # 注意,如果AOF文件在執行一半時就出現問題,即使設置aof-load-truncated為 “yes”,Redis也會直接退出并返回錯誤。 # 這個配置僅在Redis嘗試從AOF文件讀更多數據但發現沒有足夠字計數存在時有意義。 # 默認開啟該功能。 aof-load-truncated yes ############# # LUA腳本處理: ################################ LUA SCRIPTING ############################### # # 1 Lua腳本執行超時閾值 # 設置Lua腳本執超時的時間上限,單位是毫秒,milliseconds。 # 當Lua腳本執行超時,Redis會記錄腳本執行之后的結果(超時后)并向查詢返回錯誤。 # 當一個長時腳本執行時間超過最大執行時間時,只有SCRIPT KILL和 SHUTDOWN NOSAVE 命令可用。停止這類腳本運行的第一個方法是調用一個非寫命令。第二種方法是shut down 這個server,如果已經發送了一個寫命令但用戶并不想等待腳本自然終止。 # 如果想不限制腳本的執行時間并且不需要返回warning,可以將該參數設置成0或負數。 # 默認配置如下: lua- time -limit 5000 ############### #Redis 集群配置: ################################ REDIS CLUSTER ############################### # # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # WARNING EXPERIMENTAL: 盡管當前Redis Cluster代碼已經穩定,但是為了將這部分代碼水準標記為“mature”, # 仍需要一批有分量的用戶將該功能應用到生產環境。即Redis Cluster功能仍需要生產實踐的考驗。 # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 1 啟動Redis集群功能 # 正常情況下,啟動的Redis實例為非集群模式。只有當節點配置成集群模式時才能成為集群節點。如需以集群模式啟動,取消下述配置的注釋即可: # cluster-enabled yes # 2 集群配置文件命令 # 每個集群節點都有一個集群配置文件。該文件不是用來讓用戶編輯,而是持久化集群信息。 # 該文件由集群節點創建并更新。每個Redis 集群節點都需要有唯一的集群配置文件。所以在同一系統創建的多個Redis實例需要確保不存在配置文件名相同的情況發生(這樣會導致集群配置文件重載)。 # 集群配置文件命令格式如下: # cluster-config-file nodes-6379.conf # 3 集群節點超時閾值 # 集群節點超時閾值用來作為節點不可達并被標記為失效狀態的超時上限,單位是毫秒(millisecond) # 大部分其他內部時間將其基本參考數。 # 設置方式如下: # cluster-node-timeout 15000 # 4 從節點可發起故障轉移的判定因子(slave-validity-factor) # 當主節點失效后,Redis避免讓存儲數據過舊的從節點發起故障轉移。 # 沒有簡單的方式可以直接準確判定從節點的”data age”,可以通過下面兩個方面的檢測實現: # 1) 如果有多個從節點可以發起故障轉移,可以讓他們交換信息以選出數據狀態最節點主節點的從節點。從節點可以通過offset進行排名并通過該排名延遲發起故障轉移的時機。 # 2) 每個獨立的從節點計算最近一次與主節點交互的時間。這里的交互可以是最近一次PING、最近一次接收到來自主節點的命令、與主節點斷開連接的時間(當復制鏈接已經down掉時)。如果最近一次與主節點的交互已經足夠久遠,那么這個從節點將放棄進行故障轉移。 # 在2)中的時間閾值可以由用戶設定。特別地,當從節點的最近一次與主節點的交互遠大于(node-timeout * slave-validity-factor) + repl-ping-slave-period 時,這個從節點將不會執行故障轉移。 # 例如假設node-timeout為30秒,slave-validity-factor參數為10,repl-ping-slave-period 為10秒,當從節點距離最近一次與主節點的交互時間大于310秒(30*10+10)時,該從節點不能進行故障轉移。 # 一個過大的從節點有效因子(slave-validity-factor)會允許存儲過舊數據的從節點進行故障轉移,而一個過小的從節點有效因子將會妨礙集群選擇從節點成為新的主節點。 # 所以合理的設置從節點有效因子很重要。 # 為了獲得最大的可用性,可以將從節點有效因子(slave-validity-factor)賦值為0。也就是說,從節點忽略距離最近一次與主節點交互的時間段,則是直接點嘗試發起故障轉移。(但是這種策略下,這些從節點仍會根據offset的排名來推遲發起故障轉移的時間) # 從節點有效因子(slave-validity-factor)值為0是唯一可以保證網絡分區消失后,集群仍繼續工作的值。 # 設置格式如下: # cluster-slave-validity-factor 10 # 5 從節點遷移屏蔽因子(cluster-migration-barrier) # Redis集群支持將從節點遷移到孤立主節點(orphaned masters),沒有可以工作從節點的主節點)。該功能減少了集群孤立主節點故障但沒有可工作從節點進行故障轉移的情況的發生。 # 從節點可以遷移到孤立主節點當且僅當原來的主節點的剩余可工作從節點個數大于等于指定的可工作從節點數。這個數稱為從節點遷移屏蔽因子(migration barrier)。當遷移屏蔽因子設置為1時,當且僅當主節點擁有至少兩個可工作的從節點才允許其中從節點遷移到孤立主節點(orphaned masters)。該因子通常用來表明使用者需要為集群中的主節點配置從節點個數。 # 默認遷移屏蔽因子是1(從節點可以執行遷移當前僅當其主節點在該節點遷移后仍保有至少一個從節點)。如果想關閉該功能,只需將該參數設置成一個極大值即可。 # 允許將遷移屏蔽因子置零。這種行為僅在調試時有用,且在生產環境中存在極大風險。 # 配置格式如下: # cluster-migration-barrier 1 # 6 是否支持集群部分可用 # 默認情況下,Redis集群將停止接收客戶端請求(停止服務)當集群檢測到存在哈希槽沒有對應負責的節點。也就是說,如果集群部分down(如有一部分哈希槽沒有對應的節點),整個集群最終將會不可用。(集群信息傳播遵循最終一致性) # 當所有的槽都再次有對應負責的節點后,集群將會自動再次可用。 # 但是有時希望即使集群只有部分槽有對應的節點,集群也能繼續接受客戶端請求并處理對應的鍵空間。為了達到上述目的,將ecluster-require-full-coverage 設置為“no”即可。 # 配置格式如下: # cluster-require-full-coverage yes # 創建集群的指導文檔在http://redis.io 網站可以獲得。 # ############ # 慢日志配置: ################################## SLOW LOG ################################### # # 1 命令執行超時上限 # Redis慢日志系統用來記錄執行時間較長的查詢。這里的執行時間(“execution time”)不包括IO操作時間,如接收客戶端的請求,返回請求結果等,而是實際執行命令的時間(此時線程處于阻塞狀態,僅能執行該命令,不能同時處理其他請求) # 可以使用兩個參數配置慢日志:一個參數告知Redis執行時間超時閾值(單位是微秒,microseconds),這樣一旦某個執行時間超過指定上限,將會被記錄到慢日志中;另一個參數是慢日志的長度。慢日志使用環式結構存儲超時命令。(當慢日志滿后,新命令添加進去后,最老的命令將被踢出) # 單位是微秒(microsecond,106微秒等于1秒)。當該值為負數時表示禁用slow log功能。當該值為零時,表示強制使用slow log記錄每一條命令。 # 默認慢日志功能是開啟的,slowlog-log-slower-than時間上限是104微秒。 slowlog-log-slower-than 10000 # 2 慢日志長度 # slow log保存在內存中,只要內存容量足夠,可以隨意設定慢日志長度。可以使用SLOWLOG RESET命令重新設置慢日志長度。 # 默認設置如下: slowlog-max-len 128 ############## # 延遲監測配置: ################################ LATENCY MONITOR ############################### # # 1 設置操作延遲判定上限 # Redis 延遲監測自系統通過對執行期間的操作的檢測來收集與延遲相關的數據。 # 通過使用LATENCY命令,Redis用戶可以獲得延遲相關的圖形、報告等信息。 # 延遲系統只會記錄大于等于設置的latency-monitor-threshold值的操作。當該值為零時, # 則表明關閉latency monitor。 # # 默認情況下,latency monitor功能是關閉的,因為大多數場景下并不需要該功能。 # latency monitor可以在Redis運行時通過"CONFIG SET latency-monitor-threshold # <milliseconds>"啟動。 # latency monitor設置格式如下: latency-monitor-threshold 0 ############## # 事件通知配置: ############################# EVENT NOTIFICATION ############################## # # 1 設置事件通知 # Redis 可以通知那些已Pub/Sub客戶端鍵空間發生的事件。 # 該功能對應的文檔是http://redis.io/topics/notifications # 例如,如果開啟鍵空間通知功能且一個客戶端對0號數據庫上的“foo”key執行DEL操作,那么Redis將使用Pub/Sub發送兩條消息: # PUBLISH __keyspace@0__:foo del # PUBLISH __keyevent@0__:del foo # Redis對通知的事件進行了分類,每一類都使用唯一的字符標記: # K 鍵空間(Key)通知,前綴為:__keyspace@<db>__ # E 鍵事件(Event)通知,前綴為:__keyevent@<db>__ # 對于所有命令類型和非鍵事件,均使用小寫字母表示,且沒有前綴。 # g 一般命令(Generic commands),如DEL, EXPIRE, RENAME等 # $ 字符串(String)命令 # l 列表(list)命令 # s 集合(set)命令 # h 哈希(hash)命令 # z 有序集合(sorted set)命令 # x 過期事件(過期鍵產生的事件) # e 驅逐事件(因maxmemory而驅逐的事件) # A g$lshzxe等類型的別稱(Alias),如此一來就可以使用"AKE"代表所有的事件類型 # notify-keyspace-events 可以指定多個字符組成的字符串或空串。其中空串代表關閉通知功能。 # 例1:為了開啟List事件和Genetic事件(從事件名稱分類來說),可以使用如下設置: # notify-keyspace-events Elg # 例2:為了獲取過期鍵的信息并發送到訂閱的頻道,即__keyevent@0__:expired use信息,可設置如下: # notify-keyspace-events Ex # 默認情況下,事件通知功能是關閉的,因為大多數用戶并不需要這個功能且這個功能會帶來額外的性能開銷。 # 注意,如果沒有指定鍵空間(K)通知還是鍵事件(E)通知,那么任何事件通知都不會被傳送。 # 默認設置如下: notify-keyspace-events "" ############ # 高級配置: ############################### ADVANCED CONFIG ############################### # # 1 Hash類型 # Hash數據類型的底層實現有壓縮鏈表(ziplist)和哈希表(hash)。當且僅當存儲的數據量小于hash-max-ziplist-entries且節點占用的容量小于hash-max-ziplist-value時才使用小數據量存儲高效的ziplist結構存儲。否則,使用哈希結構存儲。 # 可以通過下述指令設置閾值: hash -max-ziplist-entries 512 hash -max-ziplist-value 64 # 2 List類型 # List類型也可以通過特殊的方式來節省空間。 # 每個內部list節點允許存儲的entries數量可以指定為已修訂最大數量或最大元素數。 # 如指定-5到-1,其含義是: # -5: max size: 64 Kb <– 對于普通的工作負載,不建議使用 # -4: max size: 32 Kb <– 不建議使用 # -3: max size: 16 Kb <– 有時不建議使用 # -2: max size: 8 Kb <– good # -1: max size: 4 Kb <– good # 整數代表每個list節點準確存儲指定數量的elements # 最高效的參數設置是-2 (8 Kb size) 或 -1 (4 Kb size) # 但是,如果需求很特殊,則應根據需要調整參數: list-max-ziplist-size -2 # 3 List類型壓縮深度設置 # List可以實現壓縮 # 壓縮深度是劃定quicklist、ziplist等list在壓縮時的節點范圍。為了進行快速的push/pop操作,不會對list的head和tail進行壓縮,只會對中間節點進行壓縮。參數設置如下: # 0: 關閉list壓縮功能 # 1: 深度為1表示只有當list添加一個節點(無論從head還是tail添加該節點)后才開始進行壓縮。 # 所以對于[head]->node->node->…->node->[tail] # 只有黑體部分加入才會執行壓縮操作。 # 2: 深度為2 # 對于鏈表:[head]->[next]->node->node->…->node->[prev]->[tail] # 不會壓縮head 或 head->next 或 tail->prev 或 tail,而僅壓縮剩余部分。 # 3: 深度為3 # [head]->[next]->[next]->node->node->…->node->[prev]->[prev]->[tail] # 設置格式如下: list-compress-depth 0 # 4 集合(intset)類型 # Set數據類型的底層實現默認是intSet,也可以是hash。 # Set使用hash編碼格式當且僅當字符串組成的set變成底數為10的整數,且其值范圍在64位整數中。 # 下面的配置設置用來指定set可以使用特殊編碼格式的閾值: set -max-intset-entries 512 # 5 Sorted Set類型 # Sorted Set默認使用ziplist實現,也可通過skiplist編碼實現來節省空間。 # 當且僅當Sorted Set中元素值大于zset-max-ziplist-value、元素數量大于zset-max-ziplist-entries時,才使用skiplist實現Sorted Set。 # 參數設置如下: zset-max-ziplist-entries 128 zset-max-ziplist-value 64 # 6 HyperLogLog稀疏表示 # HyperLogLog稀疏表示閾值。16位的header部分也在limit中。當使用稀疏表示的HyperLogLog存儲的字節超過了指定的閾值,它將轉變成稠密表示。 # 不建議使用大于16000的值。當小于16000時能夠獲得較高存儲效率。 # 建議的值是3000,該值可以在較少PFADD(在執行稀疏編碼時時間復雜度是O(N))操作執行的同時獲得極高空間使用收益。當CPU問題無需考慮時,可將該值提升到10000,但其值不應超過 15000。 # 設置方式如下: hll-sparse-max-bytes 3000 # 7 rehash處理 # 激活的rehash會占用每100毫秒的1 millisecond的CPU時間來對Redis hash table(存儲數據庫的鍵值對的hash table)執行rehash。在Redis中hash table使用惰性rehash:在rehashing時,hash table中執行的操作越多,rehash執行的步驟也越多。所以當server很空閑時,rehash將很簡單,hash table也會有更多的內存可以使用。 # 為了在條件許可的情況下對hash table進行rehash,從而節省內存空間,默認情況下,rehash功能會每100毫秒中1 毫秒被調用一次。 # 如果不確定: # 使用"activerehashing no" 如果當前應用環境很注重延遲、Redis僅允許2毫秒的延遲應答。 # 使用"activerehashing yes" 如果當前應用環境不是太注重延遲且想要盡可能塊的釋放內存空間。 # 默認該功能開啟: activerehashing yes # 8 客戶端輸出緩沖區 # 客戶端輸出緩沖區可以用來強制斷開那些不能夠快速讀取服務器數據的客戶端連接。(如在Pub/Sub模式中,客戶端不能夠快速的處理publisher發送過來的消息) # 客戶端類型可以細分為三類: # normal -> 普通客戶端(包括MONITOR客戶端) # slave -> 從節點客戶端 # pubsub ->訂閱至少一個pubsub通道或模式的客戶端 # client-output-buffer-limit 設置的通用格式如下: # client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds> # 一旦hard limit達到,客戶端將直接斷開連接。如果soft limit 達到,客戶端連接將會持續soft seconds 后才斷開連接。 # 例如,當hard limit 是 32 MB(megabytes)、soft limit 在10 秒內持續超過16MB,如果客戶端輸出緩沖區(clients output buffer)超過32 MB 或客戶客戶端輸出緩沖區(clients output buffer)超過16MB,并在接下來的10秒都高于16MB,客戶端連接將馬上斷開。 # 默認情況下,不需對normal級別的clients進行約束因為這些客戶端如果沒有發起詢問就不會接受數據。所以,只需對異步客戶端進行約束因為異步客戶端會出現請求速度大于read速度的情況。 # 因為訂閱者和從節點使用推的方式接受數據,所以需要對pubsub 客戶端和slave客戶端設置默認的客戶端輸出緩沖區約束。 # 將hard limit 或 soft limit 置零表示關閉對應的功能。 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 9 Redis心跳頻率 # Redis調用一個內部函數來執行后臺任務,如在timeout時關閉客戶端連接,清除從未被請求的過期鍵,等等。 # 雖然并不是所有的tasks都使用同樣的頻率執行,但是Redis會根據指定的頻率值來檢測tasks的執行。 # 默認設置的值為10,即每秒執行10次。在Redis處于空閑提升該值時,將會消耗更多的CPU。但是,提升該值也會使Redis更精確的處理超時問題,并檢測到更多的過期鍵。 # 該值設置范圍是1到500。但是不建議將其設置大于100。大多數的用戶建議使用默認的值(10),并根據應用環境的低延遲需求適當提升該值(峰值建議不要大于100)。 # 格式如下: hz 10 # 10 AOF重寫與磁盤同步 # 子進程在執行重寫AOF文件時,如果啟動該功能,則數據每增長32MB就進行一次文件磁盤同步。該功能對加快文件同步到磁盤、避免大的延遲峰值有很大幫助。 # 默認該功能啟動。格式如下: aof-rewrite-incremental-fsync yes |
好記性不如爛筆頭,大家一定要收藏起來以備不時之需
原文鏈接:https://www.cnblogs.com/52php/p/6213343.html