posts - 495,comments - 227,trackbacks - 0
          昨天研究Redis,順便把配置文件翻譯了。這是我學(xué)習(xí)技術(shù)的一種方法。
          雖然還沒仔細(xì)校對和潤色,不過意思應(yīng)該大體不錯,特來分享。
          求拍磚,讓磚頭來得更猛烈些吧!湊夠磚頭就可以回老家蓋房子了!

          在線版地址: https://github.com/liuxd/MyTranslation/blob/master/translation/redis-2.4.conf

          # Redis示例配置文件

          # 注意單位問題:當(dāng)需要設(shè)置內(nèi)存大小的時候,可以使用類似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默認(rèn)是不作為守護進程來運行的。你可以把這個設(shè)置為"yes"讓它作為守護進程來運行。
          #
           注意,當(dāng)作為守護進程的時候,Redis會把進程ID寫到 /var/run/redis.pid
          daemonize no

          # 當(dāng)以守護進程方式運行的時候,Redis會把進程ID默認(rèn)寫到 /var/run/redis.pid。你可以在這里修改路徑。
          pidfile /var/run/redis.pid

          # 接受連接的特定端口,默認(rèn)是6379。
          #
           如果端口設(shè)置為0,Redis就不會監(jiān)聽TCP套接字。
          port 6379

          # 如果你想的話,你可以綁定單一接口;如果這里沒單獨設(shè)置,那么所有接口的連接都會被監(jiān)聽。
          #
          #
           bind 127.0.0.1

          # 指定用來監(jiān)聽連接的unxi套接字的路徑。這個沒有默認(rèn)值,所以如果你不指定的話,Redis就不會通過unix套接字來監(jiān)聽。
          #
          #
           unixsocket /tmp/redis.sock
          #
           unixsocketperm 755

          #一個客戶端空閑多少秒后關(guān)閉連接。(0代表禁用,永不關(guān)閉)
          timeout 0

          # 設(shè)置服務(wù)器調(diào)試等級。
          #
           可能值:
          #
           debug (很多信息,對開發(fā)/測試有用)
          #
           verbose (很多精簡的有用信息,但是不像debug等級那么多)
          #
           notice (適量的信息,基本上是你生產(chǎn)環(huán)境中需要的程度)
          #
           warning (只有很重要/嚴(yán)重的信息會記錄下來)
          loglevel verbose

          # 指明日志文件名。也可以使用"stdout"來強制讓Redis把日志信息寫到標(biāo)準(zhǔn)輸出上。
          #
           注意:如果Redis以守護進程方式運行,而你設(shè)置日志顯示到標(biāo)準(zhǔn)輸出的話,那么日志會發(fā)送到 /dev/null
          logfile stdout

          # 要使用系統(tǒng)日志記錄器很簡單,只要設(shè)置 "syslog-enabled" 為 "yes" 就可以了。
          #
           然后根據(jù)需要設(shè)置其他一些syslog參數(shù)就可以了。
          #
           syslog-enabled no

          # 指明syslog身份
          #
           syslog-ident redis

          # 指明syslog的設(shè)備。必須是一個用戶或者是 LOCAL0 ~ LOCAL7 之一。
          #
           syslog-facility local0

          # 設(shè)置數(shù)據(jù)庫個數(shù)。默認(rèn)數(shù)據(jù)庫是 DB 0,你可以通過SELECT <dbid> WHERE dbid(0~'databases' - 1)來為每個連接使用不同的數(shù)據(jù)庫。
          databases 16

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

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

          save 
          900 1
          save 
          300 10
          save 
          60 10000

          # 當(dāng)導(dǎo)出到 .rdb 數(shù)據(jù)庫時是否用LZF壓縮字符串對象。
          #
           默認(rèn)設(shè)置為 "yes",所以幾乎總是生效的。
          #
           如果你想節(jié)省CPU的話你可以把這個設(shè)置為 "no",但是如果你有可壓縮的key的話,那數(shù)據(jù)文件就會更大了。
          rdbcompression yes

          # 數(shù)據(jù)庫的文件名
          dbfilename dump.rdb

          # 工作目錄
          #
          #
           數(shù)據(jù)庫會寫到這個目錄下,文件名就是上面的 "dbfilename" 的值。
          #
           
          #
           累加文件也放這里。
          #
           
          #
           注意你這里指定的必須是目錄,不是文件名。
          dir ./

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

          #
          #
           主從同步。通過 slaveof 配置來實現(xiàn)Redis實例的備份。
          #
           注意,這里是本地從遠(yuǎn)端復(fù)制數(shù)據(jù)。也就是說,本地可以有不同的數(shù)據(jù)庫文件、綁定不同的IP、監(jiān)聽不同的端口。
          #
          #
           slaveof <masterip> <masterport>

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

          # 當(dāng)一個slave失去和master的連接,或者同步正在進行中,slave的行為有兩種可能:
          #
          #
           1) 如果 slave-serve-stale-data 設(shè)置為 "yes" (默認(rèn)值),slave會繼續(xù)響應(yīng)客戶端請求,可能是正常數(shù)據(jù),也可能是還沒獲得值的空數(shù)據(jù)。
          #
           2) 如果 slave-serve-stale-data 設(shè)置為 "no",slave會回復(fù)"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。
          #
          slave-serve-stale-data yes

          # slave根據(jù)指定的時間間隔向服務(wù)器發(fā)送ping請求。
          #
           時間間隔可以通過 repl_ping_slave_period 來設(shè)置。
          #
           默認(rèn)10秒。
          #
          #
           repl-ping-slave-period 10

          # 下面的選項設(shè)置了大塊數(shù)據(jù)I/O、向master請求數(shù)據(jù)和ping響應(yīng)的過期時間。
          #
           默認(rèn)值60秒。
          #
          #
           一個很重要的事情是:確保這個值比 repl-ping-slave-period 大,否則master和slave之間的傳輸過期時間比預(yù)想的要短。
          #
          #
           repl-timeout 60

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

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

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

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

          #
          #
           設(shè)置最多同時連接客戶端數(shù)量。
          #
           默認(rèn)沒有限制,這個關(guān)系到Redis進程能夠打開的文件描述符數(shù)量。
          #
           特殊值"0"表示沒有限制。
          #
           一旦達到這個限制,Redis會關(guān)閉所有新連接并發(fā)送錯誤"達到最大用戶數(shù)上限(max number of clients reached)"
          #
          #
           maxclients 128

          # 不要用比設(shè)置的上限更多的內(nèi)存。一旦內(nèi)存使用達到上限,Redis會根據(jù)選定的回收策略(參見:maxmemmory-policy)刪除key。
          #
          #
           如果因為刪除策略問題Redis無法刪除key,或者策略設(shè)置為 "noeviction",Redis會回復(fù)需要更多內(nèi)存的錯誤信息給命令。
          #
           例如,SET,LPUSH等等。但是會繼續(xù)合理響應(yīng)只讀命令,比如:GET。
          #
          #
           在使用Redis作為LRU緩存,或者為實例設(shè)置了硬性內(nèi)存限制的時候(使用 "noeviction" 策略)的時候,這個選項還是滿有用的。
          #
          #
           警告:當(dāng)一堆slave連上達到內(nèi)存上限的實例的時候,響應(yīng)slave需要的輸出緩存所需內(nèi)存不計算在使用內(nèi)存當(dāng)中。
          #
           這樣當(dāng)請求一個刪除掉的key的時候就不會觸發(fā)網(wǎng)絡(luò)問題/重新同步的事件,然后slave就會收到一堆刪除指令,直到數(shù)據(jù)庫空了為止。
          #
          #
           簡而言之,如果你有slave連上一個master的話,那建議你把master內(nèi)存限制設(shè)小點兒,確保有足夠的系統(tǒng)內(nèi)存用作輸出緩存。
          #
           (如果策略設(shè)置為"noeviction"的話就不無所謂了)
          #
          #
           maxmemory <bytes>

          # 內(nèi)存策略:如果達到內(nèi)存限制了,Redis如何刪除key。你可以在下面五個策略里面選:
          #
           
          #
           volatile-lru -> 根據(jù)LRU算法生成的過期時間來刪除。
          #
           allkeys-lru -> 根據(jù)LRU算法刪除任何key。
          #
           volatile-random -> 根據(jù)過期設(shè)置來隨機刪除key。
          #
           allkeys->random -> 無差別隨機刪。
          #
           volatile-ttl -> 根據(jù)最近過期時間來刪除(輔以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
          #
          #
           默認(rèn)值如下:
          #
          #
           maxmemory-policy volatile-lru

          # LRU和最小TTL算法的實現(xiàn)都不是很精確,但是很接近(為了省內(nèi)存),所以你可以用樣例做測試。
          #
           例如:默認(rèn)Redis會檢查三個key然后取最舊的那個,你可以通過下面的配置項來設(shè)置樣本的個數(shù)。
          #
          #
           maxmemory-samples 3

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

          # 默認(rèn)情況下,Redis是異步的把數(shù)據(jù)導(dǎo)出到磁盤上。這種情況下,當(dāng)Redis掛掉的時候,最新的數(shù)據(jù)就丟了。
          #
           如果不希望丟掉任何一條數(shù)據(jù)的話就該用純累加模式:一旦開啟這個模式,Redis會把每次寫入的數(shù)據(jù)在接收后都寫入 appendonly.aof 文件。
          #
           每次啟動時Redis都會把這個文件的數(shù)據(jù)讀入內(nèi)存里。
          #
          #
           注意,異步導(dǎo)出的數(shù)據(jù)庫文件和純累加文件可以并存(你得把上面所有"save"設(shè)置都注釋掉,關(guān)掉導(dǎo)出機制)。
          #
           如果純累加模式開啟了,那么Redis會在啟動時載入日志文件而忽略導(dǎo)出的 dump.rdb 文件。
          #
          #
           重要:查看 BGREWRITEAOF 來了解當(dāng)累加日志文件太大了之后,怎么在后臺重新處理這個日志文件。

          appendonly no

          # 純累加文件名字(默認(rèn):"appendonly.aof")
          #
           appendfilename appendonly.aof

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

          # appendfsync always
          appendfsync everysec
          # appendfsync no

          # 如果AOF的同步策略設(shè)置成 "always" 或者 "everysec",那么后臺的存儲進程(后臺存儲或?qū)懭階OF日志)會產(chǎn)生很多磁盤I/O開銷。
          #
           某些Linux的配置下會使Redis因為 fsync() 而阻塞很久。
          #
           注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們的 write(2) 請求。
          #
          #
           為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止 fsync()。
          #
           
          #
           這就意味著如果有子進程在進行保存操作,那么Redis就處于"不可同步"的狀態(tài)。
          #
           這實際上是說,在最差的情況下可能會丟掉30秒鐘的日志數(shù)據(jù)。(默認(rèn)Linux設(shè)定)
          #
           
          #
           如果你有延遲的問題那就把這個設(shè)為 "yes",否則就保持 "no",這是保存持久數(shù)據(jù)的最安全的方式。
          no-appendfsync-on-rewrite no

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

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

          ################################## 慢查詢?nèi)罩?nbsp;###################################

          # Redis慢查詢?nèi)罩究梢杂涗洺^指定時間的查詢。運行時間不包括各種I/O時間。
          #
           例如:連接客戶端,發(fā)送響應(yīng)數(shù)據(jù)等。只計算命令運行的實際時間(這是唯一一種命令運行線程阻塞而無法同時為其他請求服務(wù)的場景)
          #
           
          #
           你可以為慢查詢?nèi)罩九渲脙蓚€參數(shù):一個是超標(biāo)時間,單位為微妙,記錄超過個時間的命令。
          #
           另一個是慢查詢?nèi)罩鹃L度。當(dāng)一個新的命令被寫進日志的時候,最老的那個記錄會被刪掉。
          #
          #
           下面的時間單位是微秒,所以1000000就是1秒。注意,負(fù)數(shù)時間會禁用慢查詢?nèi)罩荆?則會強制記錄所有命令。
          slowlog-log-slower-than 10000

          # 這個長度沒有限制。只要有足夠的內(nèi)存就行。你可以通過 SLOWLOG RESET 來釋放內(nèi)存。(譯者注:日志居然是在內(nèi)存里的Orz)
          slowlog-max-len 128

          ################################ 虛擬內(nèi)存 ###############################

          ### 警告!虛擬內(nèi)存在Redis 2.4是反對的。
          #
          ## 非常不鼓勵使用虛擬內(nèi)存!!

          # 虛擬內(nèi)存可以使Redis在內(nèi)存不夠的情況下仍然可以將所有數(shù)據(jù)序列保存在內(nèi)存里。
          #
           為了做到這一點,高頻key會調(diào)到內(nèi)存里,而低頻key會轉(zhuǎn)到交換文件里,就像操作系統(tǒng)使用內(nèi)存頁一樣。
          #
          #
           要使用虛擬內(nèi)存,只要把 "vm-enabled" 設(shè)置為 "yes",并根據(jù)需要設(shè)置下面三個虛擬內(nèi)存參數(shù)就可以了。

          vm
          -enabled no
          # vm-enabled yes

          # 這是交換文件的路徑。估計你猜到了,交換文件不能在多個Redis實例之間共享,所以確保每個Redis實例使用一個獨立交換文件。
          #
          #
           最好的保存交換文件(被隨機訪問)的介質(zhì)是固態(tài)硬盤(SSD)。
          #
          #
           *** 警告 *** 如果你使用共享主機,那么默認(rèn)的交換文件放到 /tmp 下是不安全的。
          #
           創(chuàng)建一個Redis用戶可寫的目錄,并配置Redis在這里創(chuàng)建交換文件。
          vm-swap-file /tmp/redis.swap

          # "vm-max-memory" 配置虛擬內(nèi)存可用的最大內(nèi)存容量。
          #
           如果交換文件還有空間的話,所有超標(biāo)部分都會放到交換文件里。
          #
          #
           "vm-max-memory" 設(shè)置為0表示系統(tǒng)會用掉所有可用內(nèi)存。
          #
           這默認(rèn)值不咋地,只是把你能用的內(nèi)存全用掉了,留點余量會更好。
          #
           例如,設(shè)置為剩余內(nèi)存的60%-80%。
          vm-max-memory 0

          # Redis交換文件是分成多個數(shù)據(jù)頁的。
          #
           一個可存儲對象可以被保存在多個連續(xù)頁里,但是一個數(shù)據(jù)頁無法被多個對象共享。
          #
           所以,如果你的數(shù)據(jù)頁太大,那么小對象就會浪費掉很多空間。
          #
           如果數(shù)據(jù)頁太小,那用于存儲的交換空間就會更少(假定你設(shè)置相同的數(shù)據(jù)頁數(shù)量)
          #
          #
           如果你使用很多小對象,建議分頁尺寸為64或32個字節(jié)。
          #
           如果你使用很多大對象,那就用大一些的尺寸。
          #
           如果不確定,那就用默認(rèn)值 :)
          vm-page-size 32

          # 交換文件里數(shù)據(jù)頁總數(shù)。
          #
           根據(jù)內(nèi)存中分頁表(已用/未用的數(shù)據(jù)頁分布情況),磁盤上每8個數(shù)據(jù)頁會消耗內(nèi)存里1個字節(jié)。
          #
          #
           交換區(qū)容量 = vm-page-size * vm-pages
          #
          #
           根據(jù)默認(rèn)的32字節(jié)的數(shù)據(jù)頁尺寸和134217728的數(shù)據(jù)頁數(shù)來算,Redis的數(shù)據(jù)頁文件會占4GB,而內(nèi)存里的分頁表會消耗16MB內(nèi)存。
          #
          #
           為你的應(yīng)驗程序設(shè)置最小且夠用的數(shù)字比較好,下面這個默認(rèn)值在大多數(shù)情況下都是偏大的。
          vm-pages 134217728

          # 同時可運行的虛擬內(nèi)存I/O線程數(shù)。
          #
           這些線程可以完成從交換文件進行數(shù)據(jù)讀寫的操作,也可以處理數(shù)據(jù)在內(nèi)存與磁盤間的交互和編碼/解碼處理。
          #
           多一些線程可以一定程度上提高處理效率,雖然I/O操作本身依賴于物理設(shè)備的限制,不會因為更多的線程而提高單次讀寫操作的效率。
          #
          #
           特殊值0會關(guān)閉線程級I/O,并會開啟阻塞虛擬內(nèi)存機制。
          vm-max-threads 4

          ############################### 高級配置 ###############################

          # 當(dāng)有大量數(shù)據(jù)時,適合用哈希編碼(需要更多的內(nèi)存),元素數(shù)量上限不能超過給定限制。
          #
           你可以通過下面的選項來設(shè)定這些限制:
          hash-max-zipmap-entries 512
          hash
          -max-zipmap-value 64

          # 與哈希相類似,數(shù)據(jù)元素較少的情況下,可以用另一種方式來編碼從而節(jié)省大量空間。
          #
           這種方式只有在符合下面限制的時候才可以用:
          list-max-ziplist-entries 512
          list
          -max-ziplist-value 64

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

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

          # 哈希刷新,每100個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表)。
          #
           redis所用的哈希表實現(xiàn)(見dict.c)采用延遲哈希刷新機制:你對一個哈希表操作越多,哈希刷新操作就越頻繁;
          #
           反之,如果服務(wù)器非常不活躍那么也就是用點內(nèi)存保存哈希表而已。
          #
           
          #
           默認(rèn)是每秒鐘進行10次哈希表刷新,用來刷新字典,然后盡快釋放內(nèi)存。
          #
          #
           建議:
          #
           如果你對延遲比較在意的話就用 "activerehashing no",每個請求延遲2毫秒不太好嘛。
          #
           如果你不太在意延遲而希望盡快釋放內(nèi)存的話就設(shè)置 "activerehashing yes"。
          activerehashing yes

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

          # 包含一個或多個其他配置文件。
          #
           這在你有標(biāo)準(zhǔn)配置模板但是每個redis服務(wù)器又需要個性設(shè)置的時候很有用。
          #
           包含文件特性允許你引人其他配置文件,所以好好利用吧。
          #
          #
           include /path/to/local.conf
          #
           include /path/to/other.conf
          posted on 2012-06-05 18:40 SIMONE 閱讀(5848) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 凉山| 龙里县| 淄博市| 莲花县| 高州市| 凤山市| 金湖县| 吴堡县| 涿州市| 乌拉特前旗| 明星| 宣化县| 二连浩特市| 德格县| 威远县| 邵阳县| 松江区| 油尖旺区| 明溪县| 延庆县| 潼关县| 德安县| 陕西省| 大安市| 沐川县| 大港区| 安乡县| 扎兰屯市| 博罗县| 广河县| 林口县| 贵溪市| 泸西县| 桦南县| 庆元县| 咸丰县| 永顺县| 济宁市| 新建县| 黑山县| 河北区|