1. 程式人生 > >Redis 配置redis.conf 解讀

Redis 配置redis.conf 解讀

# Redis 配置檔案
#
# Redis 必須啟動檔案路徑為第一個引數
# ./redis-server /path/to/redis.conf


# 當需要申請資源的時候,可以使用 1k 5GB 4M 或者其他格式
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES  ###################################

# 將多個例項的redis 公共的配置檔案抽出來 單獨個別配置檔案自己維護
# include /path/to/local.conf
# include /path/to/other.conf

################################ GENERAL 全域性配置  #####################################

# 需要在後臺守護程序 使用daemonize yes 預設為no
# 當redis 在後臺執行的時候 redis 會在/var/run/redis.pid 寫入pid 檔案
daemonize no

pidfile /var/run/redis.pid


# redis 預設連線埠為6379
# 如設定為0 Redis 不會監聽在任何TCP 連線上
port 6379


# 繫結單機唯一介面卡 預設使用所有網路介面卡
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1


# 繫結單機唯一介面卡 預設使用所有網路介面卡
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# redis 在連線n 秒之後斷開連線 
# 0 表示不會主動斷開連線
timeout 0

# TCP keepalive.
#在linux上,每個一段時間傳送 SO_KEEPALIVE ACK的空包;推薦值為60s;  這樣做的兩點理由: 
# 1、阻止由於某個command執行過長達到timeout超時時間而被斷開連線;  
# 2、提高連線錯誤的檢測 
tcp-keepalive 0

# Redis 日誌級別 level.
# debug (大量日誌輸出 主要用於測試)
# verbose (相當於debug 更多顯示重要日誌輸出)
# notice (生成環境配置)
# warning (只有非常重要 錯誤日誌被輸出)
loglevel notice

#日誌檔案記錄位置, 如果採用daemonize 守護程序的模式,且引數值為stdout,那
# logs 將會輸出到 /dev/null
logfile ""

# 將日誌輸出到syslog 
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# 日誌級別必須在 LOCAL0-LOCAL7.
# syslog-facility local0

# 設定資料庫連線數 預設是0, you can select
# dbid 值範圍 0 and 'databases'-1
databases 16



################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   將在多少秒之後刷DB資料到Disk
#    
#   
#   900 秒 (15 min)之後 至少 1 個key 發生變更
#   300 秒 (5 min)之後  至少 10 keys 發生變更
#   60 秒之後  至少 10000 keys 發生變更
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   不刷Dick的話,直接  save "" 就可以
#
#   save ""

save 900 1
save 300 10
save 60 10000

# 存貯資料到Dick rdb 是否壓縮資料 預設yes
rdbcompression yes

# 跳過程式碼檢查
rdbchecksum yes

# 預設db 名稱
dbfilename dump.rdb

# 工作區
#
# 資料庫映象備份的檔案放置的路徑。
# 這裡的路徑跟檔名要分開配置是因為redis在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成時,
# 再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。
# 
# AOF檔案也會存放在這個目錄下面
# 
# 注意這裡必須制定一個目錄而不是檔案
dir ./

################################# 主從複製#################################

# 主從Redis 複製 設定該資料庫為其他資料庫的從庫
#
# 1) Redis 複製是的非同步的 但可以配置當連線不上最近的slave庫時master停止接受寫入操作
# 2)當master庫失去小量的連線 slave庫可以暫時充當master庫角色  同時可以配置複製backlog 的大小
# 3) 複製的過程是原子性 需要人工干預 slavez自動嘗試著連線master並且同步資料
# slaveof <masterip> <masterport>

#  master庫可以使用requirepass 指定密碼保護
# masterauth <master-password>

# 當slave 庫連線不上master庫或者現在一直複製中 slave庫有兩種處理方式:
# 1) 設定 slave-serve-stale-data 為yes slave庫一直重複發起連線請求 
# 2) 設定 slave-serve-stale-data 為no slave 會一直返回INFO and SLAVEOF “SYNC with master in progress”

slave-serve-stale-data yes

# 可以配置slave 庫是否接入讀寫操作, 不支援寫slave庫 更容易儲存短暫資料;但如果往slave庫寫資料容易出現一些問題,因為從 Redis 2.6 之後 slaves庫預設read-only
# 注:read-only slave庫不要直接在網上暴露給不可信的客戶端

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100


################################## SECURITY ###################################

# 設定客戶端連線後進行任何其他指定前需要使用的密碼。
# 警告:因為redis速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
#
# requirepass foobared

# 命令重新命名.
#
# 在一個共享環境下可以重新命名相對危險的命令。比如把CONFIG重名為一個不容易猜測的字元。
#
# 舉例:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 如果想刪除一個命令,直接把它重新命名為一個空字元""即可,如下:
#
# rename-command CONFIG ""

################################### LIMITS ####################################
# 設定同一時間最大客戶端連線數,預設無限制,Redis可以同時開啟的客戶端連線數為Redis程序可以開啟的最大檔案描述符數,
# 如果設定 maxclients 0,表示不作限制。
# 當客戶端連線數到達限制時,Redis會關閉新的連線並向客戶端返回max number of clients reached錯誤資訊
#
# maxclients 128

# 指定Redis最大記憶體限制,Redis在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis會先嚐試清除已到期或即將到期的Key
# Redis同時也會移除空的list物件
#
# 當此方法處理後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作
# 
# 注意:Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
#
# maxmemory的設定比較適合於把redis當作於類似memcached的快取來使用,而不適合當做一個真實的DB。
# 當把Redis當做一個真實的資料庫使用的時候,記憶體使用將是一個很大的開銷
# maxmemory <bytes>

# 當記憶體達到最大值的時候Redis會選擇刪除哪些資料?有五種方式可供選擇
# 
# volatile-lru -> 利用LRU演算法移除設定過過期時間的key (LRU:最近使用 Least Recently Used )
# allkeys-lru -> 利用LRU演算法移除任何key
# volatile-random -> 移除設定過過期時間的隨機key
# allkeys->random -> remove a random key, any key
# volatile-ttl -> 移除即將過期的key(minor TTL)
# noeviction -> 不移除任何可以,只是返回一個寫錯誤
# 
# 注意:對於上面的策略,如果沒有合適的key可以移除,當寫的時候Redis會返回一個錯誤
#
#       寫命令包括: 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 volatile-lru

# LRU 和 minimal TTL 演算法都不是精準的演算法,但是相對精確的演算法(為了節省記憶體),隨意你可以選擇樣本大小進行檢測。
# Redis預設的灰選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設定
#
# maxmemory-samples 3

############################## APPEND ONLY MODE ###############################

預設情況下,redis會在後臺非同步的把資料庫映象備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼將造成比較大範圍的資料丟失。
# 所以redis提供了另外一種更加高效的資料庫備份及災難恢復方式。
# 開啟append only模式之後,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof檔案中,當redis重新啟動時,會從該檔案恢復出之前的狀態。
# 但是這樣會造成appendonly.aof檔案過大,所以redis還支援了BGREWRITEAOF指令,對appendonly.aof 進行重新整理。
# 你可以同時開啟asynchronous dumps 和 AOF

appendonly no

# AOF檔名稱 (預設: "appendonly.aof")
# appendfilename appendonly.aof


# Redis支援三種同步AOF檔案的策略:
#
# no: 不進行同步,系統去操作 . Faster.
# always: always表示每次有寫操作都進行同步. Slow, Safest.
# everysec: 表示對寫操作進行累積,每秒同步一次. Compromise.
#
# 預設是"everysec",按照速度和安全折中這是最好的。
# 如果想讓Redis能更高效的執行,你也可以設定為"no",讓作業系統決定什麼時候去執行
# 或者相反想讓資料更安全你也可以設定為"always"
#
# 如果不確定就用 "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

# AOF策略設定為always或者everysec時,後臺處理程序(後臺儲存或者AOF日誌重寫)會執行大量的I/O操作
# 在某些Linux配置中會阻止過長的fsync()請求。注意現在沒有任何修復,即使fsync在另外一個執行緒進行處理
#
# 為了減緩這個問題,可以設定下面這個引數no-appendfsync-on-rewrite
#
# This means that while another child is saving the durability of Redis is
# the same as "appendfsync none", that in pratical terms means that it is
# possible to lost up to 30 seconds of log in the worst scenario (with the
# default Linux settings).
# 
# If you have latency problems turn this to "yes". Otherwise leave it as
# "no" that is the safest pick from the point of view of durability.
no-appendfsync-on-rewrite no

# Automatic rewrite of the append only file.
# AOF 自動重寫
# 當AOF檔案增長到一定大小的時候Redis能夠呼叫 BGREWRITEAOF 對日誌檔案進行重寫 
# 
# 它是這樣工作的:Redis會記住上次進行些日誌後文件的大小(如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定)
#
# 基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動
# 同時需要指定一個最小大小用於AOF重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫AOF檔案的情況
# 設定 percentage 為0就關閉這個特性


auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb