Redis.conf配置檔案內容詳解

Federico發表於2017-10-09
#預設以後臺方式執行
daemonize yes
    
#指定redis pid檔案
pidfile /data/apps/var/redis2/redis2.pid
   
#指定redis啟動佔用的埠 
port 6380

#此項配置內容屬於redis優化內容    
tcp-backlog 2048

#redis繫結的ip或者主機名,注意如果此處繫結設定為127.0.0.1,將會出現其他伺服器上的服務連線至此臺redis失敗的情況    
bind redis1

#指定socket連線空閒時間(秒),如果連線空閒超時將會關閉連線,設定為0表示用不超時
timeout 0

#指定tcp連線是否為長連線,長連線將會額外增加server端的開支,預設為0表示禁用
tcp-keepalive 0

#指定日誌級別,notice適用於生產環境
loglevel notice

#指定log日誌位置
logfile "/usr/local/redis.log"

#是否將日誌輸出到系統日誌,預設為no
syslog-enabled no

#指定syslog的標示符,如果'syslog-enabled'是no,則這個選項無效
syslog-ident redis

#設定redis所允許的最大"db簇"的個數,預設為16個簇
databases 16

#如果snapshot過程中出現錯誤,即資料持久化失敗,是否終止所有的客戶端write請求
stop-writes-on-bgsave-error yes

#是否啟用rdb檔案壓縮手段,預設為yes
rdbcompression yes

#是否對rdb檔案使用CRC64校驗和,預設為"yes",那麼每個rdb檔案內容的末尾都會追加CRC校驗和
rdbchecksum yes

#指定rdb檔案的名稱
dbfilename dump.rdb

#指定rdb/AOF檔案的目錄位置
dir /usr/local/data/redis/

#設定redis佔用最大記憶體數,如果超過redis會試圖刪除即將過期的key,而保護具有較長生命週期的key
maxmemory 5gb

#當記憶體佔用超過maxmemory限定時,觸發主動清理策略
maxmemory-policy allkeys-lru
#清理策略方式如下:
 volatile-lru:只對設定了過期時間的key進行LRU(預設值)
 allkeys-lru : 刪除lru演算法的key
 volatile-random:隨機刪除即將過期key
 allkeys-random:隨機刪除
 volatile-ttl : 刪除即將過期的
 noeviction : 永不過期,返回錯誤

#設定replication,使用slaveof把一個redis例項設定為另一個redis server的從庫。
slaveof redis2 6379

#當slave丟失與master的連線時,或者slave仍然在於master進行資料同步時(還沒有與master保持一致),slave可以有兩種方式來響應客戶端請求:
slave-serve-stale-data yes
方式:
如果 slave-serve-stale-data 設定成 'yes' (the default) slave會仍然響應客戶端請求,此時可能會有問題
如果 slave-serve-stale data設定成  'no'  slave會返回"SYNC with master in progress"這樣的錯誤資訊。 但 INFO 和SLAVEOF命令除外

#slave伺服器是否可寫
slave-read-only yes

#slave與master的連線,是否禁用TCP nodelay選項
yes表示禁用,那麼socket通訊中資料將會以packet方式傳送,可以提高socket通訊的效率(tcp互動次數),但是小資料將會被buffer,不會被立即傳送,對於接受者可能存在延遲
"no"表示開啟tcp nodelay選項,任何資料都會被立即傳送,及時性較好,但是效率較低,建議設定為no
repl-disable-tcp-nodelay no

#slave的權重值,預設100.當master失效後,Sentinel將會從slave列表中找到權重值最低的slave,並提升為master,適用Sentinel模組,需要額外的配置檔案支援
slave-priority 100

#是否開啟aof功能,"yes"表示開啟,在開啟情況下,aof檔案同步功能才生效,預設為"no",對master機器,建議使用AOF,對於slave,建議關閉
appendonly no

#aof檔案儲存路徑
appendfilename "appendonly.aof"

#任何一個aof記錄都立即進行檔案同步(磁碟寫入),安全性最高;如果write請求比較密集,將會造成較高的磁碟IO開支和響應延遲,everysec每秒同步一次
appendfsync everysec

#在aof rewrite期間,是否對aof新記錄的append暫緩使用檔案同步策略,主要考慮磁碟IO開支和請求阻塞時間,預設為no,表示"不暫緩",新的aof記錄仍然會被立即同步
no-appendfsync-on-rewrite no

#aof每次rewrite之後,都會記住當前aof檔案的大小,當檔案增長到一定比例後,繼續進行aof rewrite
auto-aof-rewrite-percentage 100

#aof rewrite觸發時機,最小檔案尺寸
auto-aof-rewrite-min-size 64mb

#lua指令碼執行的最大時間
lua-time-limit 5000

#慢操作日誌記錄
slowlog-log-slower-than 10000

#慢操作日誌保留的最大條數
slowlog-max-len 128

#鍵空間通知,""表示關閉
notify-keyspace-events ""

##ziplist中允許儲存的最大條目個數
hash-max-ziplist-entries 512

#ziplist中允許條目value值最大位元組數
hash-max-ziplist-value 64

#對於list型別,將會採取ziplist,linkedlist兩種編碼型別
list-max-ziplist-entries 512

#ziplist中允許條目value值最大位元組數
list-max-ziplist-value 64

#intset中允許儲存的最大條目個數,如果達到閥值,intset將會被重構為hashtable
set-max-intset-entries 512

#設定同上
zset-max-ziplist-entries 128

#設定同上
zset-max-ziplist-value 64

#是否開啟頂層資料結構的rehash功能,如果記憶體允許,請開啟
activerehashing yes

#客戶端buffer控制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 512mb 512mb 600
client-output-buffer-limit pubsub 32mb 8mb 60

#Redis server執行後臺任務的頻率,預設為10,此值越大表示redis對"間歇性task"的執行次數越頻繁
hz 10

#aof rewrite過程中,是否採取增量"檔案同步"策略,預設為"yes",而且必須為yes
aof-rewrite-incremental-fsync yes

tcp-keepalive屬於redis優化內容,如果有興趣的話可以看看這篇部落格寫的很好https://ylgrgyq.github.io/2017/05/18/tcp-backlog/

清理策略

當Redis記憶體使用達到maxmemory時,需要選擇設定好的maxmemory-policy進行對老資料的置換。
下面是可以選擇的置換策略:

  • noeviction: 不進行置換,表示即使記憶體達到上限也不進行置換,所有能引起記憶體增加的命令都會返回error
  • allkeys-lru: 優先刪除掉最近最不經常使用的key,用以儲存新資料
  • volatile-lru: 只從設定失效(expire set)的key中選擇最近最不經常使用的key進行刪除,用以儲存新資料
  • allkeys-random: 隨機從all-keys中選擇一些key進行刪除,用以儲存新資料
  • volatile-random: 只從設定失效(expire set)的key中,選擇一些key進行刪除,用以儲存新資料
  • volatile-ttl: 只從設定失效(expire set)的key中,選出存活時間(TTL)最短的key進行刪除,用以儲存新資料

相關文章