天天看點

redis配置檔案詳解

######################### 通用 #########################

# 啟動背景程序

daemonize yes

# 背景程序的pid檔案存儲位置

pidfile /var/run/redis.pid

# 預設監聽端口

port 6379

# 在高并發的環境中,為避免慢用戶端的連接配接問題,需要設定一個高速背景日志

tcp-backlog 511

# 隻接受以下綁定的IP請求

# Examples:

# bind 192.168.1.100 10.0.0.1

bind 127.0.0.1

# 設定unix監聽,預設為空

# unixsocket /tmp/redis.sock

# unixsocketperm 700

#用戶端空閑多長時間,關閉連結,0表示不關閉

timeout 0

# TCP keepalive.

# 如果是非零值,當失去連結時,會使用SO_KEEPALIVE發送TCP ACKs 到用戶端。

# 這個參數有兩個作用:

# 1.檢測斷點。

# 2.從網絡中間裝置來看,就是保持連結

# 在Linux上,設定的時間就是發送ACKs的周期。

# 注意:達到雙倍的設定時間才會關閉連結。在其他核心上,周期依賴于核心設定。

# 一個比較合理的值為60s

tcp-keepalive 0

# 指定日志級别,以下記錄資訊依次遞減

# debug用于開發/測試

# verbose沒debug那麼詳細

# notice适用于生産線

# warning隻記錄非常重要的資訊

loglevel notice

#日志檔案名稱,如果為stdout則輸出到标準輸出端,如果是以背景程序運作則不産生日志

logfile ""

# 要想啟用系統日志記錄器,設定一下選項為yes

# syslog-enabled no

# 指明syslog身份

# syslog-ident redis

# 指明syslog裝置。必須是一個使用者或者是local0 ~ local7之一

# syslog-facility local0

#設定資料庫數目,第一個資料庫編号為:0

databases 16

######################### 快照 #########################

# 在什麼條件下儲存資料庫到磁盤,條件可以有很多個,滿足任何一個條件都會進行快照存儲

# 在900秒之内有一次key的變化

save 900 1

# 在300秒之内,有10個key的變化

save 300 10

# 在60秒之内有10000個key變化

save 60 10000

# 當持久化失敗的時候,是否繼續提供服務

stop-writes-on-bgsave-error yes

# 當寫入磁盤時,是否使用LZF算法壓縮資料,預設為yes

rdbcompression yes

# 是否添加CRC64校驗到每個檔案末尾--花費時間保證安全

rdbchecksum yes

# 磁盤上資料庫的儲存名稱

dbfilename dump.rdb

# Redis工作目錄,以上資料庫儲存檔案和AOF日志都會寫入此目錄

dir ./

######################### 主從同步 #########################

# 主從複制,當本機是slave時配置

# slaveof <masterip> <masterport>

# 當主機需要密碼驗證時候配置

# masterauth <master-password>

# 當slave和master丢失連結,或正處于同步過程中。是否響應用戶端請求

# 設定為yes表示響應

# 設定為no,直接傳回"SYNC with master in progress"(正在和主伺服器同步中)

slave-serve-stale-data yes

# 設定slave是否為隻讀。

# 注意:即使slave設定為隻讀,也不能令其暴露在不受信任的網絡環境中

slave-read-only yes

# 無硬碟複制功能

repl-diskless-sync no

# 等待多個slave一起來請求之間的間隔時間

repl-diskless-sync-delay 5

# 設定slave給master發送ping的時間間隔

# repl-ping-slave-period 10

# 設定資料傳輸I/O,主機資料、ping響應逾時時間,預設60s

# 這個時間一定要比repl-ping-slave-period大,否則會不斷檢測到逾時

# repl-timeout 60

# 是否在SYNC後slave socket上禁用TCP_NODELAY?

# 如果你設定為yes,Redis會使用少量TCP封包和少量帶寬發送資料給slave。

# 但是這樣會在slave端出現延遲。如果使用Linux核心的預設設定,大概40毫秒。

# 如果你設定為no,那麼在slave端研究就會減少但是同步帶寬要增加。

# 預設我們是為低延遲優化的。

# 但是如果流量特别大或者主從伺服器相距比較遠,設定為yes比較合理。

repl-disable-tcp-nodelay no

# 設定複制的背景日志大小。

# 複制的背景日志越大, slave 斷開連接配接及後來可能執行部分複制花的時間就越長。

# 背景日志在至少有一個 slave 連接配接時,僅僅配置設定一次。

# repl-backlog-size 1mb

# 在 master 不再連接配接 slave 後,背景日志将被釋放。下面的配置定義從最後一個 slave 斷開連接配接後需要釋放的時間(秒)。

# 0 意味着從不釋放背景日志

# repl-backlog-ttl 3600

# 設定slave優先級,預設為100

# 當主伺服器不能正确工作的時候,數字低的首先被提升為主伺服器,但是0是禁用選擇

slave-priority 100

# 如果少于 N 個 slave 連接配接,且延遲時間 <=M 秒,則 master 可配置停止接受寫操作。

# 例如需要至少 3 個 slave 連接配接,且延遲 <=10 秒的配置:

# min-slaves-to-write 3

# min-slaves-max-lag 10

# 設定 0 為禁用

# 預設 min-slaves-to-write 為 0 (禁用), min-slaves-max-lag 為 10

######################### 安全 #########################

# 設定用戶端連接配接密碼,因為Redis響應速度可以達到每秒100w次,是以密碼要特别複雜

# requirepass 1413

# 指令重新命名,或者禁用。

# 重命名指令為空字元串可以禁用一些危險指令比如:FLUSHALL删除所有資料

# 需要注意的是,寫入AOF檔案或傳送給slave的指令别名也許會引起一些問題

# rename-command CONFIG ""

requirepass 1413

######################### 限制 #########################

# 設定最多連結用戶端數量,預設為10000。

# 實際可以接受的請求數目為設定值減去32,這32是Redis為内部檔案描述符保留的

# maxclients 10000

# 設定最大使用記憶體數量,在把Redis當作LRU緩存時特别有用。

# 設定的值要比系統能使用的值要小

# 因為當啟用删除算法時,slave輸出緩存也要占用記憶體

# maxmemory <bytes>

#達到最大記憶體限制時,使用何種删除算法

# volatile-lru  使用LRU算法移除帶有過期标緻的key

# allkeys-lru -> 使用LRU算法移除任何key

# volatile-random -> 随機移除一個帶有過期标緻的key

# allkeys-random ->  随機移除一個key

# volatile-ttl -> 移除最近要過期的key

# noeviction -> 不删除key,當有寫請求時,傳回錯誤

#預設設定為volatile-lru

# maxmemory-policy noeviction

# LRU和最小TTL算法沒有精确的實作

# 為了節省記憶體隻在一個樣本範圍内選擇一個最近最少使用的key,可以設定這個樣本大小

# maxmemory-samples 5

######################### AO模式 #########################

# AOF和RDB持久化可以同時啟用

# Redis啟動時候會讀取AOF檔案,AOF檔案有更好的持久化保證

appendonly no

# AOF的儲存名稱,預設為appendonly.aof

appendfilename "appendonly.aof"

# 設定何時寫入追加日志,又三種模式

# no:表示由作業系統決定何時寫入。性能最好,但可靠性最低

# everysec:表示每秒執行一次寫入。折中方案,推薦

# always:表示每次都寫入磁盤。性能最差,比上面的安全一些

# appendfsync always

appendfsync everysec

# appendfsync no

# 當AOF同步政策設定為alway或everysec

# 當背景存儲程序(背景存儲或者AOF日志背景寫入)會産生很多磁盤開銷

# 某些Linux配置會使Redis因為fsync()調用産生阻塞很久

# 現在還沒有修複更新檔,甚至使用不同線程進行fsync都會阻塞我們的同步write(2)調用。

# 為了緩解這個問題,使用以下選項在一個BGSAVE或BGREWRITEAOF運作的時候

# 可以阻止fsync()在主程式中被調用,

no-appendfsync-on-rewrite no

# AOF自動重寫(合并指令,減少日志大小)

# 當AOF日志大小增加到一個特定比率,Redis調用BGREWRITEAOF自動重寫日志檔案

# 原理:Redis 會記錄上次重寫後AOF檔案的檔案大小。

# 如果剛啟動,則記錄啟動時AOF大小

# 這個基本大小會用來和目前大小比較。如果目前大小比特定比率大,就會觸發重寫。

# 你也需要指定一個AOF需要被重寫的最小值,這樣會避免達到了比率。

# 但是AOF檔案還很小的情況下重寫AOF檔案。

# 設定為0禁用自動重寫

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

#redis在啟動時可以加載被截斷的AOF檔案,而不需要先執行 redis-check-aof 工具

aof-load-truncated yes

######################### LUA腳本 #########################

# Lua腳本的最大執行時間,機關毫秒

# 逾時後會報錯,并且計入日志

# 當一個腳本運作時間超過了最大執行時間

# 隻有SCRIPT KILL和 SHUTDOWN NOSAVE兩個指令可以使用。

# SCRIPT KILL用于停止沒有調用寫指令的腳本。

# SHUTDOWN NOSAVE是唯一的一個,在腳本的寫指令正在執行

# 使用者又不想等待腳本的正常結束的情況下,關閉伺服器的方法。

# 以下選項設定為0或負數就會取消腳本執行時間限制

lua-time-limit 5000

####################### redis叢集  ########################

# 是否啟用叢集

# cluster-enabled yes

# 叢集配置檔案

# 叢集配置變更後會自動寫入改檔案

# cluster-config-file nodes-6379.conf

# 節點互連逾時的閥值

# 節點逾時時間,超過該時間無法連接配接主要Master節點後,會停止接受查詢服務

# cluster-node-timeout 15000

# 控制從節點FailOver相關的設定,設為0,從節點會一直嘗試啟動FailOver.

# 設為正數,失聯大于一定時間(factor*節點TimeOut),不再進行FailOver

# cluster-slave-validity-factor 10

# 最小從節點連接配接數

# cluster-migration-barrier 1

# 預設為Yes,丢失一定比例Key後(可能Node無法連接配接或者挂掉),叢集停止接受寫操作

# 設定為No,叢集丢失Key的情況下仍提供查詢服務

# cluster-require-full-coverage yes

######################### 慢查詢 #########################

# Redis慢查詢日志記錄超過設定時間的查詢,且隻記錄執行指令的時間

# 不記錄I/O操作,比如:和用戶端互動,發送回複等。

# 時間機關為微妙,1000000微妙 = 1 秒

# 設定為負數會禁用慢查詢日志,設定為0會記錄所有查詢指令

slowlog-log-slower-than 10000

# 日志長度沒有限制,但是會消耗記憶體。超過日志長度後,最舊的記錄會被移除

# 使用SLOWLOG RESET指令可以回收記憶體

slowlog-max-len 128

######################### 延遲監測 #########################

# 系統隻記錄超過設定值的操作,機關是毫秒,0表示禁用該功能  

# 可以通過指令“CONFIG SET latency-monitor-threshold <milliseconds>” 直接設定而不需要重新開機redis  

latency-monitor-threshold 0

######################### 事件通知 #########################

#  當事件發生時, Redis 可以通知 Pub/Sub 用戶端。

#  可以在下表中選擇 Redis 要通知的事件類型。事件類型由單個字元來辨別:

# K     Keyspace 事件,以 _keyspace@<db>_ 的字首方式釋出

# E     Keyevent 事件,以 _keysevent@<db>_ 的字首方式釋出

# g     通用事件(不指定類型),像 DEL, EXPIRE, RENAME, …

# $     String 指令

# s     Set 指令

# h     Hash 指令

# z     有序集合指令

# x     過期事件(每次 key 過期時生成)

# e     清除事件(當 key 在記憶體被清除時生成)

# A     g$lshzxe 的别稱,是以 ”AKE” 意味着所有的事件

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

#  例子:啟用 list 和通用事件:

# notify-keyspace-events Elg

#  預設所用的通知被禁用,因為使用者通常不需要改特性,并且該特性會有性能損耗。

#  注意如果你不指定至少 K 或 E 之一,不會發送任何事件。

notify-keyspace-events ""

#notify-keyspace-events AKE

######################### 進階設定 #########################

# 當有少量條目的時候,哈希使用高效記憶體資料結構。最大的條目也不能超過設定的門檻值。# “少量”定義如下:

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

# 和哈希編碼一樣,少量清單也以特殊方式編碼節省記憶體。“少量”設定如下:

list-max-ziplist-entries 512

list-max-ziplist-value 64

# 集合隻在以下情況下使用特殊編碼來節省記憶體

# -->集合全部由64位帶符号10進制整數構成的字元串組成

# 下面的選項設定這個特殊集合的大小。

set-max-intset-entries 512

# 當有序集合的長度和元素設定為以下數字時,又特殊編碼節省記憶體

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

# HyperLogLog 稀疏表示位元組限制

# 這個限制包含了16個位元組的頭部,當一個HyperLogLog使用sparse representation

# 超過了這個顯示,它就會轉換到dense representation上

hll-sparse-max-bytes 3000

# 哈希重新整理使用每100個CPU毫秒中的1毫秒來幫助重新整理主哈希表(頂級鍵值映射表)。

#  Redis哈希表使用延遲重新整理機制,越多操作,越多重新整理。

# 如果伺服器空閑,重新整理操作就不會進行,更多記憶體會被哈希表占用

# 預設每秒進行10次主字典重新整理,釋放記憶體。

# 如果你有硬性延遲需求,偶爾2毫秒的延遲無法忍受的話。設定為no

# 否則設定為yes

activerehashing yes

# 用戶端輸出緩存限制強迫斷開讀取速度比較慢的用戶端

# 有三種類型的限制

# normal -> 正常

# slave  -> slave和 MONITOR

# pubsub -> 用戶端至少訂閱了一個頻道或者模式

# 用戶端輸出緩存限制文法如下(時間機關:秒)

# client-output-buffer-limit <類别> <強制限制> <軟性限制> <軟性時間>

# 達到強制限制緩存大小,立刻斷開連結。

# 達到軟性限制,仍然會有軟性時間大小的連結時間

# 預設正常用戶端無限制,隻有請求後,異步用戶端資料請求速度快于它能讀取資料的速度

# 訂閱模式和主從用戶端又預設限制,因為它們都接受推送。

# 強制限制和軟性限制都可以設定為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背景任務執行頻率,比如清除過期鍵任務。

# 設定範圍為1到500,預設為10.越大CPU消耗越大,延遲越小。

# 建議不要超過100

hz 10

# 當子程序重寫AOF檔案,以下選項開啟時,AOF檔案會每産生32M資料同步一次。

# 這有助于更快寫入檔案到磁盤避免延遲

aof-rewrite-incremental-fsync yes

 本文轉自 歸來仍少年 51CTO部落格,原文連結:http://blog.51cto.com/shaoniana/1969050