redis配置文件詳解

./redis-server /opt/redis/redis_6379.conf
#注意爲了讀取配置文件,必須使用開始與文件路徑作爲第一個參數
include /opt/redis/redis-common.conf
#可以擴展定製配置文件。(如果需要該參數應該放置於最後一行)
daemonize yes
#是否以後臺進程運行,默認爲no
pidfile /opt/redis/run/redis_6379.pid
#如以後臺進程運行,則需指定一個pid文件及路徑。
port 6379
#監聽端口,默認爲6379
tcp-backlog 511
#在高併發的環境中,爲避免客戶端的連接緩慢問題,需要設置一個高速後臺日誌,Linux 內核默認值很小需要修改 /proc/sys/net/core/somaxconn 對應的值。
bind 0.0.0.0
#綁定主機IP,默認值爲127.0.0.1(這裏寫爲4個0方便應用程序訪問)
timeout 0
#設置客戶端連接時的超時時間,單位爲秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連接
#0 是關閉此設置
tcp-keepalive 0
#在 Linux 上,指定值(秒)用於發送 ACKs 的時間。注意關閉連接需要雙倍的時間。默認爲 0 
loglevel notice
#指定日誌記錄級別,生產環境推薦 notice
#Redis 總共支持四個級別: debug 、 verbose 、 notice 、 warning ,默認爲 verbose
#debug     記錄很多信息,用於開發和測試
#varbose   有用的信息,不像 debug 會記錄那麼多
#notice    普通的 verbose ,常用於生產環境
#warning   只有非常重要或者嚴重的信息會記錄到日誌
logfile "/var/log/redis/redis_6379.log"
#配置 log 文件地址
#默認值爲 stdout ,標準輸出,若後臺模式會輸出到 /dev/null 。
databases 16
#可用數據庫數
#默認值爲 16 ,默認數據庫爲 0 。
save 900 1
save 300 10
save 60 10000
#保存數據到磁盤,在多長時間內,有多少次更新操作,就將數據同步到數據文件 rdb。
#相當於條件觸發抓取快照,這個可以多個條件配合#比如默認配置文件中的設置,就設置了三個條件
#save 900 1  900 秒內至少有 1 個 key 被改變
#save 300 10  300 秒內至少有 300 個 key 被改變
#save 60 10000  60 秒內至少有 10000 個 key 被改變
stop-writes-on-bgsave-error yes
#後臺存儲錯誤停止寫。
rdbcompression yes
#存儲至本地數據庫時(持久化到dump.rdb文件)是否壓縮數據,默認爲 yes
rdbchecksum yes
#是否校驗rdb文件.
dbfilename dump_6379.rdb
#本地持久化數據庫文件名,默認值爲 dump.rdb
dir /opt/redis/data
#數據庫鏡像備份的文件放置的路徑。
#這裏的路徑跟文件名要分開配置是因爲 redis 在進行備份時,先會將當前數據庫的狀態寫入到一個臨時文件中,等備份完成,
#再把該該臨時文件替換爲上面所指定的文件,而這裏的臨時文件和上面所配置的備份文件都會放在這個指定的路徑當中。
#AOF 文件也會存放在這個目錄下面
#注意這裏必須制定一個目錄而不是文件
slaveof <masterip> <masterport>
#設置該數據庫爲其他數據庫的從數據庫時啓用該參數。 
#設置當本機爲slav服務時,設置 master 服務的 IP 地址及端口,在 Redis 啓動時,它會自動從 master 進行數據同步
masterauth <master-password>
#slave服務連接master的密碼
slave-serve-stale-data yes
#當從庫同主機失去連接或者複製正在進行,從機庫有兩種運行方式:
#1)如果 slave-serve-stale-data 設置爲 yes( 默認設置 ) ,從庫會繼續響應客戶端的請求
#2)如果 slave-serve-stale-data 是指爲 no ,出去 INFO 和 SLAVOF 命令之外的任何請求都會返回一個錯誤 "SYNC with master in progress"
slave-read-only yes
#配置 slave 實例是否接受寫。寫 slave 對存儲短暫數據(在同 master數據同步後可以很容易地被刪除)是有用的,但未配置的情況下,客戶端寫可能會發送問題。
repl-ping-slave-period 10
#從庫會按照一個時間間隔向主庫發送 PINGs. 可以通過 repl-ping-slave-period 設置這個時間間隔,默認是 10 秒
repl-timeout 60
#repl-timeout  設置主庫批量數據傳輸時間或者 ping 回覆時間間隔,默認值是 60 秒
# 一定要確保 repl-timeout 大於 repl-ping-slave-period
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
#在 slave socket 的 SYNC 後禁用 TCP_NODELAY
#如果選擇“ yes ” ,Redis 將使用一個較小的數字 TCP 數據包和更少的帶寬將數據發送到 slave , 但是這可能導致數據發送到 slave 端會有延遲 , 如果是 Linux kernel 的默認配置,會達到 40 毫秒 .
#如果選擇 "no",則發送數據到 slave 端的延遲會降低,但將使用更多的帶寬用於複製.
repl-backlog-size 1mb
#設置複製的後臺日誌大小。
#複製的後臺日誌越大, slave 斷開連接及後來可能執行部分複製花的時間就越長。
#後臺日誌在至少有一個 slave 連接時,僅僅分配一次。
repl-backlog-ttl 3600
#在 master 不再連接 slave 後,後臺日誌將被釋放。下面的配置定義從最後一個 slave 斷開連接後需要釋放的時間(秒).
#0意味着從不釋放後臺日誌
slave-priority 100
#如果 master 不能再正常工作,那麼會在多個 slave 中,選擇優先值最小的一個 slave 提升爲 master ,優先值爲 0 表示不能提升爲 master
min-slaves-to-write 0
min-slaves-max-lag 10
#如果少於 N 個 slave 連接,且延遲時間 <=M 秒,則 master 可配置停止接受寫操作。
#例如需要至少 3 個 slave 連接,且延遲 <=10 秒的配置:
#設置 0 爲禁用
#默認 min-slaves-to-write 爲 0 (禁用),min-slaves-max-lag 爲 10
requirepass foobared
#設置客戶端連接後進行任何其他指定前需要使用的密碼。
#警告:因爲 redis 速度相當快,所以在一臺比較好的服務器下,一個外部的用戶可以在一秒鐘進行 150K 次的密碼嘗試,這意味着你需要指定非常非常強大的密碼來防止暴力破解
rename-command CONFIG ""
#命令重命名 .
#在一個共享環境下可以重命名相對危險的命令。比如把 CONFIG 重名爲一個不容易猜測的字符。
#舉例 :
#rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#如果想刪除一個命令,直接把它重命名爲一個空字符 "" 即可,如下:
maxclients 10000
#設置同一時間最大客戶端連接數,默認無限制,
#Redis 可以同時打開的客戶端連接數爲 Redis 進程可以打開的最大文件描述符數,
#如果設置  maxclients 0 ,表示不作限制。
#當客戶端連接數到達限制時, Redis 會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息
maxmemory 100M
#指定Redis最大內存限制,Redis 在啓動時會把數據加載到內存中,達到最大內存後,Redis 會按照清除策略嘗試清除已到期的Key
#如果Redis依照策略清除後無法提供足夠空間,或者策略設置爲 ”noeviction” ,則使用更多空間的命令將會報錯,例如 SET, LPUSH 等。但仍然可以進行讀取操作
#注意:Redis 新的 vm 機制,會把 Key 存放內存, Value 會存放在 swap 區該選項對 LRU 策略很有用。
#maxmemory 的設置比較適合於把 redis 當作於類似 memcached 的緩存來使用,而不適合當做一個真實的 DB 。
#當把 Redis 當做一個真實的數據庫使用的時候,內存使用將是一個很大的開銷
#####
#當內存達到最大值的時候 Redis 會選擇刪除哪些數據?有五種方式可供選擇
volatile-lru -> remove the key with an expire set using an LRU algorithm
#volatile-lru ->  利用 LRU 算法移除設置過過期時間的 key (LRU: 最近使用  Least RecentlyUsed )
allkeys-lru -> remove any key according to the LRU algorithm
#allkeys-lru ->  利用 LRU 算法移除任何 key
volatile-random -> remove a random key with an expire set
#volatile-random ->  移除設置過過期時間的隨機 key
allkeys-random -> remove a random key, any key
#allkeys-random -> 隨機刪除key
volatile-ttl -> remove the key with the nearest expire time (minor TTL)
#volatile-ttl ->  移除即將過期的 key(minor TTL)
noeviction -> don\'t expire at all, just return an error on write operations.
#noeviction ->  不移除任何key,只是返回一個寫錯誤
maxmemory-policy noeviction 
#注意:對於上面的策略,如果沒有合適的 key 可以移除,當寫的時候 Redis 會返回一個錯誤
#默認是:volatile-lru
maxmemory-samples 3
#LRU  和  minimal TTL 算法都不是精準的算法,但是相對精確的算法 ( 爲了節省內存 ) ,隨意你可以選擇樣本大小進行檢測。
#Redis 默認的灰選擇 3 個樣本進行檢測,你可以通過 maxmemory-samples 進行設置
appendonly yes
#默認情況下,redis會在後臺異步的把數據庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼將造成比較大範圍的數據丟失。
#所以 redis 提供了另外一種更加高效的數據庫備份及災難恢復方式。
#開啓 append only 模式之後,redis會把所接收到的每一次寫操作請求都追加到 appendonly.aof 文件中,當redis 重新啓動時,會從該文件恢復出之前的狀態。
#但是這樣會造成 appendonly.aof 文件過大,所以 redis 還支持了 BGREWRITEAOF 指令,對 appendonly.aof 進行重新整理。
#你可以同時開啓 asynchronous dumps 和  AOF
appendfilename "appendonly.aof"
#AOF 文件名稱( 默認 : "appendonly.aof")
appendfsync everysec
#Redis 支持三種同步 AOF 文件的策略 :
#no:不fsync,系統去操作決定同執行時間.(速度快的方式).
#always:always 表示每次有寫操作都進行同步(最安全的方式).
#everysec:表示對寫操作進行累積,每秒同步一次(適中的方式).
#默認是 "everysec",按照速度和安全折中這是最好的。
#如果想讓 Redis 能更高效的運行,你也可以設置爲 "no",讓操作系統決定什麼時候去執行.
#或者相反想讓數據更安全你也可以設置爲 "always"
#如果不確定就用  "everysec".
no-appendfsync-on-rewrite yes
#AOF 策略設置爲 always 或者 everysec 時,後臺處理進程 ( 後臺保存或者 AOF 日誌重寫 ) 會執行大量的 I/O 操作
#在某些 Linux 配置中會阻止過長的 fsync() 請求。注意現在沒有任何修復,即使 fsync 在另外一個線程進行處理
#爲了減緩這個問題,可以設置下面這個參數 no-appendfsync-on-rewrite
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#AOF  自動重寫
#當 AOF 文件增長到一定大小的時候 Redis 能夠調用BGREWRITEAOF對日誌文件進行重寫
#它是這樣工作的:Redis會記住上次進行些日誌後文件的大小(如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定 )
#基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啓動
#同時需要指定一個最小大小用於 AOF 重寫,這個用於阻止即使文件很小但是增長幅度很大也去重寫 AOF 文件的情況
#設置  percentage 爲 0 就關閉這個特性
aof-load-truncated yes
lua-time-limit 5000
#一個 Lua 腳本最長的執行時間爲 5000 毫秒( 5 秒),如果爲 0 或負數表示無限執行時間.
cluster-enabled yes
#開啓redis集羣。
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-migration-barrier 1
slowlog-log-slower-than 10000
#Redis Slow Log  記錄超過特定執行時間的命令。執行時間不包括 I/O 計算比如連接客戶端,返回結果等,只是命令執行時間
#可以通過兩個參數設置 slow log:一個是告訴 Redis 執行超過多少時間被記錄的參數 slowlog-log-slower-than( 微妙 ) ,
#另一個是 slow log 的長度。當一個新命令被記錄的時候最早的命令將被從隊列中移除
#下面的時間以微妙爲單位,因此 1000000 代表一秒。
#注意指定一個負數將關閉慢日誌,而設置爲 0 將強制每個命令都會記錄
slowlog-max-len 128
#對日誌長度沒有限制,只是要注意它會消耗內存可以通過  SLOWLOG RESET 回收被慢日誌消耗的內存
#推薦使用默認值128,當慢日誌超過 128 時,最先進入隊列的記錄會被踢出.
latency-monitor-threshold 0
notify-keyspace-events ""
#默認所用的通知被禁用,因爲用戶通常不需要改特性,並且該特性會有性能損耗。
#注意如果你不指定至少 K 或 E 之一,不會發送任何事件。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#當 hash 中包含超過指定元素個數並且最大的元素沒有超過臨界時,
#hash 將以一種特殊的編碼方式(大大減少內存使用)來存儲,這裏可以設置這兩個臨界值
#Redis Hash 對應 Value 內部實際就是一個 HashMap ,實際這裏會有 2 種不同實現,
#這個 Hash 的成員比較少時 Redis 爲了節省內存會採用類似一維數組的方式來緊湊存儲,而不會採用真正的 HashMap 結構,對應的 valueredisObject 的 encoding 爲 zipmap,
#當成員數量增大時會自動轉成真正的 HashMap, 此時 encoding 爲 ht.
list-max-ziplist-entries 512
list-max-ziplist-value 64
#和 Hash 一樣,多個小的 list 以特定的方式編碼來節省空間。
#list 數據類型節點值大小小於多少字節會採用緊湊存儲格式。
set-max-intset-entries 512
#set 數據類型內部數據如果全部是數值型,且包含多少節點以下會採用緊湊格式存儲。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#和 hashe 和 list 一樣 , 排序的 set 在指定的長度內以指定編碼方式存儲以節省空間
#zsort 數據類型節點值大小小於多少字節會採用緊湊存儲格式。
hll-sparse-max-bytes 3000
activerehashing yes
#Redis 將在每 100 毫秒時使用 1 毫秒的 CPU 時間來對 redis 的 hash 表進行重新 hash ,可以降低內存的使用
#當你的使用場景中,有非常嚴格的實時性需要,不能夠接受 Redis 時不時的對請求有 2 毫秒的延遲的話,把這項配置爲 no 。
#如果沒有這麼嚴格的實時性要求,可以設置爲 yes ,以便能夠儘可能快的釋放內存
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 ->  正常客戶端
#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 客戶端不做限制,因爲他們在一個請求後未要求時(以推的方式)不接收數據,
#只有異步客戶端可能會出現請求數據的速度比它可以讀取的速度快的場景。
#把硬限制和軟限制都設置爲 0 來禁用該特性
hz 10
#Redis 調用內部函數來執行許多後臺任務,如關閉客戶端超時的連接,清除過期的 Key ,等等。
#不是所有的任務都以相同的頻率執行,但 Redis 依照指定的“ Hz ”值來執行檢查任務。
#默認情況下,“ Hz ”的被設定爲 10 。
#提高該值將在 Redis 空閒時使用更多的 CPU 時,但同時當有多個 key 同時到期會使 Redis 的反應更靈敏,以及超時可以更精確地處理。
#範圍是 1 到 500 之間,但是值超過 100 通常不是一個好主意。
#大多數用戶應該使用 10 這個預設值,只有在非常低的延遲的情況下有必要提高最大到 100 。
aof-rewrite-incremental-fsync yes
#當一個子節點重寫 AOF 文件時,如果啓用此選項,則文件每生成 32M 數據進行同步.

新手上路,不恰之處,懇請指出,不勝感謝

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