一般配置
修改daemonize為yes,即默認(rèn)以后臺程序方式運行(跟使用&號強(qiáng)制后臺運行是一個意思)
daemonize yes
修改默認(rèn)監(jiān)聽端口(一般用默認(rèn)的)
port 6379
修改生成默認(rèn)日志文件位置
logfile "/home/logs/redis/redis.log"
配置持久化文件存放位置
dir /home/apps/redis/data
PID文件
pidfile /home/apps/redis/redis.pid
保護(hù)模式
protected-mode no
支持集群
cluster-enabled yes
Redis 配置詳解.
請注意,為了讀取配置文件,必須以文件路徑作為第一個參數(shù)啟動Redis:
./redis-server /path/to/redis.conf
內(nèi)存大小單位
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 102410241024 bytes
單位不區(qū)分大小寫,因此 1GB 1Gb 1gB 是一樣的.
################################## INCLUDES ###################################
在此處包含一個或多個其他配置文件。如果您有一個標(biāo)準(zhǔn)模板可用于所有Redis服務(wù)器,但還需要自定義一些服務(wù)器設(shè)置。
“include”不會被來自admin或Redis Sentinel的命令“CONFIG REWRITE”重寫。
由于Redis始終使用最后處理的行為作為配置指令的值,因此最好將include放在此文件的開頭,以避免在運行時覆蓋配置更改。
如果你要使用includes來覆蓋配置選項,最好將include作為最后一行。
include /path/to/local.conf
include /path/to/other.conf
################################## MODULES #####################################
啟動時加載指定模塊,如果服務(wù)器無法加載模塊,它將中止。 這里可以使用多個loadmodule指令。
loadmodule /path/to/my_module.so
loadmodule /path/to/other_module.so
################################## NETWORK #####################################
默認(rèn)情況下,如果未指定“bind”配置指令,則Redis將監(jiān)聽來自服務(wù)器上可用的所有端口的連接。
可以使用“bind”配置指令僅監(jiān)聽一個或多個指定的IP地址。
Examples:
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1
~~~ WARNING ~~~ 如果運行Redis的計算機(jī)直接暴露于Internet,則綁定到所有接口是危險的,并且會將實例暴露給Internet上的每個人。
因此,默認(rèn)情況下,我們不會注釋以下綁定指令,這意味著Redis只能接受來自指定ip的客戶端的連接
IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
JUST COMMENT THE FOLLOWING LINE.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1
保護(hù)模式是一層安全保護(hù),以避免在Internet上打開的Redis實例被訪問和利用。
當(dāng)保護(hù)模式打開的情況下,如果:
1) 服務(wù)器未使用“bind”指令顯式綁定到一組地址。
2) 沒有配置密碼。
服務(wù)器僅接受來自IPv4和IPv6環(huán)回地址127.0.0.1和:: 1以及Unix域套接字的客戶端的連接。
默認(rèn)情況下保護(hù)模式是開啟的。 只有在希望其他主機(jī)的客戶端即使未配置任何身份驗證,仍要連接到Redis時,應(yīng)該禁用此選項并且不使用“bind”指令明確列出一組特定的接口。
protected-mode yes
接受指定端口上的連接,默認(rèn)為6379
如果指定了端口0,則Redis不會偵聽TCP套接字。
port 6379
TCP連接最大積壓數(shù)
在大量客戶端連接的情況下,應(yīng)該提高該值,以免客戶端連接慢。
但該值受系統(tǒng)內(nèi)核參數(shù)的限制,包括 somaxconn 和 tcp_max_syn_backlog。
tcp-backlog 511
Unix socket.
指定將用于監(jiān)聽傳入連接的Unix套接字的路徑。 沒有默認(rèn)值,因此Redis在未指定時不會偵聽unix套接字。
unixsocket /tmp/redis.sock
unixsocketperm 700
當(dāng)連接的客戶端連續(xù)空閑指定時間后,就斷開該連接。指定值為0時禁用超時機(jī)制。
timeout 0
TCP keepalive.
周期性檢測客戶端是否可用
如果非零,則在沒有通信的情況下使用SO_KEEPALIVE向客戶端發(fā)送TCP ACK。
此選項的合理值為300秒
tcp-keepalive 300
################################# GENERAL #####################################
設(shè)定是否以守護(hù)進(jìn)程啟動服務(wù)(默認(rèn)是no),守護(hù)進(jìn)程會生成 PID 文件 /var/run/redis_6379.pid。
daemonize no
If you run Redis from upstart or systemd, Redis can interact with your
supervision tree. Options:
supervised no - no supervision interaction
supervised upstart - signal upstart by putting Redis into SIGSTOP mode
supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
supervised auto - detect upstart or systemd method based on
UPSTART_JOB or NOTIFY_SOCKET environment variables
Note: these supervision methods only signal "process is ready."
They do not enable continuous liveness pings back to your supervisor.
supervised no
啟用守護(hù)進(jìn)程模式時,會生成該文件。
pidfile /var/run/redis_6379.pid
指定日志級別
日志級別有以下選項:
debug (適用于開發(fā)/測試)
verbose (很少但很有用的信息)
notice (信息適中,推薦選項)
warning (只記錄非常重要/關(guān)鍵的消息)
loglevel notice
指定保存日志的文件。請注意,如果您使用標(biāo)準(zhǔn)輸出進(jìn)行日志記錄,守護(hù)進(jìn)程情況下,日志將發(fā)送到/dev/null
logfile ""
要啟用日志記錄到系統(tǒng)記錄器,只需將“syslog-enabled”設(shè)置為yes,并可選擇更新其他syslog參數(shù)以滿足您的需要。
syslog-enabled no
指定syslog標(biāo)識。
syslog-ident redis
指定syslog工具。 必須是USER或LOCAL0-LOCAL7之間。
syslog-facility local0
設(shè)置數(shù)據(jù)庫數(shù)量,默認(rèn)為16. 默認(rèn)數(shù)據(jù)庫是 DB 0, 你可以使用 SELECT <dbid> 選擇使用的數(shù)據(jù)庫。
數(shù)據(jù)庫編號在 0 到 'databases'-1
databases 16
啟動日志中是否顯示redis logo,默認(rèn)是開啟的
always-show-logo yes
################################ SNAPSHOTTING ################################
數(shù)據(jù)持久化:
save <seconds> <changes>
指定時間間隔后,如果數(shù)據(jù)變化達(dá)到指定次數(shù),則導(dǎo)出生成快照文件
示例如下:
900 秒(15 分鐘)內(nèi)至少有1個key被修改
300 秒(5分鐘)內(nèi)至少有10個key被修改
60 秒(1分鐘)內(nèi)至少有10000個key被修改
如果指定 save "",則相當(dāng)于清除前面指定的所有 save 設(shè)置
save ""
save 900 1
save 300 10
save 60 10000
在啟用快照的情況下(指定了有效的 save),如果遇到某次快照生成失敗(比如目錄無權(quán)限),
之后的數(shù)據(jù)修改就會被禁止。這有利于用戶及早發(fā)現(xiàn)快照保存失敗,以免更多的數(shù)據(jù)不能持久化而丟失的風(fēng)險。
當(dāng)快照恢復(fù)正常后,數(shù)據(jù)的修改會自動開啟。
如果你有其他的持久化監(jiān)控,你可以關(guān)閉本機(jī)制。
stop-writes-on-bgsave-error yes
快照中字符串值是否壓縮
rdbcompression yes
如果開啟,校驗和會被放在文件尾部。這將使快照數(shù)據(jù)更可靠,但會在快照生成與加載時降低大約 10% 的性能,追求高性能時可關(guān)閉該功能。
rdbchecksum yes
指定保存快照文件的名稱
dbfilename dump.rdb
指定保存快照文件的目錄,AOF(Append Only File) 文件也會生成到該目錄
dir ./
################################# REPLICATION #################################
主從復(fù)制。 使用 replicaof 使Redis實例成為另一臺Redis服務(wù)器的副本。
+------------------+ +---------------+
| Master | ---> | Replica |
| (receive writes) | | (exact copy) |
+------------------+ +---------------+
1) Redis復(fù)制是異步的,但是如果master與一定數(shù)量的副本無法連接,則可以將主服務(wù)器配置為停止接受寫入。
2) 如果再較短時間內(nèi)與副本失去了連接,當(dāng)Redis副本與master重新連接時可以執(zhí)行部分重新同步。因此就要求配置一個合理的 backlog 值。
3) 當(dāng)副本節(jié)點重新連接到master時,重新同步復(fù)制時自動的,不需要用戶干預(yù)。
replicaof <masterip> <masterport>
如果主服務(wù)器受密碼保護(hù)(使用下面的“requirepass”配置指令),則可以在啟動復(fù)制同步過程之前告知副本服務(wù)器進(jìn)行身份驗證,否則主服務(wù)器將拒絕副本服務(wù)器請求。
masterauth <master-password>
當(dāng)從庫與主庫連接中斷,或者主從同步正在進(jìn)行時,如果有客戶端向從庫讀取數(shù)據(jù):
- yes: 從庫答復(fù)現(xiàn)有數(shù)據(jù),可能是舊數(shù)據(jù)(初始從未修改的值則為空值)
- no: 從庫報錯“正在從主庫同步”
replica-serve-stale-data yes
從庫只允許讀取
replica-read-only yes
無盤同步
-------------------------------------------------------
WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
-------------------------------------------------------
新連接(包括連接中斷后重連)的從庫不可采用增量同步,只能采用全量同步(RDB文件由主庫傳給從庫),有兩種傳遞方式:
- 磁盤形式:主庫創(chuàng)建子進(jìn)程,子進(jìn)程寫入磁盤 RDB 文件,再由父進(jìn)程立即傳給從庫;
- 無磁盤形式:主庫創(chuàng)建子進(jìn)程,子進(jìn)程把 RDB 文件直接寫入從庫的 SOCKET 連接。
repl-diskless-sync no
無盤同步傳輸間隔(秒)
repl-diskless-sync-delay 5
從庫向主庫PING的間隔(秒)
repl-ping-replica-period 10
以下選項設(shè)置復(fù)制超時:
1) 從副本的角度來看,在SYNC期間批量傳輸I / O.
2) 從副本(data,ping)的角度來看master超時。
3) 從主服務(wù)器的角度來看副本超時(REPLCONF ACK ping)。
確保此值大于為repl-ping-replica-period指定的值非常重要,否則每次主服務(wù)器和副本服務(wù)器之間的流量較低時都會檢測到超時。
repl-timeout 60
在SYNC之后禁用副本套接字上的TCP_NODELAY?
如果選擇“yes”,Redis將使用較少數(shù)量的TCP數(shù)據(jù)包和較少的帶寬將數(shù)據(jù)發(fā)送到副本。 但這可能會增加數(shù)據(jù)在副本端出現(xiàn)的延遲,使用默認(rèn)配置的Linux內(nèi)核最多可達(dá)40毫秒。
如果選擇“no”,則副本上顯示的數(shù)據(jù)延遲將減少,但將使用更多帶寬進(jìn)行復(fù)制。
默認(rèn)情況下,我們針對低延遲進(jìn)行優(yōu)化,但是在非常高的流量條件下,或者當(dāng)主節(jié)點和副本很多時,將其設(shè)置為 yes 或許是較好的選擇
repl-disable-tcp-nodelay no
設(shè)置復(fù)制積壓大小(backlog)。 積壓是一個緩沖區(qū),當(dāng)副本斷開連接一段時間后會累積副本數(shù)據(jù),因此當(dāng)副本想要再次重新連接時,通常不需要完全重新同步,只需要部分重新同步就足夠了
復(fù)制backlog越大,副本可以斷開連接的時間越長。
repl-backlog-size 1mb
當(dāng)master與副本節(jié)點斷開時間超過指定時間后,將釋放復(fù)制積壓緩沖區(qū)(backlog)
如果設(shè)置為0,表示一直不釋放復(fù)制積壓緩沖區(qū)
repl-backlog-ttl 3600
副本優(yōu)先級,哨兵模式下,如果主服務(wù)器不再正常工作,Redis Sentinel 將優(yōu)先使用它來選擇要升級為主服務(wù)器的副本。
值越低,優(yōu)先級越高
優(yōu)先級為0會將副本標(biāo)記為無法擔(dān)任master的角色,因此Redis Sentinel永遠(yuǎn)不會選擇優(yōu)先級為0的副本進(jìn)行升級。
默認(rèn)情況下,優(yōu)先級為100。
replica-priority 100
如果可用連接的副本數(shù)少于N個,并且延遲小于或等于M秒,則master停止接受寫入。
以秒為單位的延遲(必須<=指定值)是根據(jù)從副本接收的最后一次ping計算的,通常每秒發(fā)送一次。
例如,要求至少3個在線且滯后時間<= 10秒的副本:
min-replicas-to-write 3
min-replicas-max-lag 10
以上兩個屬性,任意一個設(shè)置為0,都會禁用該功能。
默認(rèn)情況下,min-replicas-to-write設(shè)置為0(功能已禁用),min-replicas-max-lag設(shè)置為10。
當(dāng)使用端口轉(zhuǎn)發(fā)或網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)時,實際上可以通過不同的IP和端口對副本進(jìn)行訪問。
副本可以使用以下兩個選項,向其主服務(wù)器報告一組特定的IP和端口。
如果只需要覆蓋端口或IP地址,則無需使用這兩個選項。
replica-announce-ip 5.5.5.5
replica-announce-port 1234
################################## SECURITY ###################################
設(shè)置redis訪問密碼
requirepass foobared
命令重命名.
對于一些敏感的命令,不希望任意客戶端都可以執(zhí)行,可以改掉默認(rèn)的名字,新名字只告知特定的客戶端來執(zhí)行。
可以命令改名:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
可以禁用命令:rename-command CONFIG "",即新名稱為空串。
需要注意的是,命令改名保存至 AOF 文件或傳輸至從庫,可能導(dǎo)致問題。
rename-command CONFIG ""
################################### CLIENTS ####################################
同一時刻最多可以接納的客戶端數(shù)目(Redis 服務(wù)要占用其中的大約 32 個文件描述符)。
如果客戶端連接數(shù)達(dá)到該上限,新來客戶端將被告知“已達(dá)到最大客戶端連接數(shù)”。
maxclients 10000
############################## MEMORY MANAGEMENT ################################
內(nèi)存使用上限
當(dāng)內(nèi)存達(dá)到上限時,Redis 將使用指定的策略清除其他鍵值。
如果 Redis 無法清除(或者策略不允許清除鍵值),將對占用內(nèi)存的命令報錯,但對只讀的命令正常服務(wù)。
maxmemory <bytes>
- volatile-lru: 針對到期的鍵值,采取 LRU 策略;
- volatile-lfu: 針對到期的鍵值,采取 LFU 策略;
- volatile-random: 針對到期的鍵值,采取隨機(jī)策略;
- allkeys-lru: 針對所有鍵值,采取 LRU 策略;
- allkeys-lfu: 針對所有鍵值,采取 LFU 策略;
- allkeys-random: 針對所有鍵值,采取隨機(jī)策略;
- volatile-ttl: 刪除最近到期的key(次要TTL)
- noeviction: 不清除任何內(nèi)容,只是在寫入操作時報錯。
LRU表示最近最少使用
LFU意味著最少使用
LRU,LFU和volatile-ttl都是使用近似隨機(jī)算法實現(xiàn)的。
默認(rèn)值是:noeviction
maxmemory-policy noeviction
清除鍵值時取樣數(shù)量
LRU,LFU和最小TTL算法不是精確的算法,而是近似算法(為了節(jié)省內(nèi)存),因此您可以調(diào)整它以獲得速度或精度。
默認(rèn)情況下,Redis將檢查五個鍵并選擇最近使用的鍵,您可以使用以下配置指令更改樣本大小。
默認(rèn)值為5會產(chǎn)生足夠好的結(jié)果。 10:近似非常接近真實的LRU但成本更高的CPU。 3:更快但不是很準(zhǔn)確。
maxmemory-samples 5
從Redis 5開始,默認(rèn)情況下,副本將忽略其maxmemory設(shè)置(除非在故障轉(zhuǎn)移后或手動將其提升為主設(shè)備)。
這意味著key的清除將由主服務(wù)器處理,當(dāng)主服務(wù)器中的key清除時,將DEL命令發(fā)送到副本。
此行為可確保主服務(wù)器和副本服務(wù)器保持一致,但是如果您的副本服務(wù)器是可寫的,或者您希望副本服務(wù)器具有不同的內(nèi)存設(shè)置,
并且您確定對副本服務(wù)器執(zhí)行的所有寫操作都是冪等的, 然后你可以改變這個默認(rèn)值(但一定要明白你在做什么)。
replica-ignore-maxmemory yes
############################# LAZY FREEING ####################################
lazy free 為惰性刪除或延遲釋放;
當(dāng)刪除鍵的時候,redis提供異步延時釋放key內(nèi)存的功能,
把key釋放操作放在bio(Background I/O)單獨的子線程處理中,
減少刪除big key對redis主線程的阻塞。有效地避免刪除big key帶來的性能和可用性問題。
lazy free的使用分為2類:第一類是與DEL命令對應(yīng)的主動刪除,第二類是過期key刪除。
針對redis內(nèi)存使用達(dá)到maxmeory,并設(shè)置有淘汰策略時;在被動淘汰鍵時,是否采用lazy free機(jī)制;
lazyfree-lazy-eviction no
針對設(shè)置有TTL的鍵,達(dá)到過期后,被redis清理刪除時是否采用lazy free機(jī)制;
lazyfree-lazy-expire no
針對有些指令在處理已存在的鍵時,會帶有一個隱式的DEL鍵的操作。如rename命令,當(dāng)目標(biāo)鍵已存在,redis會先刪除目標(biāo)鍵,如果這些目標(biāo)鍵是一個big key,那就會引入阻塞刪除的性能問題
lazyfree-lazy-server-del no
針對slave進(jìn)行全量數(shù)據(jù)同步,slave在加載master的RDB文件前,會運行flushall來清理自己的數(shù)據(jù)場景,
replica-lazy-flush no
############################## APPEND ONLY MODE ###############################
可以同時啟用AOF和RDB持久性而不會出現(xiàn)問題。 如果在啟動時檢查到啟用了AOF,Redis將優(yōu)先加載AOF。
AOF 持久化機(jī)制默認(rèn)是關(guān)閉的
appendonly no
AOF持久化文件名稱默認(rèn)為 appendonly.aof
appendfilename "appendonly.aof"
fsync() 調(diào)用會告訴操作系統(tǒng)將緩沖區(qū)的數(shù)據(jù)同步到磁盤,可取三種值:always、everysec和no。
always:實時會極大消弱Redis的性能,因為這種模式下每次write后都會調(diào)用fsync。
no:write后不會有fsync調(diào)用,由操作系統(tǒng)自動調(diào)度刷磁盤,性能是最好的。
everysec:每秒調(diào)用一次fsync(默認(rèn))
appendfsync always
appendfsync everysec
appendfsync no
在AOF文件 rewrite期間,是否對aof新記錄的append暫緩使用文件同步策略,主要考慮磁盤IO開支和請求阻塞時間。默認(rèn)為no,表示"不暫緩",新的aof記錄仍然會被立即同步
no-appendfsync-on-rewrite no
當(dāng)AOF增長超過指定比例時,重寫AOF文件,設(shè)置為0表示不自動重寫AOF文件,重寫是為了使aof體積保持最小,而確保保存最完整的數(shù)據(jù)。
這里表示增長一倍
auto-aof-rewrite-percentage 100
觸發(fā)aof rewrite的最小文件大小,這里表示,文件大小最小64mb才會觸發(fā)重寫機(jī)制
auto-aof-rewrite-min-size 64mb
AOF文件可能在尾部是不完整的。那redis重啟時load進(jìn)內(nèi)存的時候就有問題了。
如果選擇的是yes,當(dāng)截斷的aof文件被導(dǎo)入的時候,會自動發(fā)布一個log給客戶端然后load。如果是no,用戶必須手動redis-check-aof修復(fù)AOF文件才可以。默認(rèn)值為 yes。
aof-load-truncated yes
開啟混合持久化
redis保證RDB轉(zhuǎn)儲跟AOF重寫不會同時進(jìn)行。
當(dāng)redis啟動時,即便RDB和AOF持久化同時啟用且AOF,RDB文件都存在,則redis總是會先加載AOF文件,這是因為AOF文件被認(rèn)為能夠更好的保證數(shù)據(jù)一致性,
當(dāng)加載AOF文件時,如果啟用了混合持久化,那么redis將首先檢查AOF文件的前綴,如果前綴字符是REDIS,那么該AOF文件就是混合格式的,redis服務(wù)器會先加載RDB部分,然后再加載AOF部分。
aof-use-rdb-preamble yes
################################ LUA SCRIPTING ###############################
Lua腳本執(zhí)行超時時間
設(shè)置成0或者負(fù)值表示不限時
lua-time-limit 5000
################################ REDIS CLUSTER ###############################
開啟集群功能,此redis實例作為集群的一個節(jié)點
cluster-enabled yes
集群配置文件
此配置文件不能人工編輯,它是集群節(jié)點自動維護(hù)的文件,主要用于記錄集群中有哪些節(jié)點、他們的狀態(tài)以及一些持久化參數(shù)等,方便在重啟時恢復(fù)這些狀態(tài)。通常是在收到請求之后這個文件就會被更新
cluster-config-file nodes-6379.conf
集群中的節(jié)點能夠失聯(lián)的最大時間,超過這個時間,該節(jié)點就會被認(rèn)為故障。如果主節(jié)點超過這個時間還是不可達(dá),則用它的從節(jié)點將啟動故障遷移,升級成主節(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-replica-validity-factor 10
主節(jié)點需要的最小從節(jié)點數(shù),只有達(dá)到這個數(shù),主節(jié)點失敗時,從節(jié)點才會進(jìn)行遷移。
cluster-migration-barrier 1
在部分key所在的節(jié)點不可用時,如果此參數(shù)設(shè)置為"yes"(默認(rèn)值), 則整個集群停止接受操作;
如果此參數(shù)設(shè)置為”no”,則集群依然為可達(dá)節(jié)點上的key提供讀操作。
cluster-require-full-coverage yes
在主節(jié)點失效期間,從節(jié)點不允許對master失效轉(zhuǎn)移
cluster-replica-no-failover no
########################## CLUSTER DOCKER/NAT support ########################
默認(rèn)情況下,Redis會自動檢測自己的IP和從配置中獲取綁定的PORT,告訴客戶端或者是其他節(jié)點。
而在Docker環(huán)境中,如果使用的不是host網(wǎng)絡(luò)模式,在容器內(nèi)部的IP和PORT都是隔離的,那么客戶端和其他節(jié)點無法通過節(jié)點公布的IP和PORT建立連接。
如果開啟以下配置,Redis節(jié)點會將配置中的這些IP和PORT告知客戶端或其他節(jié)點。而這些IP和PORT是通過Docker轉(zhuǎn)發(fā)到容器內(nèi)的臨時IP和PORT的。
Example:
cluster-announce-ip 10.1.1.5
cluster-announce-port 6379
cluster-announce-bus-port 6380
################################## SLOW LOG ###################################
執(zhí)行時間大于slowlog-log-slower-than的才會定義成慢查詢,才會被slow-log記錄
這里的單位是微秒,默認(rèn)是 10ms
slowlog-log-slower-than 10000
慢查詢最大的條數(shù),當(dāng)slowlog超過設(shè)定的最大值后,會將最早的slowlog刪除,是個FIFO隊列
slowlog-max-len 128
################################ LATENCY MONITOR ##############################
Redis延遲監(jiān)視子系統(tǒng)在運行時對不同的操作進(jìn)行采樣,以便收集可能導(dǎo)致延時的數(shù)據(jù)根源。
通過LATENCY命令,可以打印圖表并獲取報告。
系統(tǒng)僅記錄在等于或大于 latency-monitor-threshold 指定的毫秒數(shù)的時間內(nèi)執(zhí)行的操作。 當(dāng)其值設(shè)置為0時,將關(guān)閉延遲監(jiān)視器。
默認(rèn)情況下,延遲監(jiān)視被禁用,因為如果您沒有延遲問題,則通常不需要延遲監(jiān)視,并且收集數(shù)據(jù)會對性能產(chǎn)生影響,雖然非常小。
如果需要,可以使用命令“CONFIG SET latency-monitor-threshold <milliseconds>”在運行時輕松啟用延遲監(jiān)視。
latency-monitor-threshold 0
############################# EVENT NOTIFICATION ##############################
Redis可以向Pub / Sub客戶端通知鍵空間發(fā)生的事件。
例如,如果啟用了鍵空間事件通知,并且客戶端對存儲在數(shù)據(jù)庫0中的鍵 foo 執(zhí)行DEL操作,則將通過Pub / Sub發(fā)布兩條消息:
PUBLISH keyspace@0:foo del
PUBLISH keyevent@0:del foo
以 keyspace 為前綴的頻道被稱為鍵空間通知(key-space notification), 而以 keyevent 為前綴的頻道則被稱為鍵事件通知(key-event notification)。
It is possible to select the events that Redis will notify among a set
of classes. Every class is identified by a single character:
K 鍵空間通知,所有通知以 keyspace@<db> 為前綴.
E 鍵事件通知,所有通知以 keyevent@<db> 為前綴
g DEL 、 EXPIRE 、 RENAME 等類型無關(guān)的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 過期事件:每當(dāng)有過期鍵被刪除時發(fā)送
e 驅(qū)逐(evict)事件:每當(dāng)有鍵因為 maxmemory 策略而被刪除時發(fā)送
A 參數(shù) g$lshzxe 的別名
輸入的參數(shù)中至少要有一個 K 或者 E , 否則的話, 不管其余的參數(shù)是什么, 都不會有任何通知被分發(fā)。
如果只想訂閱鍵空間中和列表相關(guān)的通知, 那么參數(shù)就應(yīng)該設(shè)為 Kl。將參數(shù)設(shè)為字符串 "AKE" 表示發(fā)送所有類型的通知。
notify-keyspace-events ""
############################### ADVANCED CONFIG ###############################
hash類型的數(shù)據(jù)結(jié)構(gòu)在編碼上可以使用ziplist和hashtable。
ziplist的特點就是文件存儲(以及內(nèi)存存儲)所需的空間較小,在內(nèi)容較小時,性能和hashtable幾乎一樣。
因此redis對hash類型默認(rèn)采取ziplist。如果hash中條目個數(shù)或者value長度達(dá)到閥值,內(nèi)部編碼將使用hashtable。
這個參數(shù)指的是ziplist中允許存儲的最大條目個數(shù),默認(rèn)為512,建議為128
hash-max-ziplist-entries 512
ziplist中允許條目value值最大字節(jié)數(shù),默認(rèn)為64,建議為1024
hash-max-ziplist-value 64
當(dāng)取正值的時候,表示按照數(shù)據(jù)項個數(shù)來限定每個quicklist節(jié)點上的ziplist長度。比如,當(dāng)這個參數(shù)配置成5的時候,表示每個quicklist節(jié)點的ziplist最多包含5個數(shù)據(jù)項。
當(dāng)取負(fù)值的時候,表示按照占用字節(jié)數(shù)來限定每個quicklist節(jié)點上的ziplist長度。這時,它只能取-1到-5這五個值
-5: max size: 64 Kb <-- not recommended for normal workloads
-4: max size: 32 Kb <-- not recommended
-3: max size: 16 Kb <-- probably not recommended
-2: max size: 8 Kb <-- good
-1: max size: 4 Kb <-- good
性能最高的選項通常為-2(8 Kb大?。┗?1(4 Kb大小)。
list-max-ziplist-size -2
一個quicklist兩端不被壓縮的節(jié)點個數(shù)
參數(shù)list-compress-depth的取值含義如下:
0: 表示都不壓縮。這是Redis的默認(rèn)值
1: 表示quicklist兩端各有1個節(jié)點不壓縮,中間的節(jié)點壓縮。
So: [head]->node->node->...->node->[tail]
[head], [tail] 不壓縮; 內(nèi)部節(jié)點將被壓縮.
2: [head]->[next]->node->node->...->node->[prev]->[tail]
2:表示quicklist兩端各有2個節(jié)點不壓縮,中間的節(jié)點壓縮
3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
3: 表示quicklist兩端各有3個節(jié)點不壓縮,中間的節(jié)點壓縮。
etc.
list-compress-depth 0
數(shù)據(jù)量小于等于512用intset,大于512用set
set-max-intset-entries 512
數(shù)據(jù)量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
value大小小于等于hll-sparse-max-bytes使用稀疏數(shù)據(jù)結(jié)構(gòu)(sparse)
大于hll-sparse-max-bytes使用稠密的數(shù)據(jù)結(jié)構(gòu)(dense),一個比16000大的value是幾乎沒用的,
建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設(shè)置到10000左右
hll-sparse-max-bytes 3000
Streams宏節(jié)點最大大小。流數(shù)據(jù)結(jié)構(gòu)是基數(shù)編碼內(nèi)部多個項目的大節(jié)點樹。使用此配置
可以配置單個節(jié)點的字節(jié)數(shù),以及切換到新節(jié)點之前可能包含的最大項目數(shù)
追加新的流條目。如果以下任何設(shè)置設(shè)置為0,忽略限制,因此例如可以設(shè)置一個
大入口限制將max-bytes設(shè)置為0,將max-entries設(shè)置為所需的值
stream-node-max-bytes 4096
stream-node-max-entries 100
主動重新散列每100毫秒CPU時間使用1毫秒,以幫助重新散列主Redis散列表(將頂級鍵映射到值)。
Redis使用的散列表實現(xiàn)(請參閱dict.c)執(zhí)行延遲重新散列:您在重新散列的散列表中運行的操作越多,執(zhí)行的重復(fù)“步驟”就越多,
因此如果服務(wù)器處于空閑狀態(tài),則重新散列將永遠(yuǎn)不會完成 哈希表使用了一些內(nèi)存。
activerehashing yes
對客戶端輸出緩沖進(jìn)行限制可以強(qiáng)迫那些不從服務(wù)器讀取數(shù)據(jù)的客戶端斷開連接,用來強(qiáng)制關(guān)閉傳輸緩慢的客戶端。
對于normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client默認(rèn)取消限制
client-output-buffer-limit normal 0 0 0
對于slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續(xù)60秒,那么服務(wù)器就會立即斷開客戶端連接。
client-output-buffer-limit replica 256mb 64mb 60
對于pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續(xù)60秒,那么服務(wù)器就會立即斷開客戶端連接。
client-output-buffer-limit pubsub 32mb 8mb 60
客戶端查詢緩沖區(qū)累積新命令。 默認(rèn)情況下,它被限制為固定數(shù)量,以避免協(xié)議失步(例如由于客戶端中的錯誤)將導(dǎo)致查詢緩沖區(qū)中的未綁定內(nèi)存使用。
但是,如果您有非常特殊的需求,可以在此配置它,例如我們巨大執(zhí)行請求。
client-query-buffer-limit 1gb
在Redis協(xié)議中,批量請求(即表示單個字符串的元素)通常限制為512 MB。 但是,您可以在此更改此限制。
proto-max-bulk-len 512mb
Redis調(diào)用內(nèi)部函數(shù)來執(zhí)行許多后臺任務(wù),例如在超時時關(guān)閉客戶端的連接,清除從未請求過期的過期密鑰等等。
并非所有任務(wù)都以相同的頻率執(zhí)行,但Redis會根據(jù)指定的“hz”值檢查要執(zhí)行的任務(wù)。
默認(rèn)情況下,hz設(shè)置為10.提高值時,在Redis處于空閑狀態(tài)下,將使用更多CPU
但同時,當(dāng)有很多鍵同時到期時,Redis會響應(yīng)更快,并且可以更精確地處理超時。
范圍介于1到500之間,但超過100的值通常不是一個好主意。 大多數(shù)用戶應(yīng)使用默認(rèn)值10,除非僅在需要非常低延遲的環(huán)境中將此值提高到100。
hz 10
通常,推薦使HZ的值與連接的客戶端數(shù)量成比例。這有助于避免為每個后臺任務(wù)調(diào)用處理太多客戶端,以避免延遲峰值。
默認(rèn)情況下默認(rèn)的HZ值為10。Redis 提供并啟用自適應(yīng)HZ值的功能,當(dāng)有很多連接的客戶端時,該值會臨時增加。
啟用動態(tài)HZ時,實際配置的HZ將用作基線,但是一旦連接了更多客戶端,將根據(jù)實際需要使用配置的HZ值的倍數(shù)。
通過這種方式,空閑實例將使用非常少的CPU時間,而繁忙的實例將更具響應(yīng)性。
dynamic-hz yes
當(dāng)一個子進(jìn)程重寫AOF文件時,如果啟用下面的選項,則文件每生成32M數(shù)據(jù)會被同步。
aof-rewrite-incremental-fsync yes
當(dāng)redis保存RDB文件時,如果啟用了以下選項,則每生成32 MB數(shù)據(jù)將對文件進(jìn)行fsync。 這對于以遞增方式將文件提交到磁盤并避免大延遲峰值非常有用。
rdb-save-incremental-fsync yes
可以調(diào)整Redis LFU(參見maxmemory設(shè)置)。 但是,最好使用默認(rèn)設(shè)置,僅在調(diào)查如何改進(jìn)性能以及LFU如何隨時間變化后更改它們,這可以通過OBJECT FREQ命令進(jìn)行檢查。
Redis LFU實現(xiàn)中有兩個可調(diào)參數(shù):計數(shù)器對數(shù)因子和計數(shù)器衰減時間。 在更改它們之前,了解這兩個參數(shù)的含義非常重要。
LFU計數(shù)器每個鍵只有8位,它的最大值是255,因此Redis使用具有對數(shù)行為的概率增量。 給定舊計數(shù)器的值,當(dāng)訪問密鑰時,計數(shù)器以這種方式遞增:
1. A random number R between 0 and 1 is extracted.
2. A probability P is calculated as 1/(old_value*lfu_log_factor+1).
3. The counter is incremented only if R < P.
The default lfu-log-factor is 10. This is a table of how the frequency
counter changes with a different number of accesses with different
logarithmic factors:
+--------+------------+------------+------------+------------+------------+
| factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |
+--------+------------+------------+------------+------------+------------+
| 0 | 104 | 255 | 255 | 255 | 255 |
+--------+------------+------------+------------+------------+------------+
| 1 | 18 | 49 | 255 | 255 | 255 |
+--------+------------+------------+------------+------------+------------+
| 10 | 10 | 18 | 142 | 255 | 255 |
+--------+------------+------------+------------+------------+------------+
| 100 | 8 | 11 | 49 | 143 | 255 |
+--------+------------+------------+------------+------------+------------+
NOTE: The above table was obtained by running the following commands:
redis-benchmark -n 1000000 incr foo
redis-cli object freq foo
NOTE 2: The counter initial value is 5 in order to give new objects a chance
to accumulate hits.
The counter decay time is the time, in minutes, that must elapse in order
for the key counter to be divided by two (or decremented if it has a value
less <= 10).
The default value for the lfu-decay-time is 1. A Special value of 0 means to
decay the counter every time it happens to be scanned.
lfu-log-factor 10
lfu-decay-time 1
########################### ACTIVE DEFRAGMENTATION #######################