昨天研究Redis,順便把配置文件翻譯了。這是我學習技術的一種方法。 雖然還沒仔細校對和潤色,不過意思應該大致不錯,特來分享。 求拍磚,讓磚頭來得更猛烈些吧!湊夠磚頭就能夠回老家蓋房子了! 在線版地址: https://github.com/liuxd/MyTranslation/blob/master/translation/redis-2.4.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 # 與第1、第二種狀況類似,有序序列也能夠用一種特別的編碼方式來處理,可節省大量空間。 # 這種編碼只適合長度和元素都符合下面限制的有序序列: 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