redis配置文件詳解

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



來自於http://www.4byte.cn/learning/37582.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章