redis配置

# Redis 配置文件示例

# 注意單位: 當(dāng)需要配置內(nèi)存大小時(shí), 可能需要指定像1k,5GB,4M等常見格式
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# 單位是對(duì)大小寫不敏感的 1GB 1Gb 1gB 是相同的。

################################## INCLUDES ###################################

# 可以在這里包含一個(gè)或多個(gè)其他的配置文件。如果你有一個(gè)適用于所有Redis服務(wù)器的標(biāo)準(zhǔn)配置模板
# 但也需要一些每個(gè)服務(wù)器自定義的設(shè)置,這個(gè)功能將很有用。被包含的配置文件也可以包含其他配置文件,
# 所以需要謹(jǐn)慎的使用這個(gè)功能。
#
# 注意“inclue”選項(xiàng)不能被admin或Redis哨兵的"CONFIG REWRITE"命令重寫。
# 因?yàn)镽edis總是使用最后解析的配置行最為配置指令的值, 你最好在這個(gè)文件的開頭配置includes來
# 避免它在運(yùn)行時(shí)重寫配置。
# 如果相反你想用includes的配置覆蓋原來的配置,你最好在該文件的最后使用include
#
# include /path/to/local.conf
# include /path/to/other.conf

################################ GENERAL  #####################################

# 默認(rèn)Rdis不會(huì)作為守護(hù)進(jìn)程運(yùn)行。如果需要的話配置成'yes'
# 注意配置成守護(hù)進(jìn)程后Redis會(huì)將進(jìn)程號(hào)寫入文件/var/run/redis.pid
daemonize no

# 當(dāng)以守護(hù)進(jìn)程方式運(yùn)行時(shí),默認(rèn)Redis會(huì)把進(jìn)程ID寫到 /var/run/redis.pid。你可以在這里修改路徑。
pidfile /var/run/redis.pid

# 接受連接的特定端口,默認(rèn)是6379
# 如果端口設(shè)置為0,Redis就不會(huì)監(jiān)聽TCP套接字。
port 6379

# TCP listen() backlog.
#
# 在高并發(fā)環(huán)境下你需要一個(gè)高backlog值來避免慢客戶端連接問題。注意Linux內(nèi)核默默地將這個(gè)值減小
# 到/proc/sys/net/core/somaxconn的值,所以需要確認(rèn)增大somaxconn和tcp_max_syn_backlog
# 兩個(gè)值來達(dá)到想要的效果。
# tcp-backlog 511

# 默認(rèn)Redis監(jiān)聽服務(wù)器上所有可用網(wǎng)絡(luò)接口的連接。可以用"bind"配置指令跟一個(gè)或多個(gè)ip地址來實(shí)現(xiàn)
# 監(jiān)聽一個(gè)或多個(gè)網(wǎng)絡(luò)接口
#
# 示例:
#
bind 10.0.0.237
bind 0.0.0.0

# 指定用來監(jiān)聽Unix套套接字的路徑。沒有默認(rèn)值, 所以在沒有指定的情況下Redis不會(huì)監(jiān)聽Unix套接字
#
# unixsocket /tmp/redis.sock
# unixsocketperm 755

# 一個(gè)客戶端空閑多少秒后關(guān)閉連接。(0代表禁用,永不關(guān)閉)
timeout 0

# TCP keepalive.
#
# 如果非零,則設(shè)置SO_KEEPALIVE選項(xiàng)來向空閑連接的客戶端發(fā)送ACK,由于以下兩個(gè)原因這是很有用的:
#
# 1)能夠檢測(cè)無響應(yīng)的對(duì)端
# 2)讓該連接中間的網(wǎng)絡(luò)設(shè)備知道這個(gè)連接還存活
#
# 在Linux上,這個(gè)指定的值(單位:秒)就是發(fā)送ACK的時(shí)間間隔。
# 注意:要關(guān)閉這個(gè)連接需要兩倍的這個(gè)時(shí)間值。
# 在其他內(nèi)核上這個(gè)時(shí)間間隔由內(nèi)核配置決定
#
# 這個(gè)選項(xiàng)的一個(gè)合理值是60秒
tcp-keepalive 0

# 指定服務(wù)器調(diào)試等級(jí)
# 可能值:
# debug (大量信息,對(duì)開發(fā)/測(cè)試有用)
# verbose (很多精簡(jiǎn)的有用信息,但是不像debug等級(jí)那么多)
# notice (適量的信息,基本上是你生產(chǎn)環(huán)境中需要的)
# warning (只有很重要/嚴(yán)重的信息會(huì)記錄下來)
loglevel notice

# 指明日志文件名。也可以使用"stdout"來強(qiáng)制讓Redis把日志信息寫到標(biāo)準(zhǔn)輸出上。
# 注意:如果Redis以守護(hù)進(jìn)程方式運(yùn)行,而設(shè)置日志顯示到標(biāo)準(zhǔn)輸出的話,日志會(huì)發(fā)送到/dev/null
logfile "redis.log"

# 要使用系統(tǒng)日志記錄器,只要設(shè)置 "syslog-enabled" 為 "yes" 就可以了。
# 然后根據(jù)需要設(shè)置其他一些syslog參數(shù)就可以了。
# syslog-enabled no

# 指明syslog身份
# syslog-ident redis

# 指明syslog的設(shè)備。必須是user或LOCAL0 ~ LOCAL7之一。
# syslog-facility local0

# 設(shè)置數(shù)據(jù)庫個(gè)數(shù)。默認(rèn)數(shù)據(jù)庫是 DB 0,
# 可以通過select <dbid>  (0 <= dbid <= 'databases' - 1 )來為每個(gè)連接使用不同的數(shù)據(jù)庫。
databases 16

################################ SNAPSHOTTING  ################################
#
# 把數(shù)據(jù)庫存到磁盤上:
#
#   save <seconds> <changes>
#   
#   會(huì)在指定秒數(shù)和數(shù)據(jù)變化次數(shù)之后把數(shù)據(jù)庫寫到磁盤上。
#
#   下面的例子將會(huì)進(jìn)行把數(shù)據(jù)寫入磁盤的操作:
#   900秒(15分鐘)之后,且至少1次變更
#   300秒(5分鐘)之后,且至少10次變更
#   60秒之后,且至少10000次變更
#
#   注意:你要想不寫磁盤的話就把所有 "save" 設(shè)置注釋掉就行了。
#
#   通過添加一條帶空字符串參數(shù)的save指令也能移除之前所有配置的save指令
#   像下面的例子:
#   save "" 

save 900 1
save 300 10
save 60 10000

# 默認(rèn)如果開啟RDB快照(至少一條save指令)并且最新的后臺(tái)保存失敗,Redis將會(huì)停止接受寫操作
# 這將使用戶知道數(shù)據(jù)沒有正確的持久化到硬盤,否則可能沒人注意到并且造成一些災(zāi)難。
#
# 如果后臺(tái)保存進(jìn)程能重新開始工作,Redis將自動(dòng)允許寫操作
#
# 然而如果你已經(jīng)部署了適當(dāng)?shù)腞edis服務(wù)器和持久化的監(jiān)控,你可能想關(guān)掉這個(gè)功能以便于即使是
# 硬盤,權(quán)限等出問題了Redis也能夠像平時(shí)一樣正常工作,
stop-writes-on-bgsave-error yes

# 當(dāng)導(dǎo)出到 .rdb 數(shù)據(jù)庫時(shí)是否用LZF壓縮字符串對(duì)象?
# 默認(rèn)設(shè)置為 "yes",因?yàn)閹缀踉谌魏吻闆r下它都是不錯(cuò)的。
# 如果你想節(jié)省CPU的話你可以把這個(gè)設(shè)置為 "no",但是如果你有可壓縮的key和value的話,
# 那數(shù)據(jù)文件就會(huì)更大了。
rdbcompression yes

# 因?yàn)榘姹?的RDB有一個(gè)CRC64算法的校驗(yàn)和放在了文件的最后。這將使文件格式更加可靠但在
# 生產(chǎn)和加載RDB文件時(shí),這有一個(gè)性能消耗(大約10%),所以你可以關(guān)掉它來獲取最好的性能。
#
# 生成的關(guān)閉校驗(yàn)的RDB文件有一個(gè)0的校驗(yàn)和,它將告訴加載代碼跳過檢查
rdbchecksum yes

# 持久化數(shù)據(jù)庫的文件名
dbfilename dump.rdb

# 工作目錄
#
# 數(shù)據(jù)庫會(huì)寫到這個(gè)目錄下,文件名就是上面的 "dbfilename" 的值。
# 
# 累加文件也放這里。
# 
# 注意你這里指定的必須是目錄,不是文件名。
dir ./

################################# REPLICATION #################################
# 主從同步。通過 slaveof 指令來實(shí)現(xiàn)Redis實(shí)例的備份。
# 注意,這里是本地從遠(yuǎn)端復(fù)制數(shù)據(jù)。也就是說,本地可以有不同的數(shù)據(jù)庫文件、綁定不同的IP、監(jiān)聽
# 不同的端口。
#
# slaveof <masterip> <masterport>

# 如果master設(shè)置了密碼保護(hù)(通過 "requirepass" 選項(xiàng)來配置),那么slave在開始同步之前必須
# 進(jìn)行身份驗(yàn)證,否則它的同步請(qǐng)求會(huì)被拒絕。
#
# masterauth <master-password>

# 當(dāng)一個(gè)slave失去和master的連接,或者同步正在進(jìn)行中,slave的行為有兩種可能:
#
# 1) 如果 slave-serve-stale-data 設(shè)置為 "yes" (默認(rèn)值),slave會(huì)繼續(xù)響應(yīng)客戶端請(qǐng)求,
#    可能是正常數(shù)據(jù),也可能是還沒獲得值的空數(shù)據(jù)。
# 2) 如果 slave-serve-stale-data 設(shè)置為 "no",slave會(huì)回復(fù)"正在從master同步
#   (SYNC with master in progress)"來處理各種請(qǐng)求,除了 INFO 和 SLAVEOF 命令。
#
slave-serve-stale-data yes

# 你可以配置salve實(shí)例是否接受寫操作??蓪懙膕lave實(shí)例可能對(duì)存儲(chǔ)臨時(shí)數(shù)據(jù)比較有用(因?yàn)閷懭雜alve
# 的數(shù)據(jù)在同master同步之后將很容被刪除),但是如果客戶端由于配置錯(cuò)誤在寫入時(shí)也可能產(chǎn)生一些問題。
#
# 從Redis2.6默認(rèn)所有的slave為只讀
#
# 注意:只讀的slave不是為了暴露給互聯(lián)網(wǎng)上不可信的客戶端而設(shè)計(jì)的。它只是一個(gè)防止實(shí)例誤用的保護(hù)層。
# 一個(gè)只讀的slave支持所有的管理命令比如config,debug等。為了限制你可以用'rename-command'來
# 隱藏所有的管理和危險(xiǎn)命令來增強(qiáng)只讀slave的安全性
slave-read-only yes

# slave根據(jù)指定的時(shí)間間隔向master發(fā)送ping請(qǐng)求。
# 時(shí)間間隔可以通過 repl_ping_slave_period 來設(shè)置。
# 默認(rèn)10秒。
#
# repl-ping-slave-period 10

# 以下選項(xiàng)設(shè)置同步的超時(shí)時(shí)間
#
# 1)slave在與master SYNC期間有大量數(shù)據(jù)傳輸,造成超時(shí)
# 2)在slave角度,master超時(shí),包括數(shù)據(jù)、ping等
# 3)在master角度,slave超時(shí),當(dāng)master發(fā)送REPLCONF ACK pings
# 
# 確保這個(gè)值大于指定的repl-ping-slave-period,否則在主從間流量不高時(shí)每次都會(huì)檢測(cè)到超時(shí)
#
# repl-timeout 60

# 是否在slave套接字發(fā)送SYNC之后禁用 TCP_NODELAY ?
#
# 如果你選擇“yes”Redis將使用更少的TCP包和帶寬來向slaves發(fā)送數(shù)據(jù)。但是這將使數(shù)據(jù)傳輸?shù)絪lave
# 上有延遲,Linux內(nèi)核的默認(rèn)配置會(huì)達(dá)到40毫秒
#
# 如果你選擇了 "no" 數(shù)據(jù)傳輸?shù)絪alve的延遲將會(huì)減少但要使用更多的帶寬
#
# 默認(rèn)我們會(huì)為低延遲做優(yōu)化,但高流量情況或主從之間的跳數(shù)過多時(shí),把這個(gè)選項(xiàng)設(shè)置為“yes”
# 是個(gè)不錯(cuò)的選擇。
repl-disable-tcp-nodelay no

# 設(shè)置數(shù)據(jù)備份的backlog大小。backlog是一個(gè)slave在一段時(shí)間內(nèi)斷開連接時(shí)記錄salve數(shù)據(jù)的緩沖,
# 所以一個(gè)slave在重新連接時(shí),不必要全量的同步,而是一個(gè)增量同步就足夠了,將在斷開連接的這段
# 時(shí)間內(nèi)slave丟失的部分?jǐn)?shù)據(jù)傳送給它。
#
# 同步的backlog越大,slave能夠進(jìn)行增量同步并且允許斷開連接的時(shí)間就越長(zhǎng)。
#
# backlog只分配一次并且至少需要一個(gè)slave連接
#
# repl-backlog-size 1mb

# 當(dāng)master在一段時(shí)間內(nèi)不再與任何slave連接,backlog將會(huì)釋放。以下選項(xiàng)配置了從最后一個(gè)
# slave斷開開始計(jì)時(shí)多少秒后,backlog緩沖將會(huì)釋放。
#
# 0表示永不釋放backlog
#
# repl-backlog-ttl 3600

# slave的優(yōu)先級(jí)是一個(gè)整數(shù)展示在Redis的Info輸出中。如果master不再正常工作了,哨兵將用它來
# 選擇一個(gè)slave提升=升為master。
#
# 優(yōu)先級(jí)數(shù)字小的salve會(huì)優(yōu)先考慮提升為master,所以例如有三個(gè)slave優(yōu)先級(jí)分別為10,100,25,
# 哨兵將挑選優(yōu)先級(jí)最小數(shù)字為10的slave。
#
# 0作為一個(gè)特殊的優(yōu)先級(jí),標(biāo)識(shí)這個(gè)slave不能作為master,所以一個(gè)優(yōu)先級(jí)為0的slave永遠(yuǎn)不會(huì)被
# 哨兵挑選提升為master
#
# 默認(rèn)優(yōu)先級(jí)為100
slave-priority 100

# 如果master少于N個(gè)延時(shí)小于等于M秒的已連接slave,就可以停止接收寫操作。
#
# N個(gè)slave需要是“oneline”狀態(tài)
#
# 延時(shí)是以秒為單位,并且必須小于等于指定值,是從最后一個(gè)從slave接收到的ping(通常每秒發(fā)送)
# 開始計(jì)數(shù)。
#
# This option does not GUARANTEES that N replicas will accept the write, but
# will limit the window of exposure for lost writes in case not enough slaves
# are available, to the specified number of seconds.
#
# 例如至少需要3個(gè)延時(shí)小于等于10秒的slave用下面的指令:
#
# min-slaves-to-write 3
# min-slaves-max-lag 10
#
# 兩者之一設(shè)置為0將禁用這個(gè)功能。
#
# 默認(rèn) min-slaves-to-write 值是0(該功能禁用)并且 min-slaves-max-lag 值是10。

################################## SECURITY ###################################

# 要求客戶端在處理任何命令時(shí)都要驗(yàn)證身份和密碼。
# 這個(gè)功能在有你不信任的其它客戶端能夠訪問redis服務(wù)器的環(huán)境里非常有用。
#

# 為了向后兼容的話這段應(yīng)該注釋掉。而且大多數(shù)人不需要身份驗(yàn)證(例如:它們運(yùn)行在自己的服務(wù)器上)
# 
# 警告:因?yàn)镽edis太快了,所以外面的人可以嘗試每秒150k的密碼來試圖破解密碼。這意味著你需要
# 一個(gè)高強(qiáng)度的密碼,否則破解太容易了。
#
requirepass 123

# 命令重命名
#
# 在共享環(huán)境下,可以為危險(xiǎn)命令改變名字。比如,你可以為 CONFIG 改個(gè)其他不太容易猜到的名字,
# 這樣內(nèi)部的工具仍然可以使用,而普通的客戶端將不行。
#
# 例如:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 也可以通過改名為空字符串來完全禁用一個(gè)命令
#
# rename-command CONFIG ""
#
# 請(qǐng)注意:改變命令名字被記錄到AOF文件或被傳送到從服務(wù)器可能產(chǎn)生問題。

################################### LIMITS ####################################

# 設(shè)置最多同時(shí)連接的客戶端數(shù)量。默認(rèn)這個(gè)限制是10000個(gè)客戶端,然而如果Redis服務(wù)器不能配置
# 處理文件的限制數(shù)來滿足指定的值,那么最大的客戶端連接數(shù)就被設(shè)置成當(dāng)前文件限制數(shù)減32(因
# 為Redis服務(wù)器保留了一些文件描述符作為內(nèi)部使用)
#
# 一旦達(dá)到這個(gè)限制,Redis會(huì)關(guān)閉所有新連接并發(fā)送錯(cuò)誤'max number of clients reached'
#
# maxclients 10000

# 不要用比設(shè)置的上限更多的內(nèi)存。一旦內(nèi)存使用達(dá)到上限,Redis會(huì)根據(jù)選定的回收策略(參見:
# maxmemmory-policy)刪除key
#
# 如果因?yàn)閯h除策略Redis無法刪除key,或者策略設(shè)置為 "noeviction",Redis會(huì)回復(fù)需要更
# 多內(nèi)存的錯(cuò)誤信息給命令。例如,SET,LPUSH等等,但是會(huì)繼續(xù)響應(yīng)像Get這樣的只讀命令。
#
# 在使用Redis作為L(zhǎng)RU緩存,或者為實(shí)例設(shè)置了硬性內(nèi)存限制的時(shí)候(使用 "noeviction" 策略)
# 的時(shí)候,這個(gè)選項(xiàng)通常事很有用的。
#
# 警告:當(dāng)有多個(gè)slave連上達(dá)到內(nèi)存上限的實(shí)例時(shí),master為同步slave的輸出緩沖區(qū)所需
# 內(nèi)存不計(jì)算在使用內(nèi)存中。這樣當(dāng)驅(qū)逐key時(shí),就不會(huì)因網(wǎng)絡(luò)問題 / 重新同步事件觸發(fā)驅(qū)逐key
# 的循環(huán),反過來slaves的輸出緩沖區(qū)充滿了key被驅(qū)逐的DEL命令,這將觸發(fā)刪除更多的key,
# 直到這個(gè)數(shù)據(jù)庫完全被清空為止
# 
# 總之...如果你需要附加多個(gè)slave,建議你設(shè)置一個(gè)稍小maxmemory限制,這樣系統(tǒng)就會(huì)有空閑
# 的內(nèi)存作為slave的輸出緩存區(qū)(但是如果最大內(nèi)存策略設(shè)置為"noeviction"的話就沒必要了)
#
# maxmemory <bytes>

# 最大內(nèi)存策略:如果達(dá)到內(nèi)存限制了,Redis如何選擇刪除key。你可以在下面五個(gè)行為里選:
# 
# volatile-lru -> 根據(jù)LRU算法生成的過期時(shí)間來刪除。
# allkeys-lru -> 根據(jù)LRU算法刪除任何key。
# volatile-random -> 根據(jù)過期設(shè)置來隨機(jī)刪除key。 
# allkeys->random -> 無差別隨機(jī)刪。 
# volatile-ttl -> 根據(jù)最近過期時(shí)間來刪除(輔以TTL) 
# noeviction -> 誰也不刪,直接在寫操作時(shí)返回錯(cuò)誤。
# 
# 注意:對(duì)所有策略來說,如果Redis找不到合適的可以刪除的key都會(huì)在寫操作時(shí)返回一個(gè)錯(cuò)誤。
#

#       目前為止涉及的命令: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
#

# 默認(rèn)值如下:
#
# maxmemory-policy volatile-lru

# LRU和最小TTL算法的實(shí)現(xiàn)都不是很精確,但是很接近(為了省內(nèi)存),所以你可以用樣本量做檢測(cè)。
# 例如:默認(rèn)Redis會(huì)檢查3個(gè)key然后取最舊的那個(gè),你可以通過下面的配置指令來設(shè)置樣本的個(gè)數(shù)。
#
# maxmemory-samples 3

############################## APPEND ONLY MODE ###############################

# 默認(rèn)情況下,Redis是異步的把數(shù)據(jù)導(dǎo)出到磁盤上。這種模式在很多應(yīng)用里已經(jīng)足夠好,但Redis進(jìn)程
# 出問題或斷電時(shí)可能造成一段時(shí)間的寫操作丟失(這取決于配置的save指令)。
#
# AOF是一種提供了更可靠的替代持久化模式,例如使用默認(rèn)的數(shù)據(jù)寫入文件策略(參見后面的配置)
# 在遇到像服務(wù)器斷電或單寫情況下Redis自身進(jìn)程出問題但操作系統(tǒng)仍正常運(yùn)行等突發(fā)事件時(shí),Redis
# 能只丟失1秒的寫操作。
#
# AOF和RDB持久化能同時(shí)啟動(dòng)并且不會(huì)有問題。
# 如果AOF開啟,那么在啟動(dòng)時(shí)Redis將加載AOF文件,它更能保證數(shù)據(jù)的可靠性。
#
# 請(qǐng)查看 http://redis.io/topics/persistence 來獲取更多信息.

appendonly no

# 純累加文件名字(默認(rèn):"appendonly.aof")

appendfilename "appendonly.aof"

# fsync() 系統(tǒng)調(diào)用告訴操作系統(tǒng)把數(shù)據(jù)寫到磁盤上,而不是等更多的數(shù)據(jù)進(jìn)入輸出緩沖區(qū)。
# 有些操作系統(tǒng)會(huì)真的把數(shù)據(jù)馬上刷到磁盤上;有些則會(huì)盡快去嘗試這么做。
#
# Redis支持三種不同的模式:
#
# no:不要立刻刷,只有在操作系統(tǒng)需要刷的時(shí)候再刷。比較快。
# always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。
# everysec:每秒寫一次。折中方案。 
#
# 默認(rèn)的 "everysec" 通常來說能在速度和數(shù)據(jù)安全性之間取得比較好的平衡。根據(jù)你的理解來
# 決定,如果你能放寬該配置為"no" 來獲取更好的性能(但如果你能忍受一些數(shù)據(jù)丟失,可以考慮使用
# 默認(rèn)的快照持久化模式),或者相反,用“always”會(huì)比較慢但比everysec要更安全。
#
# 請(qǐng)查看下面的文章來獲取更多的細(xì)節(jié)
# http://antirez.com/post/redis-persistence-demystified.html 
# 
# 如果不能確定,就用 "everysec"

# appendfsync always
appendfsync everysec
# appendfsync no

# 如果AOF的同步策略設(shè)置成 "always" 或者 "everysec",并且后臺(tái)的存儲(chǔ)進(jìn)程(后臺(tái)存儲(chǔ)或?qū)懭階OF
# 日志)會(huì)產(chǎn)生很多磁盤I/O開銷。某些Linux的配置下會(huì)使Redis因?yàn)?fsync()系統(tǒng)調(diào)用而阻塞很久。
# 注意,目前對(duì)這個(gè)情況還沒有完美修正,甚至不同線程的 fsync() 會(huì)阻塞我們同步的write(2)調(diào)用。
#
# 為了緩解這個(gè)問題,可以用下面這個(gè)選項(xiàng)。它可以在 BGSAVE 或 BGREWRITEAOF 處理時(shí)阻止fsync()。
# 
# 這就意味著如果有子進(jìn)程在進(jìn)行保存操作,那么Redis就處于"不可同步"的狀態(tài)。
# 這實(shí)際上是說,在最差的情況下可能會(huì)丟掉30秒鐘的日志數(shù)據(jù)。(默認(rèn)Linux設(shè)定)
# 
# 如果把這個(gè)設(shè)置成"yes"帶來了延遲問題,就保持"no",這是保存持久數(shù)據(jù)的最安全的方式。

no-appendfsync-on-rewrite no

# 自動(dòng)重寫AOF文件
# 如果AOF日志文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動(dòng)重寫AOF日志文件。
# 
# 工作原理:Redis記住上次重寫時(shí)AOF文件的大?。ㄈ绻貑⒑筮€沒有寫操作,就直接用啟動(dòng)時(shí)的AOF大小)
# 
# 這個(gè)基準(zhǔn)大小和當(dāng)前大小做比較。如果當(dāng)前大小超過指定比例,就會(huì)觸發(fā)重寫操作。你還需要指定被重寫
# 日志的最小尺寸,這樣避免了達(dá)到指定百分比但尺寸仍然很小的情況還要重寫。
#
# 指定百分比為0會(huì)禁用AOF自動(dòng)重寫特性。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

################################ LUA SCRIPTING  ###############################

# Lua 腳本的最大執(zhí)行時(shí)間,毫秒為單位
#
# 如果達(dá)到了最大的執(zhí)行時(shí)間,Redis將要記錄在達(dá)到最大允許時(shí)間之后一個(gè)腳本仍然在執(zhí)行,并且將
# 開始對(duì)查詢進(jìn)行錯(cuò)誤響應(yīng)。
#
# 當(dāng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的腳本超過了最大執(zhí)行時(shí)間,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 兩個(gè)
# 命令可用。第一個(gè)可以用于停止一個(gè)還沒有調(diào)用寫命名的腳本。第二個(gè)是關(guān)閉服務(wù)器唯一方式,當(dāng)
# 寫命令已經(jīng)通過腳本開始執(zhí)行,并且用戶不想等到腳本的自然終止。
#
# 設(shè)置成0或者負(fù)值表示不限制執(zhí)行時(shí)間并且沒有任何警告
lua-time-limit 5000

################################## SLOW LOG ###################################

# Redis慢查詢?nèi)罩究梢杂涗洺^指定時(shí)間的查詢。運(yùn)行時(shí)間不包括各種I/O時(shí)間,例如:連接客戶端,
# 發(fā)送響應(yīng)數(shù)據(jù)等,而只計(jì)算命令執(zhí)行的實(shí)際時(shí)間(這只是線程阻塞而無法同時(shí)為其他請(qǐng)求服務(wù)的命令執(zhí)
# 行階段)
# 
# 你可以為慢查詢?nèi)罩九渲脙蓚€(gè)參數(shù):一個(gè)指明Redis的超時(shí)時(shí)間(單位為微秒)來記錄超過這個(gè)時(shí)間的命令
# 另一個(gè)是慢查詢?nèi)罩鹃L(zhǎng)度。當(dāng)一個(gè)新的命令被寫進(jìn)日志的時(shí)候,最老的那個(gè)記錄從隊(duì)列中移除。
#
# 下面的時(shí)間單位是微秒,所以1000000就是1秒。注意,負(fù)數(shù)時(shí)間會(huì)禁用慢查詢?nèi)罩?,?則會(huì)強(qiáng)制記錄
# 所有命令。
slowlog-log-slower-than 10000

# 這個(gè)長(zhǎng)度沒有限制。只是要主要會(huì)消耗內(nèi)存。你可以通過 SLOWLOG RESET 來回收內(nèi)存。
slowlog-max-len 128

############################# Event notification ##############################

# Redis 能通知 Pub/Sub 客戶端關(guān)于鍵空間發(fā)生的事件
# 這個(gè)功能文檔位于http://redis.io/topics/keyspace-events
#
# 例如:如果鍵空間事件通知被開啟,并且客戶端對(duì) 0 號(hào)數(shù)據(jù)庫的鍵 foo 執(zhí)行 DEL 命令時(shí),將通過
# Pub/Sub發(fā)布兩條消息:
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# 可以在下表中選擇Redis要通知的事件類型。事件類型由單個(gè)字符來標(biāo)識(shí):
#
# K    鍵空間通知,以__keyspace@<db>__為前綴
# E    鍵事件通知,以__keysevent@<db>__為前綴
# g    DEL , EXPIRE , RENAME 等類型無關(guān)的通用命令的通知, ...
# $    String命令
# l    List命令
# s    Set命令
# h    Hash命令
# z    有序集合命令
# x    過期事件(每次key過期時(shí)生成)
# e    驅(qū)逐事件(當(dāng)key在內(nèi)存滿了被清除時(shí)生成)
# A    g$lshzxe的別名,因此”AKE”意味著所有的事件
#
# notify-keyspace-events 帶一個(gè)由0到多個(gè)字符組成的字符串參數(shù)??兆址馑际峭ㄖ唤?。
#
# 例子:?jiǎn)⒂肔ist和通用事件通知:
# notify-keyspace-events Elg
#
# 例子2:為了獲取過期key的通知訂閱名字為 __keyevent@__:expired 的頻道,用以下配置
# notify-keyspace-events Ex
#
# 默認(rèn)所用的通知被禁用,因?yàn)橛脩敉ǔ2恍枰撎匦裕⑶以撎匦詴?huì)有性能損耗。
# 注意如果你不指定至少K或E之一,不會(huì)發(fā)送任何事件。
notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################

# 當(dāng)hash只有少量的entry時(shí),并且最大的entry所占空間沒有超過指定的限制時(shí),會(huì)用一種節(jié)省內(nèi)存的
# 數(shù)據(jù)結(jié)構(gòu)來編碼??梢酝ㄟ^下面的指令來設(shè)定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 與hash似,數(shù)據(jù)元素較少的list,可以用另一種方式來編碼從而節(jié)省大量空間。
# 這種特殊的方式只有在符合下面限制時(shí)才可以用:
list-max-ziplist-entries 512
list-max-ziplist-value 64

# set有一種特殊編碼的情況:當(dāng)set數(shù)據(jù)全是十進(jìn)制64位有符號(hào)整型數(shù)字構(gòu)成的字符串時(shí)。
# 下面這個(gè)配置項(xiàng)就是用來設(shè)置set使用這種編碼來節(jié)省內(nèi)存的最大長(zhǎng)度。
set-max-intset-entries 512

# 與hash和list相似,有序集合也可以用一種特別的編碼方式來節(jié)省大量空間。
# 這種編碼只適合長(zhǎng)度和元素都小于下面限制的有序集合:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog sparse representation bytes limit. The limit includes the
# 16 bytes header. When an HyperLogLog using the sparse representation crosses
# this limit, it is converted into the dense representation.
#
# A value greater than 16000 is totally useless, since at that point the
# dense representation is more memory efficient.
# 
# The suggested value is ~ 3000 in order to have the benefits of
# the space efficient encoding without slowing down too much PFADD,
# which is O(N) with the sparse encoding. The value can be raised to
# ~ 10000 when CPU is not a concern, but space is, and the data set is
# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
hll-sparse-max-bytes 3000

# 啟用哈希刷新,每100個(gè)CPU毫秒會(huì)拿出1個(gè)毫秒來刷新Redis的主哈希表(頂級(jí)鍵值映射表)。
# redis所用的哈希表實(shí)現(xiàn)(見dict.c)采用延遲哈希刷新機(jī)制:你對(duì)一個(gè)哈希表操作越多,哈希刷新
# 操作就越頻繁;反之,如果服務(wù)器是空閑的,那么哈希刷新就不會(huì)完成,哈希表就會(huì)占用更多的一些
# 內(nèi)存而已。
# 
# 默認(rèn)是每秒鐘進(jìn)行10次哈希表刷新,用來刷新字典,然后盡快釋放內(nèi)存。
#
# 建議:
# 如果你對(duì)延遲比較在意,不能夠接受Redis時(shí)不時(shí)的對(duì)請(qǐng)求有2毫秒的延遲的話,就用
# "activerehashing no",如果不太在意延遲而希望盡快釋放內(nèi)存就設(shè)置"activerehashing yes"
activerehashing yes

# 客戶端的輸出緩沖區(qū)的限制,可用于強(qiáng)制斷開那些因?yàn)槟撤N原因從服務(wù)器讀取數(shù)據(jù)的速度不夠快的客戶端,
# (一個(gè)常見的原因是一個(gè)發(fā)布/訂閱客戶端消費(fèi)消息的速度無法趕上生產(chǎn)它們的速度)
#
# 可以對(duì)三種不同的客戶端設(shè)置不同的限制:
# normal -> 正常客戶端
# slave -> slave和 MONITOR 客戶端
# pubsub -> 至少訂閱了一個(gè)pubsub channel或pattern的客戶端
#
# 下面是每個(gè)client-output-buffer-limit語法:
# client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>

# 一旦達(dá)到硬限制客戶端會(huì)立即被斷開,或者達(dá)到軟限制并持續(xù)達(dá)到指定的秒數(shù)(連續(xù)的)。
# 例如,如果硬限制為32兆字節(jié)和軟限制為16兆字節(jié)/10秒,客戶端將會(huì)立即斷開
# 如果輸出緩沖區(qū)的大小達(dá)到32兆字節(jié),或客戶端達(dá)到16兆字節(jié)并連續(xù)超過了限制10秒,就將斷開連接。
#
# 默認(rèn)normal客戶端不做限制,因?yàn)樗麄冊(cè)诓恢鲃?dòng)請(qǐng)求時(shí)不接收數(shù)據(jù)(以推的方式),只有異步客戶端
# 可能會(huì)出現(xiàn)請(qǐng)求數(shù)據(jù)的速度比它可以讀取的速度快的場(chǎng)景。
#
# pubsub和slave客戶端會(huì)有一個(gè)默認(rèn)值,因?yàn)橛嗛喺吆蛃laves以推的方式來接收數(shù)據(jù)
#
# 把硬限制和軟限制都設(shè)置為0來禁用該功能
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Redis調(diào)用內(nèi)部函數(shù)來執(zhí)行許多后臺(tái)任務(wù),如關(guān)閉客戶端超時(shí)的連接,清除未被請(qǐng)求過的過期Key等等。
#
# 不是所有的任務(wù)都以相同的頻率執(zhí)行,但Redis依照指定的“hz”值來執(zhí)行檢查任務(wù)。
#
# 默認(rèn)情況下,“hz”的被設(shè)定為10。提高該值將在Redis空閑時(shí)使用更多的CPU時(shí),但同時(shí)當(dāng)有多個(gè)key
# 同時(shí)到期會(huì)使Redis的反應(yīng)更靈敏,以及超時(shí)可以更精確地處理。
#
# 范圍是1到500之間,但是值超過100通常不是一個(gè)好主意。
# 大多數(shù)用戶應(yīng)該使用10這個(gè)默認(rèn)值,只有在非常低的延遲要求時(shí)有必要提高到100。
hz 10

# 當(dāng)一個(gè)子進(jìn)程重寫AOF文件時(shí),如果啟用下面的選項(xiàng),則文件每生成32M數(shù)據(jù)會(huì)被同步。為了增量式的
# 寫入硬盤并且避免大的延遲高峰這個(gè)指令是非常有用的
aof-rewrite-incremental-fsync yes
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容