redis config 詳解


redis config 詳解

redis版本5.0.5

 

# 指定 redis 只接收來自於該IP地址的請求,如果不進行設置,那么將處理所有請求
bind 127.0.0.1
 
#是否開啟保護模式,默認開啟。要是配置里沒有指定bind和密碼。開啟該參數后,redis只會本地進行訪問,
拒絕外部訪問。要是開啟了密碼和bind,可以開啟。否則最好關閉,設置為no
protected-mode yes
 
#redis監聽的端口號
port 6379
 
#此參數確定了TCP連接中已完成隊列(完成三次握手之后)的長度, 當然此值必須不大於Linux系統定義
的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統並發量大並且客戶端
速度緩慢的時候,可以將這二個參數一起參考設定。該內核參數默認值一般是128,對於負載很大的服務程序來說
大大的不夠。一般會將它修改為2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,
然后在終端中執行sysctl -p
tcp-backlog 511
 
#此參數為設置客戶端空閑超過timeout,服務端會斷開連接,為0則服務端不會主動斷開連接,不能小於0
timeout 0
 
#tcp keepalive參數。如果設置不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛
掉的對端。降低中間設備出問題而導致網絡看似連接卻已經與對端端口的問題。在Linux內核中,設置了
keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設置值
tcp-keepalive 300
 
#是否在后台執行,yes:后台運行;no:不是后台運行
daemonize yes
 
#redis的進程文件
pidfile /var/run/redis/redis.pid
 
#指定了服務端日志的級別。級別包括:debug(很多信息,方便開發、測試),verbose(許多有用的信息,
但是沒有debug級別信息多),notice(適當的日志級別,適合生產環境),warn(只有非常重要的信息)
loglevel notice
 
#指定了記錄日志的文件。空字符串的話,日志會打印到標准輸出設備。后台運行的redis標准輸出是/dev/null
logfile /usr/local/redis/var/redis.log
 
 
#是否打開記錄syslog功能
# syslog-enabled no
 
#syslog的標識符。
# syslog-ident redis
 
#日志的來源、設備
# syslog-facility local0
 
#數據庫的數量,默認使用的數據庫是0。可以通過”SELECT 【數據庫序號】“命令選擇一個數據庫,序號從0開始
databases 16

 

#RDB核心規則配置 save <指定時間間隔> <執行指定次數更新操作>,滿足條件就將內存中的數據同步到硬盤
中。官方出廠配置默認是 900秒內有1個更改,300秒內有10個更改以及60秒內有10000個更改,則將內存中的
數據快照寫入磁盤。
若不想用RDB方案,可以把 save "" 的注釋打開,下面三個注釋
#   save ""
save 900 1
save 300 10
save 60 10000
 
#當RDB持久化出現錯誤后,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通
過info中的rdb_last_bgsave_status了解RDB持久化是否有錯誤
stop-writes-on-bgsave-error yes
 
#配置存儲至本地數據庫時是否壓縮數據,默認為yes。Redis采用LZF壓縮方式,但占用了一點CPU的時間。若關閉該選項,
但會導致數據庫文件變的巨大。建議開啟。
rdbcompression yes
 
#是否校驗rdb文件;從rdb格式的第五個版本開始,在rdb文件的末尾會帶上CRC64的校驗和。這跟有利於文件的
容錯性,但是在保存rdb文件的時候,會有大概10%的性能損耗,所以如果你追求高性能,可以關閉該配置
rdbchecksum yes
 
#指定本地數據庫文件名,一般采用默認的 dump.rdb
dbfilename dump.rdb
 
#數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
dir /usr/local/redis/var
# 設置能連上redis的最大客戶端連接數量。默認是10000個客戶端連接。由於redis不區分連接是客戶端連接還
是內部打開文件或者和slave連接等,所以maxclients最小建議設置到32。如果超過了maxclients,redis會給
新的連接發送’max number of clients reached’,並關閉連接
# maxclients 10000
redis配置的最大內存容量。當內存滿了,需要配合maxmemory-policy策略進行處理。注意slave的輸出緩沖區
是不計算在maxmemory內的。所以為了防止主機內存使用完,建議設置的maxmemory需要更小一些
maxmemory 122000000
 
#內存容量超過maxmemory后的處理策略。
#volatile-lru:利用LRU算法移除設置過過期時間的key。
#volatile-random:隨機移除設置過過期時間的key。
#volatile-ttl:移除即將過期的key,根據最近過期時間來刪除(輔以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:隨機移除任何key。
#noeviction:不移除任何key,只是返回一個寫錯誤。
#上面的這些驅逐策略,如果redis沒有合適的key驅逐,對於寫命令,還是會返回錯誤。redis將不再接收寫請求,只接收get請求。寫命令包括: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
 
# lru檢測的樣本數。使用lru或者ttl淘汰算法,從需要淘汰的列表中隨機選擇sample個key,選出閑置時間最長的key移除
# maxmemory-samples 5
 
# 是否開啟salve的最大內存
# replica-ignore-maxmemory yes
 
# slog log是用來記錄redis運行中執行比較慢的命令耗時。當命令的執行超過了指定時間,就記錄在slow log
中,slog log保存在內存中,所以沒有IO操作。
#執行時間比slowlog-log-slower-than大的請求記錄到slowlog里面,單位是微秒,所以1000000就是1秒。注
意,負數時間會禁用慢查詢日志,而0則會強制記錄所有命令。
slowlog-log-slower-than 10000
 
#慢查詢日志長度。當一個新的命令被寫進日志的時候,最老的那個記錄會被刪掉。這個長度沒有限制。只要有足
夠的內存就行。你可以通過 SLOWLOG RESET 來釋放內存
slowlog-max-len 128

 

#Redis 默認不開啟。它的出現是為了彌補RDB的不足(數據的不一致性),所以它采用日志的形式來記錄每個寫
操作,並追加到文件中。Redis 重啟的會根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作
默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可
能有幾分鍾的數據丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的
持久化特性。Redis會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,每次啟動時Redis都會先把這
個文件的數據讀入內存里,先忽略RDB文件。若開啟rdb則將no改為yes
appendonly no
 
指定本地數據庫文件名,默認值為 appendonly.aof
appendfilename "appendonly.aof"
 
 
#aof持久化策略的配置
#no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快
#always表示每次寫入都執行fsync,以保證數據同步到磁盤
#everysec表示每秒執行一次fsync,可能會導致丟失這1s數據
# appendfsync always
appendfsync everysec
# appendfsync no
 
# 在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行
fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置為默認設置為no。如果對延遲要求很高的
應用,這個字段可以設置為yes,否則還是設置為no,這樣對持久化特性來說這是更安全的選擇。設置為yes表
示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成后再寫入,默認為no,建議yes。Linux的
默認fsync策略是30秒。可能丟失30秒數據
no-appendfsync-on-rewrite no
 
#aof自動重寫配置。當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件
增長到一定大小的時候Redis能夠調用bgrewriteaof對日志文件進行重寫。當前AOF文件大小是上次日志重寫得
到AOF文件大小的二倍(設置為100)時,自動啟動新的日志重寫過程
auto-aof-rewrite-percentage 100
 
#設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫
auto-aof-rewrite-min-size 64mb
 
#aof文件可能在尾部是不完整的,當redis啟動的時候,aof文件的數據被載入內存。重啟可能發生在redis所
在的主機操作系統宕機后,尤其在ext4文件系統沒有加上data=ordered選項(redis宕機或者異常終止不會造
成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入盡可能多的數據。如果選擇的是yes,
當截斷的aof文件被導入的時候,會自動發布一個log給客戶端然后load。如果是no,用戶必須手動redis-
check-aof修復AOF文件才可以
aof-load-truncated yes
 
#加載redis時,可以識別AOF文件以“redis”開頭。
#字符串並加載帶前綴的RDB文件,然后繼續加載AOF尾巴
aof-use-rdb-preamble yes
 
# 集群開關,默認是不開啟集群模式
# cluster-enabled yes
 
#集群配置文件的名稱,每個節點都有一個集群相關的配置文件,持久化保存集群的信息。這個文件並不需要手動
配置,這個配置文件有Redis生成並更新,每個Redis集群節點需要一個單獨的配置文件,請確保與實例運行的系
統中配置文件名稱不沖突
# cluster-config-file nodes-6379.conf
 
#節點互連超時的閥值。集群節點超時毫秒數
# cluster-node-timeout 15000
 
#在進行故障轉移的時候,全部slave都會請求申請為master,但是有些slave可能與master斷開連接一段時間
了,導致數據過於陳舊,這樣的slave不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時
間是否過長。判斷方法是:
#比較slave斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果節點超時時間為三十秒, 並且slave-validity-factor為10,假設默認的repl-ping-slave-period是10
秒,即如果超過310秒slave將不會嘗試進行故障轉移
# cluster-replica-validity-factor 10
 
# master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數若被設為2,那么只有當一
個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移
# cluster-migration-barrier 1
 
#默認情況下,集群全部的slot有節點負責,集群狀態才為ok,才能提供服務。設置為no,可以在slot沒有全
部分配的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而
造成很長時間數據不一致
# cluster-require-full-coverage yes
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM