redis.conf 配置 詳解 中文 2.8


 
 
# redis version 2.8.19
 
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
 
# 只用最新的,所以可以放到最后。
# include /path/to/local.conf
# include /path/to/other.conf
 
################################  通用 #####################################
 
# 是否后台執行
daemonize yes
 
# 后台執行的pid文件
# pidfile /var/run/redis.pid
 
# 0的話,不接受TCP連接
port 6379
 
# TCP listen() backlog. 雖然listen有兩個參數int listen(int s, int backlog); 但是第二個參數會被/proc/sys/net/core/somaxconn覆蓋。比如nginx設置的是511,但是也會被這個覆蓋成默認的128,
# 所以要/etc/sysctl.conf中添加net.core.somaxconn = 2048 然后 sysctl -p ,就是說,如果軟件設置大於linux配置,就是linux配置,軟件設置小於linux,就用軟件的,就是用最小的那個。
tcp-backlog 511
 
# 綁定IP請求來源
# bind 192.168.1.100 10.0.0.1
 
# 在空閑多少秒后關閉鏈接(0是禁用此功能)
timeout 0
 
# TCP keepalive
# Linux內核里,下邊的值以秒記,相當於tcp_keepalive_time,要用兩倍的這個時間才能殺死(畫外音,也就是probes*intvl=如下的值了,詳見EverNote搜索“linux 在線服務器優化配置”)
# 設成60比較好
tcp-keepalive 0
 
# 日志記錄等級debug》verbose》notice(生產環境)》warning
loglevel notice
 
# 日志名。空字符串意味着輸出到 標准輸出。后台運行的redis標准輸出是/dev/null。(畫外音,所以要設置個文件名)
logfile ""
 
# 是否把log記到系統日志里。標示是什么?
# syslog-enabled no
# syslog-ident redis
 
#設置db的數量,默認db是0,你可以用SELECT <dbid> dbid在0到下邊的值-1;
databases 16
 
################################ 快照 ################################
 
# 保存時間間隔,更新數量。如果1個key更新了,15min保存一次。10個key更新了,5分鍾保存一次,10000個key更新了,每1分鍾保存一次。主動調用SAVE()會阻塞所有客戶端!一般是BGSAVE異步的。
save 900 1
save 300 10
save 60 10000
 
# 如果最后一次的后台保存RDB snapshot出錯,redis就會拒絕所有 請求。這樣也相當於一個報警吧。等后台保存繼續工作后,redis就允許寫了。
# 如果你自己配置好了redis的持久化進程的監控,你可以關閉下邊:
stop-writes-on-bgsave-error yes
 
# 是否壓縮dump后的   .rdb 數據庫?默認壓縮。會省硬盤,但耗CPU。
rdbcompression no
 
# 是否校驗rdb快照?CRC64校驗值會放在文件尾部。會導致10%性能下降。關閉后,校驗值用0填充
rdbchecksum yes
 
# DB名稱
dbfilename dump.rdb
 
# 工作目錄
# DB會寫入這個目錄,以上邊的名字。“僅追加文件”也會存在這個目錄。注意:這里必須是目錄名,不能是文件名!
dir ./

################################# 復制集 #################################
 
# 主從復制。用slaveof去復制另一份redis。
# 1)redis復制是異步的。但你可以讓主redis拒絕寫請求,當少於某個個數的從redis在線。
# 2)如果復制進程暫停了一小會兒,slave可以進行重新進行部分同步,你可以設置一下復制backlog大小
# 3)是自動的,無需干預。
 
# slaveof <masterip> <masterport>
 
# 如果主機需要鑒權,則需要配置密碼
# masterauth <master-password>
 
# 當slave和master斷了,會有兩種情況:
# 1)默認:slave-serve-stale-data yes 這時,slave接受請求並返回老數據
# 2)如果是no了,則對任何命令都返回SYNC with master in progress,INFO和SLAVEOF命令除外!
slave-serve-stale-data yes
 
# 2.6之后,redis默認slave都是read-only的,但是slave默認可以執行所有管理員命令。CONFIG,DEBUG等。你可以用rename-command去重命名危險的命令,隱藏他們。
slave-read-only yes
 
# 復制集同步策略:磁盤或者socket
# 新slave連接或者老slave重新連接時候不能只接收不同,得做一個全同步。需要一個新的RDB文件dump出來,然后從master傳到slave。可以有兩種情況:
# 1)基於硬盤(disk-backed):master創建一個新進程dump RDB,完事兒之后由父進程(即主進程)增量傳給slaves。
# 2)基於socket(diskless):master創建一個新進程直接dump RDB到slave的socket,不經過主進程,不經過硬盤。
# 基於硬盤的話,RDB文件創建后,一旦創建完畢,可以同時服務更多的slave。基於socket的話, 新slave來了后,得排隊(如果超出了repl-diskless-sync-delay還沒來),完事兒一個再進行下一個。
# 當用diskless的時候,master等待一個repl-diskless-sync-delay的秒數,如果沒slave來的話,就直接傳,后來的得排隊等了。否則就可以一起傳。
# disk較慢,並且網絡較快的時候,可以用diskless。(默認用disk-based)
repl-diskless-sync no
# 設置成0的話,傳輸開始ASAP
repl-diskless-sync-delay 5
 
# Slave發送ping給master。默認10s
# repl-ping-slave-period 10
 
# 超時時間,包括從master看slave,從slave看master,要大於上邊的repl-ping-slave-period
# repl-timeout 60
 
# SYNC完畢后,在slave的socket里關閉TCP_NODELAY。
# 如果是yes,reids發送少量的TCP包給slave,但可能導致最高40ms的數據延遲。
# 如果是no,那可能在復制的時候,會消耗 少量帶寬。
# 默認我們是為了低延遲優化而設置成no,如果主從之間有很多網絡跳躍。那設置成yes吧。
repl-disable-tcp-nodelay no
 
# 復制集后台backlog大小
# 越大,slave可以丟失的時間就越長。
# repl-backlog-size 1mb
 
# 多久釋放backlog,當確認master不再需要slave的時候,多久釋放。0是永遠不釋放。
# repl-backlog-ttl 3600
 
# 當master不可用,Sentinel會根據slave的優先級選舉一個master。最 的優先級的slave,當選master。而配置 成0,永遠不會被選舉。(必須≥0)。默認是100
slave-priority 100
 
# slave小於幾個,網絡lag大於幾秒的時候,master停止接受write請求。默認對slave數目無限制,給0。網絡延遲給10s
# min-slaves-to-write 3
min-slaves-max-lag 10
 
################################## 安全 ###################################
# 多數情況下無需密碼鑒別slave。同時,由於redis處理速度太快,所以 爆破速率可達150K/S。10萬/S。所以如果你要設置密碼,必須設置超強的密碼。
# requirepass foobared <--這就是密碼
 
# 命令重命名
# 在一個shared環境里,可以對危險的命令,比如CONFIG,進行重命名:也可以用空字符串,達到完全屏蔽此命令的目的。
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# rename-command CONFIG ""
# 記錄進AOF或者傳給slave的重命名操作可能會引發問題哦~。
 
################################### 限制 ####################################
# 設置最大client連接數。默認10000一萬個。如果redis沒法控制最大文件數。則給到最低32.
# maxclients 10000
 
# 如果redis用內存超過了設置的限制,第一,開始用maxmemory-policy配置的策略往外刪數據,如果配置成了noeviction。所有write都會拒絕,比如set,lpush等。所有讀請求可以接受。
# 主要用在把redis用在LRU緩存,或者用在一個內存吃緊又不能刪除的策略上。
# 如果你有slave,你應該把最大內存別設置的太大,留一些系統內存給slave output buffers(如果是noeviction策略,就無需這樣設置了)
# maxmemory <bytes>
 
# 內存策略。
# volatile-lru ->用LRU刪除設置了ttl的key
# allkeys-lru ->用LRU刪除任何key
# volatile-random ->隨機刪除有ttl的key
# allkeys-random ->隨機刪除任何key
# volatile-ttl ->刪除即將ttl到期的key
# noeviction ->不刪,有write的時候報錯。
# 如下操作會返回錯誤
#       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每次取3個key然后取最符合刪除策略的刪除。你可以配置這個數。越低,刪除的東西就會越多。比如設置100個,就能刪百分之一。
# maxmemory-samples 3
 
############################## AOF ###############################
# 默認redis異步的dump數據到disk。但如果斷電了,那么就會丟失一部分數據了(根據save的配置)。
# AOF提供更好模式。比如用默認的AOF,redis只丟失最近一秒的數據(斷電情況),或者最后一個write操作(redis自身錯誤,os正常)。每個write操作寫一次AOF。
# 當AOF文件太大了,redis會自動重寫一個aof文件出來。
# AOF和RDB持久化可以同時啟用。redis會優先讀AOF恢復數據。
# Please check http://redis.io/topics/persistence for more information
appendonly no
 
# 默認文件名
appendfilename "appendonly.aof"
 
# fsync()三種:
# no:讓OS托管,這樣更快。
# always:每次write都刷到log,慢,最安全。
# everysec:每秒一次flush。(默認)
# appendfsync always
appendfsync everysec
# appendfsync no
 
# 當fsync為always或者everysec,當一個bgsave或者AOF rewrite線程正在耗費大量I/0,redis可能會在fsync上阻塞很久。發生之后就無法fix,即使是另一個線程跑fsync,也會阻塞我們同步的write方法。
# 如下方法可以解決這個問題:當bgsave()或bgrewriteaof()在跑,主進程的fsync()就無法調用。也就是當子進程在save,那段時光相當於redis是appendaof no的。也就是有可能會丟失最多30s的log。
# 所以如果你有lag問題,把下邊改成yes,否則就用no。yes意思是暫停aof,拒絕主進程的這次fsync。no是redis是排隊的,不會被prevent了,但主進程是阻塞的。
no-appendfsync-on-rewrite no
 
# 自動重寫AOF
# 當AOF文件大小到一定比例,就自動隱式調用BGREWRITEAOF
# 過程:redis記住最后一次 rewrite時aof文件大小(重啟后沒rewrite的話,就是啟動時AOF文件的大小),如果現在AOF大小和上次的比例達到特定值就重寫。也要指定最小AOF大小,防止到2倍:1M的時候也重寫。
# 把percentage改成0,就是禁用重寫。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
 
# AOF文件可能在尾部是不完整的(上次system關閉有問題,尤其是mount ext4文件系統時沒有加上data=ordered選項。只會發生在os死時,redis自己死不會不完整)。那redis重啟時load進內存的時候就有問題了。
# 發生的時候,可以選擇redis啟動報錯,或者load盡量多正常的數據。
# 如果aof-load-truncated是yes,會自動發布一個log給客戶端然后load(默認)。如果是no,用戶必須手動redis-check-aof修復AOF文件才可以。
aof-load-truncated yes
 
 
################################ LUA SCRIPTING  ###############################
# 如果達到最大時間限制(毫秒),redis會記個log,然后返回error。
# 當一個腳本超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。
# 設置成0或者負值,時限就無限。
lua-time-limit 5000
 
################################## SLOW LOG ###################################
# 線程阻塞不能服務其他請求的時間長度。兩個參數:第一個是時長(以微秒為單位!,是毫秒的千分之一。)。第二個是log的size,超過了,就會刪除之前的log。
# 1000000是一秒。 負值是所有請求都記log!下邊是0.10S。100毫秒。
slowlog-log-slower-than 10000
 
# log長度的設置值是沒限制。但是需要內存。
slowlog-max-len 128
 
################################ LATENCY MONITOR ##############################
# 用LATENCY打印redis實例在跑命令時的耗時圖表。
# 只記錄大於等於下邊設置的值的操作。0的話,就是關閉監視。可以動態開啟。直接運行CONFIG SET latency-monitor-threshold <milliseconds>
latency-monitor-threshold 0
 
############################# Event notification ##############################
# 可以通知pub/sub客戶端關於key空間的變化。http://redis.io/topics/notifications
# 比如如果開着開關。一個client進行了DEL操作在“foo”key上在database0上。兩個消息將會發布通過 pub/sub
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
# 大部分人不需要這個功能,並且還需要一定開銷,所以默認關閉。
notify-keyspace-events ""
 
############################### ADVANCED CONFIG ###############################
# hash結構存儲,小數據量的用數組,大數據量用map(encoding保存結構信息)
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
 
# list同上。
list-max-ziplist-entries 512
list-max-ziplist-value 64
 
# Set在一種情況下會用特殊encoding:整個set是string組成,但是突然需要變成64位帶符號整數且是10為根。。不懂。
set-max-intset-entries 512
 
# zset同set
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
 
# HyperLogLog 不懂。大於16000完全不可接受!當CPU很頂得住的話,給10000可以。默認給3000.
hll-sparse-max-bytes 3000
 
# Active rehashing 越多次的操作進入了正在進行rehash的table,越多的rehash步驟需要執行。如果redis是空閑的,那么rehash操作是永遠沒法停止的,越多的內存也被消耗了。
# 默認就用yes就行 了如果你想釋放內存ASAP。
activerehashing yes
 
# client output buffer限制,可以用來強制關閉傳輸緩慢的客戶端(比如redis pub的東西有比較慢的client無法及時sub)
# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
# class可以為以下:
#
# normal -> normal clients including MONITOR clients
# slave  -> slave clients
# pubsub -> clients subscribed to at least one pubsub channel or pattern
# 當hard限制到了會立即被關閉客戶端。如果soft限制到了,會等soft秒。
# 比如硬限制是32m,soft是16m,10secs。到32m就立即斷,或者在16m以上停止了10secs。
# 設置成0就是關閉。
client-output-buffer-limit normal 0 0 0 
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
 
# redis內部調度(進行關閉timeout的客戶端,刪除過期key等等)頻率,越大則調度頻率越高。設置成100以上會對CPU造成大壓力除非你對線上實時性要求很高。可以在1~500之間。
hz 10
 
# 當child進程在rewrite AOF文件,如果這個選項是yes,那么這個file每32MB會寫fsync()。這個是保證增量寫硬盤而防止寫硬盤時I/O突增。
aof-rewrite-incremental-fsync yes
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM