1. 程式人生 > 其它 >redis 配置檔案優化

redis 配置檔案優化

bind 0.0.0.0 #監聽地址,可以用空格隔開後多個監聽IP

protected-mode yes #redis3.2之後加入的新特性,在沒有設定bind IP和密碼的時候,redis只允許 訪問127.0.0.1:6379,可以遠端連線,但當訪問將提示警告資訊並拒絕遠端訪問
port 6379 #監聽埠 ,預設6379/tcp

tcp-backlog 511 #三次握手的時候server端收到client ack確認號之後的佇列值,即全連線佇列長度

timeout 0 #客戶端和Redis服務端的連線超時時間,預設是0,表示永不超時

tcp-keepalive 300 #tcp 會話保持時間300s

daemonize no #預設no,即直接執行redis-server程式時 ,不作為守護程序執行,而是以前臺方式執行, 如果想在後臺執行需改成yes,當redis作為守護程序執行的時候,它會寫一個 pid 到
/var/run/redis.pid 檔案

supervised no #和OS相關引數,可設定通過upstart和systemd管理Redis守護程序, centos7後都使 用systemd
pidfile /var/run/redis_6379.pid #pid檔案路徑 ,可以修改
為/apps/redis/run/redis_6379.pid

loglevel notice #日誌級別

logfile "/path/redis.log" #日誌路徑 ,示例 :logfile "/apps/redis/log/redis_6379.log"

databases 16 #設定資料庫數量,預設: 0-15,共16個庫

always-show-logo yes #在啟動redis 時是否顯示或在日誌中記錄記錄redis的logo

save 900 1 #在900秒內有1個key內容發生更改 ,就執行快照機制
save 300 10 #在300秒內有10個key內容發生更改 ,就執行快照機制
save 60 10000 #60秒內如果有10000個key以上的變化,就自動快照備份

stop-writes-on-bgsave-error yes #預設為yes時 ,可能會因空間滿等原因快照無法儲存出錯時,會禁 止redis寫入操作,生產建議為no
#此項只針對配置檔案中的自動save有效


rdbcompression yes #持久化到RDB檔案時,是否壓縮, "yes"為壓縮, "no"則反之

rdbchecksum yes #是否對備份檔案開啟RC64校驗,預設是開啟

dbfilename dump.rdb #快照檔名

dir ./ #快照檔案儲存路徑,示例: dir "/apps/redis/data"

#主從複製相關
# replicaof <masterip> <masterport> #指定複製的master主機地址和埠, 5.0版之前的指令為 slaveof
# masterauth <master-password> #指定複製的master主機的密碼

replica-serve-stale-data yes #當從庫同主庫失去連線或者複製正在進行,從機庫有兩種執行方式:
1、設定為yes(預設設定),從庫會繼續響應客戶端的讀請求,此為建議值
2、設定為no,除去特定命令外的任何請求都會返回一個錯誤"SYNC with master in progress"。

replica-read-only yes #是否設定從庫只讀,建議值為yes,否則主庫同步從庫時可能會覆蓋資料,造成 資料丟失
repl-diskless-sync no #是否使用socket方式複製資料(無盤同步),新slave第一次連線master時需 要做資料的全量同步, redis server就要從記憶體dump出新的RDB檔案,然後從master傳到slave,有兩種 方式把RDB檔案傳輸給客戶端:
1、基於硬碟(disk-backed):為no時, master建立一個新程序dump生成RDB磁碟檔案, RDB完成之後由 父程序(即主程序)將RDB檔案傳送給slaves,此為預設值
2、基於socket(diskless): master建立一個新程序直接dump RDB至slave的網路socket,不經過主 程序和硬碟
#推薦使用基於硬碟(為no),是因為RDB檔案建立後,可以同時傳輸給更多的slave,但是基於socket(為 yes), 新slave連線到master之後得逐個同步資料。只有當磁碟I/O較慢且網路較快時,可用 diskless(yes),否則一般建議使用磁碟(no)
repl-diskless-sync-delay 5 #diskless時複製的伺服器等待的延遲時間,設定0為關閉,在延遲時間 內到達的客戶端,會一起通過diskless方式同步資料,但是一旦複製開始, master節點不會再接收新slave 的複製請求,直到下一次同步開始才再接收新請求。即無法為延遲時間後到達的新副本提供服務,新副本將排 隊等待下一次RDB傳輸,因此伺服器會等待一段時間才能讓更多副本到達。推薦值: 30-60
repl-ping-replica-period 10 #slave根據master指定的時間進行週期性的PING master,用於監測 master狀態 ,預設10s
repl-timeout 60 #複製連線的超時時間,需要大於repl-ping-slave-period,否則會經常報超時

repl-disable-tcp-nodelay no #是否在slave套接字傳送SYNC之後禁用 TCP_NODELAY,如果選 擇"yes",Redis將合併多個報文為一個大的報文,從而使用更少數量的包向slaves傳送資料,但是將使數 據傳輸到slave上有延遲, Linux核心的預設配置會達到40毫秒,如果 "no" ,資料傳輸到slave的延遲將 會減少,但要使用更多的頻寬
repl-backlog-size 512mb #複製緩衝區記憶體大小,當slave斷開連線一段時間後,該緩衝區會累積複製 副本資料,因此當slave 重新連線時,通常不需要完全重新同步,只需傳遞在副本中的斷開連線後沒有同步 的部分資料即可。只有在至少有一個slave連線之後才分配此記憶體空間 ,建議建立主從時此值要調大一些或在 低峰期配置 ,否則會導致同步到slave失敗
repl-backlog-ttl 3600 #多長時間內master沒有slave連線,就清空backlog緩衝區

replica-priority 100 #當master不可用,哨兵Sentinel會根據slave的優先順序選舉一個master,此 值最低的slave會優先當選master,而配置成0,永遠不會被選舉,一般多個slave都設為一樣的值,讓其自 動選擇

#min-replicas-to-write 3 #至少有3個可連線的slave,mater才接受寫操作
#min-replicas-max-lag 10 #和上面至少3個slave的ping延遲不能超過10秒,否則master也將停止
寫操作

requirepass foobared #設定redis連線密碼,之後需要AUTH pass,如果有特殊符號,用" "引起來 , 生產建議設定
rename-command #重新命名一些高危命令,示例: rename-command FLUSHALL "" 禁用命令
#示例: rename-command del magedu

maxclients 10000 #Redis最大連線客戶端

maxmemory <bytes> #redis使用的最大記憶體,單位為bytes位元組, 0為不限制,建議設為實體記憶體一半, 8G記憶體的計算方式8(G)*1024(MB)1024(KB)*1024(Kbyte),需要注意的是緩衝區是不計算在 maxmemory內 ,生產中如果不設定此項 ,可能會導致OOM
appendonly no #是否開啟AOF日誌記錄,預設redis使用的是rdb方式持久化,這種方式在許多應用中已 經足夠用了,但是redis如果中途宕機,會導致可能有幾分鐘的資料丟失(取決於dump資料的間隔時間),根 據save來策略進行持久化, Append Only File是另一種持久化方式,可以提供更好的持久化特性, Redis 會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料 讀入記憶體裡,先忽略RDB檔案。預設不啟用此功能
appendfilename "appendonly.aof" #文字檔案AOF的檔名,存放在dir指令指定的目錄中

appendfsync everysec #aof持久化策略的配置
#no表示由作業系統保證資料同步到磁碟,Linux的預設fsync策略是30秒,最多會丟失30s的資料 #always表示每次寫入都執行fsync,以保證資料同步到磁碟 ,安全性高 ,效能較差
#everysec表示每秒執行一次fsync,可能會導致丟失這1s資料 ,此為預設值 ,也生產建議值

#同時在執行bgrewriteaof操作和主程序寫aof檔案的操作,兩者都會操作磁碟,而bgrewriteaof往往會 涉及大量磁碟操作,這樣就會造成主程序在寫aof檔案的時候出現阻塞的情形 ,以下引數實現控制
no-appendfsync-on-rewrite no #在aof rewrite期間 ,是否對aof新記錄的append暫緩使用檔案同 步策略 ,主要考慮磁碟IO開支和請求阻塞時間。
#預設為no,表示"不暫緩",新的aof記錄仍然會被立即同步到磁碟,是最安全的方式,不會丟失資料,但是要 忍受阻塞的問題
#為yes,相當於將appendfsync設定為no,這說明並沒有執行磁碟操作,只是寫入了緩衝區,因此這樣並不 會造成阻塞(因為沒有競爭磁碟),但是如果這個時候redis掛掉,就會丟失資料。丟失多少資料呢? Linux 的預設fsync策略是30秒,最多會丟失30s的資料 ,但由於yes效能較好而且會避免出現阻塞因此比較推薦
#rewrite 即對aof檔案進行整理 ,將空閒空間回收 ,從而可以減少恢復資料時間

auto-aof-rewrite-percentage 100 #當Aof log增長超過指定百分比例時,重寫AOF檔案,設定為0 表示不自動重寫Aof日誌,重寫是為了使aof體積保持最小,但是還可以確保儲存最完整的資料
auto-aof-rewrite-min-size 64mb #觸發aof rewrite的最小檔案大小

aof-load-truncated yes #是否載入由於某些原因導致的末尾異常的AOF檔案(主程序被kill/斷電 等),建議yes
aof-use-rdb-preamble no #redis4.0新增RDB-AOF混合持久化格式,在開啟了這個功能之後, AOF重 寫產生的檔案將同時包含RDB格式的內容和AOF格式的內容,其中RDB格式的內容用於記錄已有的資料,而AOF 格式的內容則用於記錄最近發生了變化的資料,這樣Redis就可以同時兼有RDB持久化和AOF持久化的優點 (既能夠快速地生成重寫檔案,也能夠在出現問題時,快速地載入資料) ,預設為no,即不啟用此功能
lua-time-limit 5000 #lua指令碼的最大執行時間,單位為毫秒

cluster-enabled yes #是否開啟叢集模式,預設不開啟 ,即單機模式
cluster-config-file nodes-6379.conf #由node節點自動生成的叢集配置檔名稱

cluster-node-timeout 15000 #叢集中node節點連線超時時間,單位ms,超過此時間,會踢出叢集

cluster-replica-validity-factor 10 #單位為次 ,在執行故障轉移的時候可能有些節點和master斷 開一段時間導致資料比較舊,這些節點就不適用於選舉為master,超過這個時間的就不會被進行故障轉移 ,不 能當選master,計算公式: (node-timeout * replica-validity-factor) + repl-ping- replica-period
cluster-migration-barrier 1 #叢集遷移屏障,一個主節點至少擁有1個正常工作的從節點,即如果主 節點的slave節點故障後會將多餘的從節點分配到當前主節點成為其新的從節點。
cluster-require-full-coverage yes #叢集請求槽位全部覆蓋,如果一個主庫宕機且沒有備庫就會出 現叢集槽位不全,那麼yes時redis叢集槽位驗證不全 ,就不再對外提供服務(對key賦值時 ,會出現 CLUSTERDOWN The cluster is down的提示,cluster_state:fail,但ping 仍PONG),而no則可以 繼續使用 ,但是會出現查詢資料查不到的情況(因為有資料丟失)。生產建議為no
cluster-replica-no-failover no #如果為yes,此選項阻止在主伺服器發生故障時嘗試對其主伺服器 進行故障轉移。 但是,主伺服器仍然可以執行手動強制故障轉移,一般為no
#Slow log 是 Redis 用來記錄超過指定執行時間的日誌系統,執行時間不包括與客戶端交談,傳送回覆等 I/O操作,而是實際執行命令所需的時間(在該階段執行緒被阻塞並且不能同時為其它請求提供服務) ,由於 slow log 儲存在記憶體裡面,讀寫速度非常快,因此可放心地使用,不必擔心因為開啟 slow log 而影響 Redis 的速度
slowlog-log-slower-than 10000 #以微秒為單位的慢日誌記錄,為負數會禁用慢日誌,為0會記錄每個 命令操作。預設值為10ms,一般一條命令執行都在微秒級 ,生產建議設為1ms-10ms之間
slowlog-max-len 128 #最多記錄多少條慢日誌的儲存佇列長度,達到此長度後,記錄新命令會將最舊的 命令從命令佇列中刪除,以此滾動刪除 ,即 ,先進先出 ,佇列固定長度 ,預設128,值偏小 ,生產建議設為1000以 上