Linux下redis配置參數說明

redis定義

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。 [1] 

Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹複製。存盤可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。

redis的官網地址,非常好記,是redis.io。(域名後綴io屬於國家域名,是british Indian Ocean territory,即英屬印度洋領地)

Linux下安裝

]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz
]# tar xzf redis-2.8.17.tar.gz
]# cd redis-2.8.17
]# make

啓動redis服務

]# cd src
]# ./redis-server

上面這種啓動 redis使用的是默認配置,也可以通過啓動參數告訴redis使用指定配置

]# ./redis-server ../redis.conf  #後面是新配置文件的地址

啓動正常的頁面如下 :

 

redis配置參數說明

屬性

說明

daemonize

如果值是“yes”,則啓動服務的時候是後臺守護進程形式,如果值是“no”,則相反

pidfile

指定存儲Redis進程號的文件路徑

port

指定當前Redis服務的端口,默認爲6379 

bind 127.0.0.1 綁定的主機地址

tcp-backlog

此參數確定了TCP連接中已完成隊列(完成三次握手之後)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統併發量大並且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。

timeout

客戶端和Redis服務端的連接超時時間,默認是0,表示永不超時。

tcp-keepalive

如果值非0,單位是秒,表示將週期性的使用SO_KEEPALIVE檢測客戶端是否還處於健康狀態,避免服務器一直阻塞,官方給出的建議值是60S。

loglevel

Redis總共支持四個級別:debug、verbose、notice、warning。

Debug:記錄很多信息,用於開發和測試;

Varbose:有用的信息,不像debug會記錄那麼多;

Notice:普通的verbose,常用於生產環境;

Warning:只有非常重要或者嚴重的信息會記錄到日誌;

默認是notice級別。

logfile

日誌的存儲路徑

databases

可用的數據庫數,默認值爲16,默認數據庫爲0,數據庫範圍在0-(database-1)之間,個人覺得DB的概念類似於命名空間

save

指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

保存數據庫快照信息到磁盤,其對應的值有兩個,比如save 300 10表示:300秒內至少有300個key被改變時,觸發保存信息到磁盤的事件。

Redis默認配置文件中提供了三個條件:
    save 900 1
    save 300 10
    save 60 10000
    分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。

 

stop-writes-on-bgsave-error

當持久化出現錯誤之後,是否繼續提供寫服務

rdbcompression

持久化到RDB文件時,是否壓縮,“yes”爲壓縮,“no”則反之

rdbchecksum

讀取和寫入的時候是否支持CRC64校驗,默認是開啓的

dbfilename

鏡像文件的名字

dir

指定本地數據庫存放目錄

當前工作目錄,配置文件和鏡像文件等都在此目錄下

masterauth

設置訪問master服務器的密碼

slaveof <masterip> <masterport>
設置當本機爲slav服務時,設置master服務的IP地址及端口,在Redis啓動時,它會自動從master進行數據同步

slave-serve-stale-data

當slave服務器和master服務器失去連接後,或者當數據正在複製傳輸的時候,如果此參數值設置“yes”,slave服務器可以繼續接受客戶端的請求,否則,會返回給請求的客戶端如下信息“SYNC with master in progress”

requirepass foobared
設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關閉
maxclients 128
設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數爲Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息

slave-read-only

是否允許slave服務器節點只提供讀服務

repl-disable-tcp-nodelay

指定向slave同步數據時,是否禁用socket的NO_DELAY選 項。若配置爲“yes”,則禁用NO_DELAY,則TCP協議棧會合並小包統一發送,這樣可以減少主從節點間的包數量並節省帶寬,但會增加數據同步到 slave的時間。若配置爲“no”,表明啓用NO_DELAY,則TCP協議棧不會延遲小包的發送時機,這樣數據同步的延時會減少,但需要更大的帶寬。 通常情況下,應該配置爲no以降低同步延時,但在主從節點間網絡負載已經很高的情況下,可以配置爲yes。

slave-priority

指定slave的優先級。在不只1個slave存在的部署環境下,當master宕機時,Redis Sentinel會將priority值最小的slave提升爲master。需要注意的是,若該配置項爲0,則對應的slave永遠不會自動提升爲master。

appendonly

開啓append only 模式之後,redis 會把所接收到的每一次寫操作請求都追加到appendonly.aof 文件中,當redis 重新啓動時,會從該文件恢復出之前的狀態。但是這樣會造成appendonly.aof 文件過大,所以redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行重新整理。默認是不開啓的。

appendfilename

默認爲appendonly.aof。

appendfsync

設置aof的同步頻率,有三種選擇always、everysec、no,默認是everysec表示每秒同步一次。

no-appendfsync-on-rewrite

指定是否在後臺aof文件rewrite期間調用fsync,默認爲no,表示要調用fsync(無論後臺是否有子進程在刷盤)。Redis在後臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時,在某些linux系統中,調用fsync可能會阻塞。

auto-aof-rewrite-percentage

指定Redis重寫aof文件的條件,默認爲100,表示與上次rewrite的aof文件大小相比,當前aof文件增長量超過上次afo文件大小的100%時,就會觸發background rewrite。若配置爲0,則會禁用自動rewrite

auto-aof-rewrite-min-size

指定觸發rewrite的aof文件大小。若aof文件小於該值,即使當前文件的增量比例達到auto-aof-rewrite-percentage的配置值,也不會觸發自動rewrite。即這兩個配置項同時滿足時,纔會觸發rewrite。

lua-time-limit

一個Lua腳本最長的執行時間,單位爲毫秒,如果爲0或負數表示無限執行時間,默認爲5000

notify-keyspace-events

見參考3,按鍵通知事件

aof-rewrite-incremental-fsync

aof rewrite過程中,是否採取增量文件同步策略,默認爲“yes”。 rewrite過程中,每32M數據進行一次文件同步,這樣可以減少aof大文件寫入對磁盤的操作次數

其他配置參數:

redis3.2版本後新增protected-mode配置,默認是yes,即開啓。設置外部網絡連接redis服務,設置方式如下:

1、關閉protected-mode模式,此時外部網絡可以直接訪問

2、開啓protected-mode保護模式,需配置bind ip或者設置訪問密碼

 

如果redis配置了maxmemory和maxmemory-policy策略,則當redis內存數據達到maxmemory時,會根據maxmemory-policy配置來淘汰內存數據,以避免OOM。
redis提供了以下6種淘汰策略:
1,noeviction:不執行任何淘汰策略,當達到內存限制的時候客戶端執行命令會報錯。
2,allkeys-lru:從所有數據範圍內查找到最近最少使用的數據進行淘汰,直到有足夠的內存來存放新數據。
3,volatile-lru:從所有的最近最少訪問數據範圍內查找設置到過期時間的數據進行淘汰,如果查找不到數據,則回退到noeviction。
4,allkeys-random:從所有數據範圍內隨機選擇key進行刪除。
5,volatile-random:從設置了過期時間的數據範圍內隨機選擇key進行刪除。
6,volatile-ttl:從設置了過期時間的數據範圍內優先選擇設置了TTL的key進行刪除。

 

將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置爲0的時候,其實是所有value都存在於磁盤。默認值爲0
     vm-max-memory 0

 Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置爲32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認值
     vm-page-size 32

設置swap文件中的page數量,由於頁表(一種表示頁面空閒或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。
     vm-pages 134217728

設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置爲0,那麼所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值爲4
     vm-max-threads 4

 設置在向客戶端應答時,是否把較小的包合併爲一個包發送,默認爲開啓
    glueoutputbuf yes

指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希算法
    hash-max-zipmap-entries 64
    hash-max-zipmap-value 512

指定是否激活重置哈希,默認爲開啓(後面在介紹Redis的哈希算法時具體介紹)
    activerehashing yes

 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件
    include /path/to/local.conf

 

 

redis.conf對照解釋

#redis.conf
# Redis configuration file example.
# ./redis-server /path/to/redis.conf

################################## INCLUDES ###################################
#這在你有標準配置模板但是每個redis服務器又需要個性設置的時候很有用。
# include /path/to/local.conf
# include /path/to/other.conf

################################ GENERAL #####################################
#是否在後臺執行,yes:後臺運行;no:不是後臺運行(老版本默認)
daemonize yes
#3.2裏的參數,是否開啓保護模式,默認開啓。要是配置裏沒有指定bind和密碼。開啓該參數後,redis只會本地進行訪問,拒絕外部訪問。要是開啓了密碼 和bind,可以開啓。否 則最好關閉,設置爲no。
protected-mode yes

#redis的進程文件
pidfile "/var/run/redis/redis_7021.pid"

#redis監聽的端口號。
port 7021

#此參數確定了TCP連接中已完成隊列(完成三次握手之後)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統併發量大並且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。該內核參數默認值一般是128,對於負載很大的服務程序來說大大的不夠。一般會將它修改爲2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然後在終端中執行sysctl -p。
tcp-backlog 511

#指定 redis 只接收來自於該 IP 地址的請求,如果不進行設置,那麼將處理所有請求
bind 192.168.1.55

#配置unix socket來讓redis支持監聽本地連接。
unixsocket "/var/run/redis/redis_7021.sock"
#配置unix socket使用文件的權限
# unixsocketperm 700

# 此參數爲設置客戶端空閒超過timeout,服務端會斷開連接,爲0則服務端不會主動斷開連接,不能小於0。
timeout 0

#tcp keepalive參數。如果設置不爲0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間設備出問題而導致網絡看似連接卻已經與對端端口的問題。在Linux內核中,設置了keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設置值。
tcp-keepalive 0

#指定了服務端日誌的級別。級別包括:debug(很多信息,方便開發、測試),verbose(許多有用的信息,但是沒有debug級別信息多),notice(適當的日誌級別,適合生產環境),warn(只有非常重要的信息)
loglevel notice

#指定了記錄日誌的文件。空字符串的話,日誌會打印到標準輸出設備。後臺運行的redis標準輸出是/dev/null。
logfile "/var/log/redis/redis_7021.log"

#是否打開記錄syslog功能
# syslog-enabled no

#syslog的標識符。
# syslog-ident redis

#日誌的來源、設備
# syslog-facility local0

#數據庫的數量,默認使用的數據庫是DB 0。可以通過”SELECT “命令選擇一個db
databases 16

################################ SNAPSHOTTING ################################
# 快照配置
# 註釋掉“save”這一行配置項就可以讓保存數據庫功能失效
# 設置sedis進行數據庫鏡像的頻率。
# 900秒(15分鐘)內至少1個key值改變(則進行數據庫保存--持久化)
# 300秒(5分鐘)內至少10個key值改變(則進行數據庫保存--持久化)
# 60秒(1分鐘)內至少10000個key值改變(則進行數據庫保存--持久化)
#save 900 1
#save 300 10
#save 60 10000

#當RDB持久化出現錯誤後,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通過info中的rdb_last_bgsave_status瞭解RDB持久化是否有錯誤
stop-writes-on-bgsave-error yes

#使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁盤空間
rdbcompression yes

#是否校驗rdb文件。從rdb格式的第五個版本開始,在rdb文件的末尾會帶上CRC64的校驗和。這跟有利於文件的容錯性,但是在保存rdb文件的時候,會有大概10%的性能損耗,所以如果你追求高性能,可以關閉該配置。
rdbchecksum no

#rdb文件的名稱
dbfilename "dump.rdb"

#數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
dir "/var/lib/redis_7021"

################################# REPLICATION #################################
#複製選項,slave複製對應的master。
# slaveof <masterip> <masterport>

#如果master設置了requirepass,那麼slave要連上master,需要有master的密碼才行。masterauth就是用來配置master的密碼,這樣可以在連上master後進行認證。
masterauth "XYZ"

#當從庫同主機失去連接或者複製正在進行,從機庫有兩種運行方式:1) 如果slave-serve-stale-data設置爲yes(默認設置),從庫會繼續響應客戶端的請求。2) 如果slave-serve-stale-data設置爲no,除去INFO和SLAVOF命令之外的任何請求都會返回一個錯誤”SYNC with master in progress”。
slave-serve-stale-data yes

#作爲從服務器,默認情況下是隻讀的(yes),可以修改成NO,用於寫(不建議)。
slave-read-only yes

#是否使用socket方式複製數據。目前redis複製提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb文件。有2種方式:disk方式是master創建一個新的進程把rdb文件保存到磁盤,再把磁盤上的rdb文件傳遞給slave。socket是master創建一個新的進程,直接把rdb文件以socket的方式發給slave。disk方式的時候,當一個rdb保存的過程中,多個slave都能共享這個rdb文件。socket的方式就的一個個slave順序複製。在磁盤速度緩慢,網速快的情況下推薦用socket方式。
repl-diskless-sync no

#diskless複製的延遲時間,防止設置爲0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。
repl-diskless-sync-delay 5

#slave根據指定的時間間隔向服務器發送ping請求。時間間隔可以通過 repl_ping_slave_period 來設置,默認10秒。
repl-ping-slave-period 5

#複製連接超時時間。master和slave都有超時時間的設置。master檢測到slave上次發送的時間超過repl-timeout,即認爲slave離線,清除該slave信息。slave檢測到上次和master交互的時間超過repl-timeout,則認爲master離線。需要注意的是repl-timeout需要設置一個比repl-ping-slave-period更大的值,不然會經常檢測到超時。
repl-timeout 60

#是否禁止複製tcp鏈接的tcp nodelay參數,可傳遞yes或者no。默認是no,即使用tcp nodelay。如果master設置了yes來禁止tcp nodelay設置,在把數據複製給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來數據的延遲。默認我們推薦更小的延遲,但是在數據量傳輸很大的場景下,建議選擇yes。
repl-disable-tcp-nodelay no

#複製緩衝區大小,這是一個環形複製緩衝區,用來保存最新複製的命令。這樣在slave離線的時候,不需要完全複製master的數據,如果可以執行部分同步,只需要把緩衝區的部分數據複製給slave,就能恢復正常複製狀態。緩衝區的大小越大,slave離線的時間可以更長,複製緩衝區只有在有slave連接的時候才分配內存。沒有slave的一段時間,內存會被釋放出來,默認1m。
repl-backlog-size 32mb

#master沒有slave一段時間會釋放複製緩衝區的內存,repl-backlog-ttl用來設置該時間長度。單位爲秒。
repl-backlog-ttl 3600

#當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。
slave-priority 100

#redis提供了可以讓master停止寫入的方式,如果配置了min-slaves-to-write,健康的slave的個數小於N,mater就禁止寫入。master最少得有多少個健康的slave存活才能執行寫命令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠健康的slave的時候,master不能寫入來避免數據丟失。設置爲0是關閉該功能。
# min-slaves-to-write 3

#延遲小於min-slaves-max-lag秒的slave才認爲是健康的slave。
# min-slaves-max-lag 10

# 設置1或另一個設置爲0禁用這個特性。
# Setting one or the other to 0 disables the feature.
# By default min-slaves-to-write is set to 0 (feature disabled) and
# min-slaves-max-lag is set to 10.

################################## SECURITY ###################################
#requirepass配置可以讓用戶使用AUTH命令來認證密碼,才能使用其他命令。這讓redis可以使用在不受信任的網絡中。爲了保持向後的兼容性,可以註釋該命令,因爲大部分用戶也不需要認證。使用requirepass的時候需要注意,因爲redis太快了,每秒可以認證15w次密碼,簡單的密碼很容易被攻破,所以最好使用一個更復雜的密碼。
requirepass "XYZ"

#把危險的命令給修改成其他名稱。比如CONFIG命令可以重命名爲一個很難被猜到的命令,這樣用戶不能使用,而內部工具還能接着使用。
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
rename-command SHUTDOWN REDIS_SHUTDOWN
rename-command FLUSHDB REDIS_FLUSHDB
rename-command FLUSHALL REDIS_FLUSHALL
rename-command KEYS REDIS_KEYS
#rename-command CONFIG REDIS_CONFIG
#rename-command SLAVEOF REDIS_SLAVEOF
#設置成一個空的值,可以禁止一個命令
# rename-command CONFIG ""
################################### LIMITS ####################################

# 設置能連上redis的最大客戶端連接數量。默認是10000個客戶端連接。由於redis不區分連接是客戶端連接還是內部打開文件或者和slave連接等,所以maxclients最小建議設置到32。如果超過了maxclients,redis會給新的連接發送’max number of clients reached’,並關閉連接。
# maxclients 10000

#redis配置的最大內存容量。當內存滿了,需要配合maxmemory-policy策略進行處理。注意slave的輸出緩衝區是不計算在maxmemory內的。所以爲了防止主機內存使用完,建議設置的maxmemory需要更小一些。
maxmemory 512mb

#內存容量超過maxmemory後的處理策略。
#volatile-lru:利用LRU算法移除設置過過期時間的key。
#volatile-random:隨機移除設置過過期時間的key。
#volatile-ttl:移除即將過期的key,根據最近過期時間來刪除(輔以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:隨機移除任何key。
#noeviction:不移除任何key,只是返回一個寫錯誤。
#上面的這些驅逐策略,如果redis沒有合適的key驅逐,對於寫命令,還是會返回錯誤。redis將不再接收寫請求,只接收get請求。寫命令包括: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 allkeys-lru

#lru檢測的樣本數。使用lru或者ttl淘汰算法,從需要淘汰的列表中隨機選擇sample個key,選出閒置時間最長的key移除。
# maxmemory-samples 5

############################## APPEND ONLY MODE ###############################
#默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的數據丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的數據在接收後都寫入 appendonly.aof 文件,每次啓動時Redis都會先把這個文件的數據讀入內存裏,先忽略RDB文件。
appendonly no

#aof文件名
appendfilename "appendonly.aof"

#aof持久化策略的配置
#no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快。
#always表示每次寫入都執行fsync,以保證數據同步到磁盤。
#everysec表示每秒執行一次fsync,可能會導致丟失這1s數據。
appendfsync everysec

# 在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置爲默認設置爲no。如果對延遲要求很高的應用,這個字段可以設置爲yes,否則還是設置爲no,這樣對持久化特性來說這是更安全的選擇。設置爲yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成後再寫入,默認爲no,建議yes。Linux的默認fsync策略是30秒。可能丟失30秒數據。
no-appendfsync-on-rewrite yes

#aof自動重寫配置。當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候Redis能夠調用bgrewriteaof對日誌文件進行重寫。當前AOF文件大小是上次日誌重寫得到AOF文件大小的二倍(設置爲100)時,自動啓動新的日誌重寫過程。
auto-aof-rewrite-percentage 100
#設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫
auto-aof-rewrite-min-size 64mb

#aof文件可能在尾部是不完整的,當redis啓動的時候,aof文件的數據被載入內存。重啓可能發生在redis所在的主機操作系統宕機後,尤其在ext4文件系統沒有加上data=ordered選項(redis宕機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入儘可能多的數據。如果選擇的是yes,當截斷的aof文件被導入的時候,會自動發佈一個log給客戶端然後load。如果是no,用戶必須手動redis-check-aof修復AOF文件纔可以。
aof-load-truncated yes

################################ LUA SCRIPTING ###############################
# 如果達到最大時間限制(毫秒),redis會記個log,然後返回error。當一個腳本超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。
lua-time-limit 5000

################################ REDIS CLUSTER ###############################
#集羣開關,默認是不開啓集羣模式。
#cluster-enabled yes

#集羣配置文件的名稱,每個節點都有一個集羣相關的配置文件,持久化保存集羣的信息。這個文件並不需要手動配置,這個配置文件有Redis生成並更新,每個Redis集羣節點需要一個單獨的配置文件,請確保與實例運行的系統中配置文件名稱不衝突
#cluster-config-file nodes-7021.conf

#節點互連超時的閥值。集羣節點超時毫秒數
#cluster-node-timeout 30000

#在進行故障轉移的時候,全部slave都會請求申請爲master,但是有些slave可能與master斷開連接一段時間了,導致數據過於陳舊,這樣的slave不應該被提升爲master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:
#比較slave斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果節點超時時間爲三十秒, 並且slave-validity-factor爲10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移
#可能出現由於某主節點失聯卻沒有從節點能頂上的情況,從而導致集羣不能正常工作,在這種情況下,只有等到原來的主節點重新迴歸到集羣,集羣才恢復運作
#如果設置成0,則無論從節點與主節點失聯多久,從節點都會嘗試升級成主節
#cluster-slave-validity-factor 10

#master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數若被設爲2,那麼只有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。
#主節點需要的最小從節點數,只有達到這個數,主節點失敗時,它從節點纔會進行遷移。
# cluster-migration-barrier 1

#默認情況下,集羣全部的slot有節點分配,集羣狀態才爲ok,才能提供服務。設置爲no,可以在slot沒有全部分配的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而造成很長時間數據不一致。
#在部分key所在的節點不可用時,如果此參數設置爲”yes”(默認值), 則整個集羣停止接受操作;如果此參數設置爲”no”,則集羣依然爲可達節點上的key提供讀操作
#cluster-require-full-coverage yes

################################## SLOW LOG ###################################
###slog log是用來記錄redis運行中執行比較慢的命令耗時。當命令的執行超過了指定時間,就記錄在slow log中,slog log保存在內存中,所以沒有IO操作。
#執行時間比slowlog-log-slower-than大的請求記錄到slowlog裏面,單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令。
slowlog-log-slower-than 10000

#慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉。這個長度沒有限制。只要有足夠的內存就行。你可以通過 SLOWLOG RESET 來釋放內存。
slowlog-max-len 128

################################ LATENCY MONITOR ##############################
#延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY打印redis實例在跑命令時的耗時圖表。只記錄大於等於下邊設置的值的操作。0的話,就是關閉監視。默認延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIG SET命令動態設置。
latency-monitor-threshold 0

############################# EVENT NOTIFICATION ##############################
#鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 數據集的事件。因爲開啓鍵空間通知功能需要消耗一些 CPU ,所以在默認配置下,該功能處於關閉狀態。
#notify-keyspace-events 的參數可以是以下字符的任意組合,它指定了服務器該發送哪些類型的通知:
##K 鍵空間通知,所有通知以 __keyspace@__ 爲前綴
##E 鍵事件通知,所有通知以 __keyevent@__ 爲前綴
##g DEL 、 EXPIRE 、 RENAME 等類型無關的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 過期事件:每當有過期鍵被刪除時發送
##e 驅逐(evict)事件:每當有鍵因爲 maxmemory 政策而被刪除時發送
##A 參數 g$lshzxe 的別名
#輸入的參數中至少要有一個 K 或者 E,否則的話,不管其餘的參數是什麼,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications

notify-keyspace-events "e"

############################### ADVANCED CONFIG ###############################
#數據量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
#value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。
hash-max-ziplist-value 64

#數據量小於等於list-max-ziplist-entries用ziplist,大於list-max-ziplist-entries用list。
list-max-ziplist-entries 512
#value大小小於等於list-max-ziplist-value的用ziplist,大於list-max-ziplist-value用list。
list-max-ziplist-value 64

#數據量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。
set-max-intset-entries 512

#數據量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。
zset-max-ziplist-entries 128
#value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。
zset-max-ziplist-value 64

#value大小小於等於hll-sparse-max-bytes使用稀疏數據結構(sparse),大於hll-sparse-max-bytes使用稠密的數據結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概爲3000。如果對CPU要求不高,對空間要求較高的,建議設置到10000左右。
hll-sparse-max-bytes 3000

#Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置爲no。如果沒有這麼嚴格的實時性要求,可以設置爲yes,以便能夠儘可能快的釋放內存。
activerehashing yes

##對客戶端輸出緩衝進行限制可以強迫那些不從服務器讀取數據的客戶端斷開連接,用來強制關閉傳輸緩慢的客戶端。
#對於normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client默認取消限制,因爲如果沒有尋問,他們是不會接收數據的。
client-output-buffer-limit normal 0 0 0
#對於slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼服務器就會立即斷開客戶端連接。
client-output-buffer-limit slave 256mb 64mb 60
#對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼服務器就會立即斷開客戶端連接。
client-output-buffer-limit pubsub 32mb 8mb 60

#redis執行任務的頻率爲1s除以hz。
hz 10

#在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把文件寫入磁盤是有幫助的,可以避免過大的延遲峯值。
aof-rewrite-incremental-fsync yes

 

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