1. 程式人生 > >redis.conf中文詳解

redis.conf中文詳解

# Redis示例配置檔案

# 注意單位問題:當需要設定記憶體大小的時候,可以使用類似1k、5GB、4M這樣的常見格式:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# 單位是大小寫不敏感的,所以1GB 1Gb 1gB的寫法都是完全一樣的。

# Redis預設是不作為守護程序來執行的。你可以把這個設定為"yes"讓它作為守護程序來執行。
# 注意,當作為守護程序的時候,Redis會把程序ID寫到 /var/run/redis.pid
daemonize no

# 當以守護程序方式執行的時候,Redis會把程序ID預設寫到 /var/run/redis.pid。你可以在這裡修改路徑。
pidfile /var/run/redis.pid

# 接受連線的特定埠,預設是6379。
# 如果埠設定為0,Redis就不會監聽TCP套接字。
port 6379

# 如果你想的話,你可以繫結單一介面;如果這裡沒單獨設定,那麼所有介面的連線都會被監聽。
#
# bind 127.0.0.1

# 指定用來監聽連線的unxi套接字的路徑。這個沒有預設值,所以如果你不指定的話,Redis就不會通過unix套接字來監聽。
#
# unixsocket /tmp/redis.sock
# unixsocketperm 755

#一個客戶端空閒多少秒後關閉連線。(0代表禁用,永不關閉)
timeout 0

# 設定伺服器除錯等級。
# 可能值:
# debug (很多資訊,對開發/測試有用)
# verbose (很多精簡的有用資訊,但是不像debug等級那麼多)
# notice (適量的資訊,基本上是你生產環境中需要的程度)
# warning (只有很重要/嚴重的資訊會記錄下來)
loglevel verbose

# 指明日誌檔名。也可以使用"stdout"來強制讓Redis把日誌資訊寫到標準輸出上。
# 注意:如果Redis以守護程序方式執行,而你設定日誌顯示到標準輸出的話,那麼日誌會發送到 /dev/null
logfile stdout

# 要使用系統日誌記錄器很簡單,只要設定 "syslog-enabled" 為 "yes" 就可以了。
# 然後根據需要設定其他一些syslog引數就可以了。
# syslog-enabled no

# 指明syslog身份
# syslog-ident redis

# 指明syslog的裝置。必須是一個使用者或者是 LOCAL0 ~ LOCAL7 之一。
# syslog-facility local0

# 設定資料庫個數。預設資料庫是 DB 0,你可以通過SELECT <dbid> WHERE dbid(0~'databases' - 1)來為每個連線使用不同的資料庫。
databases 16

################################ 快照 #################################

#
# 把資料庫存到磁碟上:
#
#   save <seconds> <changes>
#   
#   會在指定秒數和資料變化次數之後把資料庫寫到磁碟上。
#
#   下面的例子將會進行把資料寫入磁碟的操作:
#   900秒(15分鐘)之後,且至少1次變更
#   300秒(5分鐘)之後,且至少10次變更
#   60秒之後,且至少10000次變更
#
#   注意:你要想不寫磁碟的話就把所有 "save" 設定註釋掉就行了。

save 900 1
save 300 10
save 60 10000

# 當匯出到 .rdb 資料庫時是否用LZF壓縮字串物件。
# 預設設定為 "yes",所以幾乎總是生效的。
# 如果你想節省CPU的話你可以把這個設定為 "no",但是如果你有可壓縮的key的話,那資料檔案就會更大了。
rdbcompression yes

# 資料庫的檔名
dbfilename dump.rdb

# 工作目錄
#
# 資料庫會寫到這個目錄下,檔名就是上面的 "dbfilename" 的值。
# 
# 累加檔案也放這裡。
# 
# 注意你這裡指定的必須是目錄,不是檔名。
dir ./

################################# 同步 #################################

#
# 主從同步。通過 slaveof 配置來實現Redis例項的備份。
# 注意,這裡是本地從遠端複製資料。也就是說,本地可以有不同的資料庫檔案、繫結不同的IP、監聽不同的埠。
#
# slaveof <masterip> <masterport>

# 如果master設定了密碼(通過下面的 "requirepass" 選項來配置),那麼slave在開始同步之前必須進行身份驗證,否則它的同步請求會被拒絕。
#
# masterauth <master-password>

# 當一個slave失去和master的連線,或者同步正在進行中,slave的行為有兩種可能:
#
# 1) 如果 slave-serve-stale-data 設定為 "yes" (預設值),slave會繼續響應客戶端請求,可能是正常資料,也可能是還沒獲得值的空資料。
# 2) 如果 slave-serve-stale-data 設定為 "no",slave會回覆"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。
#
slave-serve-stale-data yes

# slave根據指定的時間間隔向伺服器傳送ping請求。
# 時間間隔可以通過 repl_ping_slave_period 來設定。
# 預設10秒。
#
# repl-ping-slave-period 10

# 下面的選項設定了大塊資料I/O、向master請求資料和ping響應的過期時間。
# 預設值60秒。
#
# 一個很重要的事情是:確保這個值比 repl-ping-slave-period 大,否則master和slave之間的傳輸過期時間比預想的要短。
#
# repl-timeout 60

################################## 安全 ###################################

# 要求客戶端在處理任何命令時都要驗證身份和密碼。
# 這在你信不過來訪者時很有用。
#
# 為了向後相容的話,這段應該註釋掉。而且大多數人不需要身份驗證(例如:它們執行在自己的伺服器上。)
# 
# 警告:因為Redis太快了,所以居心不良的人可以每秒嘗試150k的密碼來試圖破解密碼。
# 這意味著你需要一個高強度的密碼,否則破解太容易了。
#
# requirepass foobared

# 命令重新命名
#
# 在共享環境下,可以為危險命令改變名字。比如,你可以為 CONFIG 改個其他不太容易猜到的名字,這樣你自己仍然可以使用,而別人卻沒法做壞事了。
#
# 例如:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 甚至也可以通過給命令賦值一個空字串來完全禁用這條命令:
#
# rename-command CONFIG ""

################################### 限制 ####################################

#
# 設定最多同時連線客戶端數量。
# 預設沒有限制,這個關係到Redis程序能夠開啟的檔案描述符數量。
# 特殊值"0"表示沒有限制。
# 一旦達到這個限制,Redis會關閉所有新連線併發送錯誤"達到最大使用者數上限(max number of clients reached)"
#
# maxclients 128

# 不要用比設定的上限更多的記憶體。一旦記憶體使用達到上限,Redis會根據選定的回收策略(參見:maxmemmory-policy)刪除key。
#
# 如果因為刪除策略問題Redis無法刪除key,或者策略設定為 "noeviction",Redis會回覆需要更多記憶體的錯誤資訊給命令。
# 例如,SET,LPUSH等等。但是會繼續合理響應只讀命令,比如:GET。
#
# 在使用Redis作為LRU快取,或者為例項設定了硬性記憶體限制的時候(使用 "noeviction" 策略)的時候,這個選項還是滿有用的。
#
# 警告:當一堆slave連上達到記憶體上限的例項的時候,響應slave需要的輸出快取所需記憶體不計算在使用記憶體當中。
# 這樣當請求一個刪除掉的key的時候就不會觸發網路問題/重新同步的事件,然後slave就會收到一堆刪除指令,直到資料庫空了為止。
#
# 簡而言之,如果你有slave連上一個master的話,那建議你把master記憶體限制設小點兒,確保有足夠的系統記憶體用作輸出快取。
# (如果策略設定為"noeviction"的話就不無所謂了)
#
# maxmemory <bytes>

# 記憶體策略:如果達到記憶體限制了,Redis如何刪除key。你可以在下面五個策略裡面選:
# 
# volatile-lru -> 根據LRU演算法生成的過期時間來刪除。
# allkeys-lru -> 根據LRU演算法刪除任何key。
# volatile-random -> 根據過期設定來隨機刪除key。
# allkeys->random -> 無差別隨機刪。
# volatile-ttl -> 根據最近過期時間來刪除(輔以TTL)
# noeviction -> 誰也不刪,直接在寫操作時返回錯誤。
# 
# 注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。
#
#       這裡涉及的命令: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和最小TTL演算法的實現都不是很精確,但是很接近(為了省記憶體),所以你可以用樣例做測試。
# 例如:預設Redis會檢查三個key然後取最舊的那個,你可以通過下面的配置項來設定樣本的個數。
#
# maxmemory-samples 3

############################## 純累加模式 ###############################

# 預設情況下,Redis是非同步的把資料匯出到磁碟上。這種情況下,當Redis掛掉的時候,最新的資料就丟了。
# 如果不希望丟掉任何一條資料的話就該用純累加模式:一旦開啟這個模式,Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案。
# 每次啟動時Redis都會把這個檔案的資料讀入記憶體裡。
#
# 注意,非同步匯出的資料庫檔案和純累加檔案可以並存(你得把上面所有"save"設定都註釋掉,關掉匯出機制)。
# 如果純累加模式開啟了,那麼Redis會在啟動時載入日誌檔案而忽略匯出的 dump.rdb 檔案。
#
# 重要:檢視 BGREWRITEAOF 來了解當累加日誌檔案太大了之後,怎麼在後臺重新處理這個日誌檔案。

appendonly no

# 純累加檔名字(預設:"appendonly.aof")
# appendfilename appendonly.aof

# fsync() 請求作業系統馬上把資料寫到磁碟上,不要再等了。
# 有些作業系統會真的把資料馬上刷到磁碟上;有些則要磨蹭一下,但是會盡快去做。
#
# Redis支援三種不同的模式:
#
# no:不要立刻刷,只有在作業系統需要刷的時候再刷。比較快。
# always:每次寫操作都立刻寫入到aof檔案。慢,但是最安全。
# everysec:每秒寫一次。折衷方案。
#
# 預設的 "everysec" 通常來說能在速度和資料安全性之間取得比較好的平衡。
# 如果你真的理解了這個意味著什麼,那麼設定"no"可以獲得更好的效能表現(如果丟資料的話,則只能拿到一個不是很新的快照);
# 或者相反的,你選擇 "always" 來犧牲速度確保資料安全、完整。
#
# 如果拿不準,就用 "everysec"

# appendfsync always
appendfsync everysec
# appendfsync no

# 如果AOF的同步策略設定成 "always" 或者 "everysec",那麼後臺的儲存程序(後臺儲存或寫入AOF日誌)會產生很多磁碟I/O開銷。
# 某些Linux的配置下會使Redis因為 fsync() 而阻塞很久。
# 注意,目前對這個情況還沒有完美修正,甚至不同執行緒的 fsync() 會阻塞我們的 write(2) 請求。
#
# 為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止 fsync()。
# 
# 這就意味著如果有子程序在進行儲存操作,那麼Redis就處於"不可同步"的狀態。
# 這實際上是說,在最差的情況下可能會丟掉30秒鐘的日誌資料。(預設Linux設定)
# 
# 如果你有延遲的問題那就把這個設為 "yes",否則就保持 "no",這是儲存持久資料的最安全的方式。
no-appendfsync-on-rewrite no

# 自動重寫AOF檔案
#
# 如果AOF日誌檔案大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日誌檔案。
# 
# 工作原理:Redis記住上次重寫時AOF日誌的大小(或者重啟後沒有寫操作的話,那就直接用此時的AOF檔案),
#           基準尺寸和當前尺寸做比較。如果當前尺寸超過指定比例,就會觸發重寫操作。
#
# 你還需要指定被重寫日誌的最小尺寸,這樣避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
#
# 指定百分比為0會禁用AOF自動重寫特性。

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

################################## 慢查詢日誌 ###################################

# Redis慢查詢日誌可以記錄超過指定時間的查詢。執行時間不包括各種I/O時間。
# 例如:連線客戶端,傳送響應資料等。只計算命令執行的實際時間(這是唯一一種命令執行執行緒阻塞而無法同時為其他請求服務的場景)
# 
# 你可以為慢查詢日誌配置兩個引數:一個是超標時間,單位為微妙,記錄超過個時間的命令。
# 另一個是慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉。
#
# 下面的時間單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令。
slowlog-log-slower-than 10000

# 這個長度沒有限制。只要有足夠的記憶體就行。你可以通過 SLOWLOG RESET 來釋放記憶體。(譯者注:日誌居然是在記憶體裡的Orz)
slowlog-max-len 128

################################ 虛擬記憶體 ###############################

### 警告!虛擬記憶體在Redis 2.4是反對的。
### 非常不鼓勵使用虛擬記憶體!!

# 虛擬記憶體可以使Redis在記憶體不夠的情況下仍然可以將所有資料序列儲存在記憶體裡。
# 為了做到這一點,高頻key會調到記憶體裡,而低頻key會轉到交換檔案裡,就像作業系統使用記憶體頁一樣。
#
# 要使用虛擬記憶體,只要把 "vm-enabled" 設定為 "yes",並根據需要設定下面三個虛擬記憶體引數就可以了。

vm-enabled no
# vm-enabled yes

# 這是交換檔案的路徑。估計你猜到了,交換檔案不能在多個Redis例項之間共享,所以確保每個Redis例項使用一個獨立交換檔案。
#
# 最好的儲存交換檔案(被隨機訪問)的介質是固態硬碟(SSD)。
#
# *** 警告 *** 如果你使用共享主機,那麼預設的交換檔案放到 /tmp 下是不安全的。
# 建立一個Redis使用者可寫的目錄,並配置Redis在這裡建立交換檔案。
vm-swap-file /tmp/redis.swap

# "vm-max-memory" 配置虛擬記憶體可用的最大記憶體容量。
# 如果交換檔案還有空間的話,所有超標部分都會放到交換檔案裡。
#
# "vm-max-memory" 設定為0表示系統會用掉所有可用記憶體。
# 這預設值不咋地,只是把你能用的記憶體全用掉了,留點餘量會更好。
# 例如,設定為剩餘記憶體的60%-80%。
vm-max-memory 0

# Redis交換檔案是分成多個數據頁的。
# 一個可儲存物件可以被儲存在多個連續頁裡,但是一個數據頁無法被多個物件共享。
# 所以,如果你的資料頁太大,那麼小物件就會浪費掉很多空間。
# 如果資料頁太小,那用於儲存的交換空間就會更少(假定你設定相同的資料頁數量)
#
# 如果你使用很多小物件,建議分頁尺寸為64或32個位元組。
# 如果你使用很多大物件,那就用大一些的尺寸。
# 如果不確定,那就用預設值 :)
vm-page-size 32

# 交換檔案裡資料頁總數。
# 根據記憶體中分頁表(已用/未用的資料頁分佈情況),磁碟上每8個數據頁會消耗記憶體裡1個位元組。
#
# 交換區容量 = vm-page-size * vm-pages
#
# 根據預設的32位元組的資料頁尺寸和134217728的資料頁數來算,Redis的資料頁檔案會佔4GB,而記憶體裡的分頁表會消耗16MB記憶體。
#
# 為你的應驗程式設定最小且夠用的數字比較好,下面這個預設值在大多數情況下都是偏大的。
vm-pages 134217728

# 同時可執行的虛擬記憶體I/O執行緒數。
# 這些執行緒可以完成從交換檔案進行資料讀寫的操作,也可以處理資料在記憶體與磁碟間的互動和編碼/解碼處理。
# 多一些執行緒可以一定程度上提高處理效率,雖然I/O操作本身依賴於物理裝置的限制,不會因為更多的執行緒而提高單次讀寫操作的效率。
#
# 特殊值0會關閉執行緒級I/O,並會開啟阻塞虛擬記憶體機制。
vm-max-threads 4

############################### 高階配置 ###############################

# 當有大量資料時,適合用雜湊編碼(需要更多的記憶體),元素數量上限不能超過給定限制。
# 你可以通過下面的選項來設定這些限制:
hash-max-zipmap-entries 512
hash-max-zipmap-value 64

# 與雜湊相類似,資料元素較少的情況下,可以用另一種方式來編碼從而節省大量空間。
# 這種方式只有在符合下面限制的時候才可以用:
list-max-ziplist-entries 512
list-max-ziplist-value 64

# 還有這樣一種特殊編碼的情況:資料全是64位無符號整型數字構成的字串。
# 下面這個配置項就是用來限制這種情況下使用這種編碼的最大上限的。
set-max-intset-entries 512

# 與第一、第二種情況相似,有序序列也可以用一種特別的編碼方式來處理,可節省大量空間。
# 這種編碼只適合長度和元素都符合下面限制的有序序列:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# 雜湊重新整理,每100個CPU毫秒會拿出1個毫秒來重新整理Redis的主雜湊表(頂級鍵值對映表)。
# redis所用的雜湊表實現(見dict.c)採用延遲雜湊重新整理機制:你對一個雜湊表操作越多,雜湊重新整理操作就越頻繁;
# 反之,如果伺服器非常不活躍那麼也就是用點記憶體儲存雜湊表而已。
# 
# 預設是每秒鐘進行10次雜湊表重新整理,用來重新整理字典,然後儘快釋放記憶體。
#
# 建議:
# 如果你對延遲比較在意的話就用 "activerehashing no",每個請求延遲2毫秒不太好嘛。
# 如果你不太在意延遲而希望儘快釋放記憶體的話就設定 "activerehashing yes"。
activerehashing yes

################################## 包含 ###################################

# 包含一個或多個其他配置檔案。
# 這在你有標準配置模板但是每個redis伺服器又需要個性設定的時候很有用。
# 包含檔案特性允許你引人其他配置檔案,所以好好利用吧。
#
# include /path/to/local.conf
# include /path/to/other.conf