redis配置文件詳解

Redis 配置文件示例
 
 注意單位: 當需要配置內存大小時, 可能需要指定像1k,5GB,4M等常見格式

 1k => 1000 bytes
 1kb => 1024 bytes
 1m => 1000000 bytes
 1mb => 1024*1024 bytes
 1g => 1000000000 bytes
 1gb => 1024*1024*1024 bytes

 單位是對大小寫不敏感的 1GB 1Gb 1gB 是相同的。
 
 INCLUDES 
 
 可以在這裏包含一個或多個其他的配置文件。如果你有一個適用於所有Redis服務器的標準配置模板
 但也需要一些每個服務器自定義的設置,這個功能將很有用。被包含的配置文件也可以包含其他配置文件,
 所以需要謹慎的使用這個功能。

 注意“inclue”選項不能被admin或Redis哨兵的"CONFIG REWRITE"命令重寫。
 因爲Redis總是使用最後解析的配置行最爲配置指令的值, 你最好在這個文件的開頭配置includes來
 避免它在運行時重寫配置。
 如果相反你想用includes的配置覆蓋原來的配置,你最好在該文件的最後使用include

 include /path/to/local.conf
 include /path/to/other.conf
 
 GENERAL  
 
 默認Rdis不會作爲守護進程運行。如果需要的話配置成'yes'
 注意配置成守護進程後Redis會將進程號寫入文件/var/run/redis.pid
daemonize no
 
 當以守護進程方式運行時,默認Redis會把進程ID寫到 /var/run/redis.pid。你可以在這裏修改路徑。
pidfile /var/run/redis.pid
 
 接受連接的特定端口,默認是6379
 如果端口設置爲0,Redis就不會監聽TCP套接字。
port 6379
 
 TCP listen() backlog.

 在高併發環境下你需要一個高backlog值來避免慢客戶端連接問題。注意Linux內核默默地將這個值減小
 到/proc/sys/net/core/somaxconn的值,所以需要確認增大somaxconn和tcp_max_syn_backlog
 兩個值來達到想要的效果。
tcp-backlog 511
 
 默認Redis監聽服務器上所有可用網絡接口的連接。可以用"bind"配置指令跟一個或多個ip地址來實現
 監聽一個或多個網絡接口

 示例:

 bind 192.168.1.100 10.0.0.1
 bind 127.0.0.1
 
 指定用來監聽Unix套套接字的路徑。沒有默認值, 所以在沒有指定的情況下Redis不會監聽Unix套接字

 unixsocket /tmp/redis.sock
 unixsocketperm 755
 
 一個客戶端空閒多少秒後關閉連接。(0代表禁用,永不關閉)
timeout 0
 
 TCP keepalive.

 如果非零,則設置SO_KEEPALIVE選項來向空閒連接的客戶端發送ACK,由於以下兩個原因這是很有用的:

 1)能夠檢測無響應的對端
 2)讓該連接中間的網絡設備知道這個連接還存活

 在Linux上,這個指定的值(單位:秒)就是發送ACK的時間間隔。
 注意:要關閉這個連接需要兩倍的這個時間值。
 在其他內核上這個時間間隔由內核配置決定

 這個選項的一個合理值是60秒
tcp-keepalive 0
 
 指定服務器調試等級
 可能值:
 debug (大量信息,對開發/測試有用)
 verbose (很多精簡的有用信息,但是不像debug等級那麼多)
 notice (適量的信息,基本上是你生產環境中需要的)
 warning (只有很重要/嚴重的信息會記錄下來)
loglevel notice
 
 指明日誌文件名。也可以使用"stdout"來強制讓Redis把日誌信息寫到標準輸出上。
 注意:如果Redis以守護進程方式運行,而設置日誌顯示到標準輸出的話,日誌會發送到/dev/null
logfile ""
 
 要使用系統日誌記錄器,只要設置 "syslog-enabled" 爲 "yes" 就可以了。
 然後根據需要設置其他一些syslog參數就可以了。
 syslog-enabled no
 
 指明syslog身份
 syslog-ident redis
 
 指明syslog的設備。必須是user或LOCAL0 ~ LOCAL7之一。
 syslog-facility local0
 
 設置數據庫個數。默認數據庫是 DB 0,
 可以通過select <dbid>  (0 <= dbid <= 'databases' - 1 )來爲每個連接使用不同的數據庫。
databases 16
 
 SNAPSHOTTING  

 把數據庫存到磁盤上:

   save <seconds> <changes>
   
   會在指定秒數和數據變化次數之後把數據庫寫到磁盤上。

   下面的例子將會進行把數據寫入磁盤的操作:
   900秒(15分鐘)之後,且至少1次變更
   300秒(5分鐘)之後,且至少10次變更
   60秒之後,且至少10000次變更

   注意:你要想不寫磁盤的話就把所有 "save" 設置註釋掉就行了。

   通過添加一條帶空字符串參數的save指令也能移除之前所有配置的save指令
   像下面的例子:
   save "" 
 
save 900 1
save 300 10
save 60 10000
 
 默認如果開啓RDB快照(至少一條save指令)並且最新的後臺保存失敗,Redis將會停止接受寫操作
 這將使用戶知道數據沒有正確的持久化到硬盤,否則可能沒人注意到並且造成一些災難。

 如果後臺保存進程能重新開始工作,Redis將自動允許寫操作

 然而如果你已經部署了適當的Redis服務器和持久化的監控,你可能想關掉這個功能以便於即使是
 硬盤,權限等出問題了Redis也能夠像平時一樣正常工作,
stop-writes-on-bgsave-error yes
 
 當導出到 .rdb 數據庫時是否用LZF壓縮字符串對象?
 默認設置爲 "yes",因爲幾乎在任何情況下它都是不錯的。
 如果你想節省CPU的話你可以把這個設置爲 "no",但是如果你有可壓縮的key和value的話,
 那數據文件就會更大了。
rdbcompression yes
 
 因爲版本5的RDB有一個CRC64算法的校驗和放在了文件的最後。這將使文件格式更加可靠但在
 生產和加載RDB文件時,這有一個性能消耗(大約10%),所以你可以關掉它來獲取最好的性能。

 生成的關閉校驗的RDB文件有一個0的校驗和,它將告訴加載代碼跳過檢查
rdbchecksum yes
 
 持久化數據庫的文件名
dbfilename dump.rdb
 
 工作目錄

 數據庫會寫到這個目錄下,文件名就是上面的 "dbfilename" 的值。
 
 累加文件也放這裏。
 
 注意你這裏指定的必須是目錄,不是文件名。
dir ./
 
 REPLICATION 
 主從同步。通過 slaveof 指令來實現Redis實例的備份。
 注意,這裏是本地從遠端複製數據。也就是說,本地可以有不同的數據庫文件、綁定不同的IP、監聽
 不同的端口。

 slaveof <masterip> <masterport>
 
 如果master設置了密碼保護(通過 "requirepass" 選項來配置),那麼slave在開始同步之前必須
 進行身份驗證,否則它的同步請求會被拒絕。

 masterauth <master-password>
 
 當一個slave失去和master的連接,或者同步正在進行中,slave的行爲有兩種可能:

 1) 如果 slave-serve-stale-data 設置爲 "yes" (默認值),slave會繼續響應客戶端請求,
    可能是正常數據,也可能是還沒獲得值的空數據。
 2) 如果 slave-serve-stale-data 設置爲 "no",slave會回覆"正在從master同步
   (SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。

slave-serve-stale-data yes
 
 你可以配置salve實例是否接受寫操作。可寫的slave實例可能對存儲臨時數據比較有用(因爲寫入salve
 的數據在同master同步之後將很容被刪除),但是如果客戶端由於配置錯誤在寫入時也可能產生一些問題。

 從Redis2.6默認所有的slave爲只讀

 注意:只讀的slave不是爲了暴露給互聯網上不可信的客戶端而設計的。它只是一個防止實例誤用的保護層。
 一個只讀的slave支持所有的管理命令比如config,debug等。爲了限制你可以用'rename-command'來
 隱藏所有的管理和危險命令來增強只讀slave的安全性
slave-read-only yes
 
 slave根據指定的時間間隔向master發送ping請求。
 時間間隔可以通過 repl_ping_slave_period 來設置。
 默認10秒。

 repl-ping-slave-period 10
 
 以下選項設置同步的超時時間

 1)slave在與master SYNC期間有大量數據傳輸,造成超時
 2)在slave角度,master超時,包括數據、ping等
 3)在master角度,slave超時,當master發送REPLCONF ACK pings
 
 確保這個值大於指定的repl-ping-slave-period,否則在主從間流量不高時每次都會檢測到超時

 repl-timeout 60
 
 是否在slave套接字發送SYNC之後禁用 TCP_NODELAY ?

 如果你選擇“yes”Redis將使用更少的TCP包和帶寬來向slaves發送數據。但是這將使數據傳輸到slave
 上有延遲,Linux內核的默認配置會達到40毫秒

 如果你選擇了 "no" 數據傳輸到salve的延遲將會減少但要使用更多的帶寬

 默認我們會爲低延遲做優化,但高流量情況或主從之間的跳數過多時,把這個選項設置爲“yes”
 是個不錯的選擇。
repl-disable-tcp-nodelay no
 
 設置數據備份的backlog大小。backlog是一個slave在一段時間內斷開連接時記錄salve數據的緩衝,
 所以一個slave在重新連接時,不必要全量的同步,而是一個增量同步就足夠了,將在斷開連接的這段
 時間內slave丟失的部分數據傳送給它。

 同步的backlog越大,slave能夠進行增量同步並且允許斷開連接的時間就越長。

 backlog只分配一次並且至少需要一個slave連接

 repl-backlog-size 1mb
 
 當master在一段時間內不再與任何slave連接,backlog將會釋放。以下選項配置了從最後一個
 slave斷開開始計時多少秒後,backlog緩衝將會釋放。

 0表示永不釋放backlog

 repl-backlog-ttl 3600
 
 slave的優先級是一個整數展示在Redis的Info輸出中。如果master不再正常工作了,哨兵將用它來
 選擇一個slave提升=升爲master。

 優先級數字小的salve會優先考慮提升爲master,所以例如有三個slave優先級分別爲10,100,25,
 哨兵將挑選優先級最小數字爲10的slave。

 0作爲一個特殊的優先級,標識這個slave不能作爲master,所以一個優先級爲0的slave永遠不會被
 哨兵挑選提升爲master

 默認優先級爲100
slave-priority 100
 
 如果master少於N個延時小於等於M秒的已連接slave,就可以停止接收寫操作。

 N個slave需要是“oneline”狀態

 延時是以秒爲單位,並且必須小於等於指定值,是從最後一個從slave接收到的ping(通常每秒發送)
 開始計數。

 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個延時小於等於10秒的slave用下面的指令:

 min-slaves-to-write 3
 min-slaves-max-lag 10

 兩者之一設置爲0將禁用這個功能。

 默認 min-slaves-to-write 值是0(該功能禁用)並且 min-slaves-max-lag 值是10。
 
 SECURITY 
 
 要求客戶端在處理任何命令時都要驗證身份和密碼。
 這個功能在有你不信任的其它客戶端能夠訪問redis服務器的環境裏非常有用。

 
 爲了向後兼容的話這段應該註釋掉。而且大多數人不需要身份驗證(例如:它們運行在自己的服務器上)
 
 警告:因爲Redis太快了,所以外面的人可以嘗試每秒150k的密碼來試圖破解密碼。這意味着你需要
 一個高強度的密碼,否則破解太容易了。

 requirepass foobared
 
 命令重命名

 在共享環境下,可以爲危險命令改變名字。比如,你可以爲 CONFIG 改個其他不太容易猜到的名字,
 這樣內部的工具仍然可以使用,而普通的客戶端將不行。

 例如:

 rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

 也可以通過改名爲空字符串來完全禁用一個命令

 rename-command CONFIG ""

 請注意:改變命令名字被記錄到AOF文件或被傳送到從服務器可能產生問題。
 
 LIMITS 
 
 設置最多同時連接的客戶端數量。默認這個限制是10000個客戶端,然而如果Redis服務器不能配置
 處理文件的限制數來滿足指定的值,那麼最大的客戶端連接數就被設置成當前文件限制數減32(因
 爲Redis服務器保留了一些文件描述符作爲內部使用)

 一旦達到這個限制,Redis會關閉所有新連接併發送錯誤'max number of clients reached'

 maxclients 10000
 
 不要用比設置的上限更多的內存。一旦內存使用達到上限,Redis會根據選定的回收策略(參見:
 maxmemmory-policy)刪除key

 如果因爲刪除策略Redis無法刪除key,或者策略設置爲 "noeviction",Redis會回覆需要更
 多內存的錯誤信息給命令。例如,SET,LPUSH等等,但是會繼續響應像Get這樣的只讀命令。

 在使用Redis作爲LRU緩存,或者爲實例設置了硬性內存限制的時候(使用 "noeviction" 策略)
 的時候,這個選項通常事很有用的。

 警告:當有多個slave連上達到內存上限的實例時,master爲同步slave的輸出緩衝區所需
 內存不計算在使用內存中。這樣當驅逐key時,就不會因網絡問題 / 重新同步事件觸發驅逐key
 的循環,反過來slaves的輸出緩衝區充滿了key被驅逐的DEL命令,這將觸發刪除更多的key,
 直到這個數據庫完全被清空爲止
 
 總之...如果你需要附加多個slave,建議你設置一個稍小maxmemory限制,這樣系統就會有空閒
 的內存作爲slave的輸出緩存區(但是如果最大內存策略設置爲"noeviction"的話就沒必要了)

 maxmemory <bytes>
 
 最大內存策略:如果達到內存限制了,Redis如何選擇刪除key。你可以在下面五個行爲裏選:
 
 volatile-lru -> 根據LRU算法生成的過期時間來刪除。
 allkeys-lru -> 根據LRU算法刪除任何key。
 volatile-random -> 根據過期設置來隨機刪除key。 
 allkeys->random -> 無差別隨機刪。 
 volatile-ttl -> 根據最近過期時間來刪除(輔以TTL) 
 noeviction -> 誰也不刪,直接在寫操作時返回錯誤。
 
 注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。

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

 
 默認值如下:

 maxmemory-policy volatile-lru
 
 LRU和最小TTL算法的實現都不是很精確,但是很接近(爲了省內存),所以你可以用樣本量做檢測。
 例如:默認Redis會檢查3個key然後取最舊的那個,你可以通過下面的配置指令來設置樣本的個數。

 maxmemory-samples 3
 
 APPEND ONLY MODE 
 
 默認情況下,Redis是異步的把數據導出到磁盤上。這種模式在很多應用裏已經足夠好,但Redis進程
 出問題或斷電時可能造成一段時間的寫操作丟失(這取決於配置的save指令)。

 AOF是一種提供了更可靠的替代持久化模式,例如使用默認的數據寫入文件策略(參見後面的配置)
 在遇到像服務器斷電或單寫情況下Redis自身進程出問題但操作系統仍正常運行等突發事件時,Redis
 能只丟失1秒的寫操作。

 AOF和RDB持久化能同時啓動並且不會有問題。
 如果AOF開啓,那麼在啓動時Redis將加載AOF文件,它更能保證數據的可靠性。

 請查看 http://redis.io/topics/persistence 來獲取更多信息.
 
appendonly no
 
 純累加文件名字(默認:"appendonly.aof")
 
appendfilename "appendonly.aof"
 
 fsync() 系統調用告訴操作系統把數據寫到磁盤上,而不是等更多的數據進入輸出緩衝區。
 有些操作系統會真的把數據馬上刷到磁盤上;有些則會盡快去嘗試這麼做。

 Redis支持三種不同的模式:

 no:不要立刻刷,只有在操作系統需要刷的時候再刷。比較快。
 always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。
 everysec:每秒寫一次。折中方案。 

 默認的 "everysec" 通常來說能在速度和數據安全性之間取得比較好的平衡。根據你的理解來
 決定,如果你能放寬該配置爲"no" 來獲取更好的性能(但如果你能忍受一些數據丟失,可以考慮使用
 默認的快照持久化模式),或者相反,用“always”會比較慢但比everysec要更安全。

 請查看下面的文章來獲取更多的細節
 http://antirez.com/post/redis-persistence-demystified.html 
 
 如果不能確定,就用 "everysec"
 
 appendfsync always
appendfsync everysec
 appendfsync no
 
 如果AOF的同步策略設置成 "always" 或者 "everysec",並且後臺的存儲進程(後臺存儲或寫入AOF
 日誌)會產生很多磁盤I/O開銷。某些Linux的配置下會使Redis因爲 fsync()系統調用而阻塞很久。
 注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們同步的write(2)調用。

 爲了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止fsync()。
 
 這就意味着如果有子進程在進行保存操作,那麼Redis就處於"不可同步"的狀態。
 這實際上是說,在最差的情況下可能會丟掉30秒鐘的日誌數據。(默認Linux設定)
 
 如果把這個設置成"yes"帶來了延遲問題,就保持"no",這是保存持久數據的最安全的方式。
 
no-appendfsync-on-rewrite no
 
 自動重寫AOF文件
 如果AOF日誌文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日誌文件。
 
 工作原理:Redis記住上次重寫時AOF文件的大小(如果重啓後還沒有寫操作,就直接用啓動時的AOF大小)
 
 這個基準大小和當前大小做比較。如果當前大小超過指定比例,就會觸發重寫操作。你還需要指定被重寫
 日誌的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫。

 指定百分比爲0會禁用AOF自動重寫特性。
 
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
 
 LUA SCRIPTING  
 
 Lua 腳本的最大執行時間,毫秒爲單位

 如果達到了最大的執行時間,Redis將要記錄在達到最大允許時間之後一個腳本仍然在執行,並且將
 開始對查詢進行錯誤響應。

 當一個長時間運行的腳本超過了最大執行時間,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 兩個
 命令可用。第一個可以用於停止一個還沒有調用寫命名的腳本。第二個是關閉服務器唯一方式,當
 寫命令已經通過腳本開始執行,並且用戶不想等到腳本的自然終止。

 設置成0或者負值表示不限制執行時間並且沒有任何警告
lua-time-limit 5000
 
 SLOW LOG 
 
 Redis慢查詢日誌可以記錄超過指定時間的查詢。運行時間不包括各種I/O時間,例如:連接客戶端,
 發送響應數據等,而只計算命令執行的實際時間(這只是線程阻塞而無法同時爲其他請求服務的命令執
 行階段)
 
 你可以爲慢查詢日誌配置兩個參數:一個指明Redis的超時時間(單位爲微秒)來記錄超過這個時間的命令
 另一個是慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄從隊列中移除。

 下面的時間單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄
 所有命令。
slowlog-log-slower-than 10000
 
 這個長度沒有限制。只是要主要會消耗內存。你可以通過 SLOWLOG RESET 來回收內存。
slowlog-max-len 128
 
 Event notification 
 
 Redis 能通知 Pub/Sub 客戶端關於鍵空間發生的事件
 這個功能文檔位於http://redis.io/topics/keyspace-events

 例如:如果鍵空間事件通知被開啓,並且客戶端對 0 號數據庫的鍵 foo 執行 DEL 命令時,將通過
 Pub/Sub發佈兩條消息:
 PUBLISH __keyspace@0__:foo del
 PUBLISH __keyevent@0__:del foo

 可以在下表中選擇Redis要通知的事件類型。事件類型由單個字符來標識:

 K    鍵空間通知,以__keyspace@<db>__爲前綴
 E    鍵事件通知,以__keysevent@<db>__爲前綴
 g    DEL , EXPIRE , RENAME 等類型無關的通用命令的通知, ...
 $    String命令
 l    List命令
 s    Set命令
 h    Hash命令
 z    有序集合命令
 x    過期事件(每次key過期時生成)
 e    驅逐事件(當key在內存滿了被清除時生成)
 A    g$lshzxe的別名,因此”AKE”意味着所有的事件

 notify-keyspace-events 帶一個由0到多個字符組成的字符串參數。空字符串意思是通知被禁用。

 例子:啓用List和通用事件通知:
 notify-keyspace-events Elg

 例子2:爲了獲取過期key的通知訂閱名字爲 __keyevent@__:expired 的頻道,用以下配置
 notify-keyspace-events Ex

 默認所用的通知被禁用,因爲用戶通常不需要該特性,並且該特性會有性能損耗。
 注意如果你不指定至少K或E之一,不會發送任何事件。
notify-keyspace-events ""
 
 ADVANCED CONFIG 
 
 當hash只有少量的entry時,並且最大的entry所佔空間沒有超過指定的限制時,會用一種節省內存的
 數據結構來編碼。可以通過下面的指令來設定限制
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
 
 與hash似,數據元素較少的list,可以用另一種方式來編碼從而節省大量空間。
 這種特殊的方式只有在符合下面限制時纔可以用:
list-max-ziplist-entries 512
list-max-ziplist-value 64
 
 set有一種特殊編碼的情況:當set數據全是十進制64位有符號整型數字構成的字符串時。
 下面這個配置項就是用來設置set使用這種編碼來節省內存的最大長度。
set-max-intset-entries 512
 
 與hash和list相似,有序集合也可以用一種特別的編碼方式來節省大量空間。
 這種編碼只適合長度和元素都小於下面限制的有序集合:
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個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表)。
 redis所用的哈希表實現(見dict.c)採用延遲哈希刷新機制:你對一個哈希表操作越多,哈希刷新
 操作就越頻繁;反之,如果服務器是空閒的,那麼哈希刷新就不會完成,哈希表就會佔用更多的一些
 內存而已。
 
 默認是每秒鐘進行10次哈希表刷新,用來刷新字典,然後儘快釋放內存。

 建議:
 如果你對延遲比較在意,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,就用
 "activerehashing no",如果不太在意延遲而希望儘快釋放內存就設置"activerehashing yes"
activerehashing yes
 
 客戶端的輸出緩衝區的限制,可用於強制斷開那些因爲某種原因從服務器讀取數據的速度不夠快的客戶端,
 (一個常見的原因是一個發佈/訂閱客戶端消費消息的速度無法趕上生產它們的速度)

 可以對三種不同的客戶端設置不同的限制:
 normal -> 正常客戶端
 slave -> slave和 MONITOR 客戶端
 pubsub -> 至少訂閱了一個pubsub channel或pattern的客戶端

 下面是每個client-output-buffer-limit語法:
 client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>
 
 一旦達到硬限制客戶端會立即被斷開,或者達到軟限制並持續達到指定的秒數(連續的)。
 例如,如果硬限制爲32兆字節和軟限制爲16兆字節/10秒,客戶端將會立即斷開
 如果輸出緩衝區的大小達到32兆字節,或客戶端達到16兆字節並連續超過了限制10秒,就將斷開連接。

 默認normal客戶端不做限制,因爲他們在不主動請求時不接收數據(以推的方式),只有異步客戶端
 可能會出現請求數據的速度比它可以讀取的速度快的場景。

 pubsub和slave客戶端會有一個默認值,因爲訂閱者和slaves以推的方式來接收數據

 把硬限制和軟限制都設置爲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調用內部函數來執行許多後臺任務,如關閉客戶端超時的連接,清除未被請求過的過期Key等等。

 不是所有的任務都以相同的頻率執行,但Redis依照指定的“hz”值來執行檢查任務。

 默認情況下,“hz”的被設定爲10。提高該值將在Redis空閒時使用更多的CPU時,但同時當有多個key
 同時到期會使Redis的反應更靈敏,以及超時可以更精確地處理。

 範圍是1到500之間,但是值超過100通常不是一個好主意。
 大多數用戶應該使用10這個默認值,只有在非常低的延遲要求時有必要提高到100。
hz 10
 
 當一個子進程重寫AOF文件時,如果啓用下面的選項,則文件每生成32M數據會被同步。爲了增量式的
 寫入硬盤並且避免大的延遲高峯這個指令是非常有用的
aof-rewrite-incremental-fsync yes

原文地址:http://dumbee.net/archives/114

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章