Redis 配置文件詳解

Redis 配置文件詳解

 單位注意:當須要指定內存大小的時候,須要指定1k、5GB、4m等相似單位:
 # 1k => 1000 bytes
 # 1kb => 1024 bytes
 # 1m => 1000000 bytes
 # 1mb => 10241024 bytes
 # 1g => 1000000000 bytes
 # 1gb => 1024
1024*1024 bytesnode

  1. bind 127.0.0.1
     綁定的主機地址
  2. protected-mode yes
     當安全模式啓用時
      1)服務器沒有配置bind
      2)沒有配置密碼
     則服務器默認只接受本地的鏈接和 Unix domain sockets
  3. port 6379
     指定redis監聽端口
  4. tcp-backlog 511
     TCP完成鏈接隊列,該值與系統中/proc/sys/net/core/somaxconn的值取最小值
  5. timeout 0
     客戶端與服務器的鏈接超時時間,0爲不超時
  6. tcp-keepalive 300
     週期性使用SO_KEEPSLIVE檢測客戶端是否處於健康狀態,避免服務器阻塞,官方建議300秒(從3.2.1版本開始)
  7. daemonize yes
     以守護進程的方式啓動
  8. supervised no
     不使用系統工具管理,可選項爲auto、upstart、systemd、no
  9. pidfile /var/run/redis_6379.pid
     若是沒設置後臺守護進程,且沒指定pidfile,則沒有pid文件被建立
     若是設置了後臺守護進程,則會建立/var/run/redis.pid
     若是設置了後臺守護進程,且指定pidfile,則以pidfile爲準
     沒有建立成功pidfile不影響Redis正常啓動和運行
  10. loglevel notice
     定義日誌級別
     debug適用於開發和測試
     verbose比debug少點
     notice適用於生產環境
     warning:重要信息和錯誤信息
  11. logfile ""
     指定日誌文件位置
  12. databases 16
     數據庫數量,默認16個,使用SELECT dbid 命令鏈接指定數據庫ID
  13. save seconds changes
     指定時間內如有指定次數更新操做,就將數據同步到數據文件
     默認配置三條策略:
  • save 900 1
  • save 300 10
  • save 60 10000
  1. stop-writes-on-bgsave-error yes
     redis最後一次後臺保存失敗,redis 將中止接受寫操做,以告訴用戶數據不能正確的持久化到硬盤。
  2. rdbcompression yes
     是否在dump.rdp數據庫文件的時候使用LZF壓縮字符串
  3. rdbchecksum yes
     是否校驗rdp文件
  4. dbfilename dump.rdb
     設置dump.rdp文件名稱
  5. dir ./
     設置dump.rdp文件位置
  6. slaveof masterip masterport
     本機若爲salve時,設置master的IP地址和端口,當redis啓動時會自動從master進行數據同步
  7. masterauth master-password
      當master設置密碼保護時,slave鏈接master的密碼。
  8. slave-serve-stale-data yes
     當slave與master失去聯繫,或者複製正在進行的時候,slave可能會有兩種表現:
  • 若是爲yes,slave仍然會應答客戶端請求,但返回的數據多是過期的,或者在第一次同步的時候,數據多是空的。
  • 若是爲no,除了執行infoslaveof以外的其餘命令都將返回一個SYNC with master in progress的錯誤。
  1. slave-read-only yes
     設置slave爲只讀。
  2. repl-diskless-sync no
     無盤備份,默認禁用。
  • 在硬盤備份的狀況下,主站的子進程生成RDB文件。一旦生成,多個從站能夠當即排成隊列使用主站的RDB文件。
  • 在無硬盤備份的狀況下,一次RDB傳送開始,新的從站到達後,須要等待如今的傳送結束,才能開啓新的傳送。
  1. repl-diskless-sync-delay 5
     無盤備份的等待時間,設置爲0時,傳送會當即開始,則其餘slave則須要等待傳送完成後才能夠傳送。
  2. repl-ping-slave-period 10
     slave以一個預先設置好的時間間隔向服務器發送PING。這個時間間隔能夠經過repl_ping_slave_period選項改變。默認值是10秒。
  3. repl-timeout 60
     數據同步的超時時間。
  • 從slave角度,同步期間批量傳輸的I/O
  • 從slave角度認爲master超時(數據、ping)
  • 從master角度認爲slave超時(REPLCONF ACK pings)
     確認該值比repl-ping-slave-period要大,不然每次主站和從站之間通訊低速時都會被檢測爲超時。
  1. repl-disable-tcp-nodelay no
     同步以後是否禁用slave上的TCP_NODELAY
  • 若是選擇yes,master會使用少許的TCP包和帶寬向slave發送數據,但會致使slave會有數據延遲。Linux內核默認配置狀況下最多40ms的延時。
  • 若是選擇no,slave將不會有延時,但同步數據時會消耗較大的帶寬。
     默認狀況爲低延遲優化,但在帶寬擁堵或者主從距離較遠的狀況下,將其更改成yes會更好。
  1. repl-backlog-size 1mb
     設置主從複製緩衝區大小,這個backlog是存放slaves被斷開鏈接時,存放slave數據的buffer,當slave從新鏈接時,一般不但願所有從新同步,只是同步部分,僅僅傳遞slave斷開連接時丟失的數據。默認未配置。
  2. repl-backlog-ttl 3600
     master與slave斷開鏈接一段時間後,對應的backlog將被自動釋放。該選項配置backlog釋放前等待的秒數,從斷開連接開始計算,值爲0時表示不釋放。
  3. slave-priority 100
     slave的優先級,該值越低優先級越高,當master宕機,sentinel會將優先級較高的提高爲master角色。
  4. min-slaves-to-write 3
    min-slaves-max-lag 10
     當鏈接master的slave少於3個,延時少於10秒時,master中止接受寫請求。
     3個slave必須在線。延時的秒數必須小於等於max-lag,延遲秒數是從最後一次收到來自slave的ping開始計算,ping一般是每秒一次。
     該選項並不保證3個備份都會接受寫請求,可是會限制在指定秒數內因爲slave數量不夠致使寫操做丟失的狀況。
     即:若是slave服務器少於3個,或者3個slave服務器的延遲都大於10秒時,主服務器拒絕寫命令。
     設置某一個爲0表示禁用這一功能。  
     默認狀況下min-slaves-to-write設置爲0(禁用)而min-slaves-max-lag設置爲10。
  5. slave-announce-ip 5.5.5.5
    slave-announce-port 1234redis

  6. requirepass foobared
     設置Redis鏈接密碼。設置密碼後,客戶端鏈接Redis須要經過AUTH password命令提供密碼,默認關閉。
  7. rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
     命令重命名。在共享環境下,能夠將危險命令改變名字。
     也能夠經過更名爲空字符串來徹底禁用一個命令。
     rename-command CONFIG ""
     注意:改變命令名字被記錄到AOF文件或被傳送到slave服務器可能產生問題。
  8. maxclients 10000
     設置最多同時鏈接的客戶端數量。默認限制爲10000客戶端。
     Redis不能經過配置處理文件的限制數來知足指定的值,那麼最大的客戶端鏈接數就被設置成當前文件限制數減32(由於Redis服務器保留了一些文件描述符做爲內部使用),一旦達到限制,Redis會關閉全部新鏈接併發送錯誤'max number of clients reached'
  9. maxmemory <bytes>
     設置使用內存上限。
     master爲同步slave的輸出緩衝區所需內存不計算在使用內存中。當附加多個slave時,建議設置稍小maxmemory限制。
     若是由於刪除策略Redis沒法刪除key,或者策略設置爲"noeviction",Redis會回覆須要更多內存的錯誤信息給命令。
  10. maxmemory-policy noeviction
     最大內存策略:若是達到內存限制,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 noeviction
  1. maxmemory-samples 5
     LRU和最小TTL算法的實現都不是很精確,可是很接近(爲了省內存),因此你能夠用樣本量作檢測。
     默認Redis會檢查3個key而後取最舊的那個,你能夠經過下面的配置指令來設置樣本的個數。
  2. appendonly no
     是否開啓AOF持久化模式,默認關閉。
  3. appendfilename "appendonly.aof"
     AOF持久化文件名稱。
  4. appendfsync everysec
     Redis中AOF持久化策略。支持三種模式:
  • no:不要馬上刷,只有在操做系統須要刷的時候再刷。比較快。
  • always:每次寫操做都馬上寫入到aof文件。慢,可是最安全。
  • everysec:每秒寫一次。折中方案。默認。
  1. no-appendfsync-on-rewrite no
     設置日誌在重寫的時候可否將命令追加到aof文件。
  • yes:在日誌重寫時,不盡興命令追加操做,而只是將其放在緩衝區,避免與命令的追加形成硬盤I/O上的衝突。若Redis在重寫中down掉,丟失的數據是整個重寫過程的全部數據。
  • no:在日誌重寫時,命令追加操做照常進行。
  1. auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
     Redis會記住上次重寫時AOF文件的大小,以此爲基準和當前大小作比較,若是當前大小超過指定比例,就會觸發重寫操做。指定重寫日誌大小的最小尺寸,避免到達指定百分比但尺寸仍然很小的狀況還要重寫。
     指定百分比爲0會禁用自動重寫特性。
  2. aof-load-truncated yes
     Redis啓動加載aof文件,若是發現末尾命令不完整則自動截掉,成功加載前面正確的數據。
     若設置爲no,遇到此類問題,Redis會啓動失敗,用redis-check-aof工具手工修復。
  3. lua-time-limit 5000
     Lua腳本的最大執行時間,單位爲毫秒。
     若是達到最大執行時間,Redis將要記錄在達到最大容許時間以後一個腳本仍然在運行,而且開始對查詢進行錯誤響應。
     當腳本執行時間超過執行時間,可使用SCRIPT KILL殺掉沒有調用write的腳步,若是要是已經調用write,就使用SHUTDOWN NOSAVE殺掉。
  4. cluster-enabled yes
     啓用Redis集羣
  5. cluster-config-file nodes-6379.conf
     Redis集羣配置文件,有Redis node維護,不能被建立和編輯,保證每一個集羣的配置文件不一樣。
  6. cluster-node-timeout 15000
     Redis集羣節點超時時間,單位毫秒。
  7. cluster-slave-validity-factor 10
     設置是否進行故障轉移超時參數。
     當進行故障轉移時,所有slave都會請求申請爲master,但某些slave與master斷開鏈接一段時間,致使數據過於陳舊,改參數用來設置該超時參數。
     當slave斷開時間(秒)大於(node-timeout*slave-validity-factor)+repl-ping-slave-period的值,slave將不會嘗試進行故障轉移。
     PS:node-timeout默認爲15s,slave-validity-factor默認爲10,repl-ping-slave-period默認爲10s,則默認slave斷開鏈接的時間超過160s後將不進行故障轉移。
  8. cluster-migration-barrier 1
     master最小slave數,只有當slave達到這個數,slave纔會進行遷移。
  9. cluster-require-full-coverage yes
     在部分key所在的節點不可用時,若是此參數設置爲'yes',則整個集羣中止接受操做;若是此參數設置爲'no',則集羣依然爲可達節點上的key提供讀操做。
  10. slowlog-log-slower-than 10000
     Redis慢查詢超時時間,是指命令執行的實際時間,單位微秒,默認爲1s。
  11. slowlog-max-len 128
     慢查詢日誌的隊列長度。長度沒有限制,會消耗內存,能夠經過SLOWLOG RESET回收內存。
  12. latency-monitor-threshold 0
     延時監控,Redis監控子系統在運行時,會抽樣檢測可能致使延時的不一樣操做。
     能夠經過LATENCY命令打印相關信息和報告:
  • LATENCY SAMPLES:返回延時的事件抽樣。
  • LATENCY LATEST:四列分別表示事件名、最近延遲的Unix時間戳、最近的延遲、最大延遲。
  • LATENCY DOCTOR:返回人類可讀的分析延遲實例。
  • LATENCY GRAPH:以圖形化的方式顯示。最下面以豎行顯示的是指延遲在多久之前發生。
  • LATENCY RESET:清除延時記錄。
    系統只記錄超過設定值的操做,單位是毫秒,0表示禁用該功能。
    能夠經過命令"CONFIG SET latency-monitor-threshold <milliseconds>"直接設置而不須要重啓Redis。
  1. notify-keyspace-events ""
     禁用key space事件。
     若key space事件被開啓,而且客戶端對0號數據庫的key "foo" 執行DEL命令時,將經過Pub/Sub發佈兩條消息:
  • PUBLISH keyspace@0:foo del
  • PUBLISH keyevent@0:del foo
    Redis事件通知類型。事件類型由單個字符來標識:
  • K 鍵空間通知,以__keyspace@ __爲前綴
  • E 鍵事件通知,以__keysevent@ __爲前綴
  • g DEL , EXPIRE , RENAME 等類型無關的通用命令的通知
  • $ String命令
  • l List命令
  • s Set命令
  • h Hash命令
  • z 有序集合命令
  • x 過時事件(每次key過時時生成)
  • e 驅逐事件(當key在內存滿了被清除時生成)
  • A g$lshzxe的別名,所以」AKE」意味着全部的事件
    K與E至少指定一個,不然不會發送任何事件。
    例1 啓用List和通知事件通知:notify-keyspace-events Elg
    例2 爲了獲取過時key的通知訂閱名字爲 keyevent@:expired :notify-keyspace-events Ex
  1. hash-max-ziplist-entries 512
     當hash表中元素(條目)總個數沒有超過設定數量時,採用高效內存數據結構來節省空間。
  2. hash-max-ziplist-value 64
     當hash表中每一個value的長度不超過指定字節時,採用高效內存數據結構來節省空間。
  3. list-max-ziplist-size -2算法

  4. list-compress-depth 0數據庫

  5. set-max-intset-entries 512
     set的元素若是所有是整數(10進制),且爲64位有符號整數,則採用特殊編碼方式,該項設置當set使用這種編碼方式的最大長度。
  6. zset-max-ziplist-entries 128
     當zset條目總個數沒有超過設定數量時,採用高效內存數據結構來節省空間。
  7. zset-max-ziplist-value 64
     當zset的value的長度不超過指定字節時,採用高效內存數據結構來節省空間。
  8. hll-sparse-max-bytes 3000
     HyperLogLog稀疏表示字節限制,這個限制包含了16個字節的頭部,當一個HyperLogLog使用稀疏表示超過了這個限制,就會轉到稠密表示上,建議值爲3000.
  9. activerehashing yes
     每100毫秒,Redis會用1毫秒的時間對Hash表進行從新Hash。
     Redis採用懶惰Hash方式:操做Hash越多,則從新Hash的可能越多,若根本就不操做Hash,則不會從新Hash。
     默認每秒10次從新Hash主詞典,釋放可能釋放的內存。
     從新Hash會形成延時,大概爲2毫秒,若對延遲要求較高,則設置爲no,禁止從新Hash。但可能會浪費不少內存。
  10. client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
     客戶端的輸出緩衝區限制,當客戶端從服務端的讀取速度不夠快時,則強制斷開。
     三種客戶端類型:normal、salve、pubsub,語法以下:
     client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
      一旦達到硬限制客戶端會當即被斷開,或者達到軟限制並持續達到指定的秒數(連續的)。
     把硬限制和軟限制都設置爲0來禁用該功能。
  11. hz 10
     Redis調用內部函數執行的後臺任務頻率。後臺任務好比:清楚過時數據、客戶端超時連接等。
     默認爲10,取值範圍1~500,對延遲要求很低的能夠設置超過100以上。
  12. aof-rewrite-incremental-fsync yes
     當重寫AOF文件是,若是啓用該選項,則文件每生成32M數據會被同步。爲了增量寫入硬盤而且避免延遲高峯。安全

相關文章
相關標籤/搜索