在玩 Redis 的時候,常常會碰 Redis 的 redis.conf 設定檔,它的作用很大,能夠配置很多功能,下面我就來詳細介紹下 redis.conf 檔案內容。 redis.conf 檔案位置
Units 單位
INCLUDES 包含
GENERAL 通用
daemonize yes
daemonize 意思為:後台運行。
如果不配置為後台運行,那麼將無法部署叢集
pidfile /var/run/redis.pid
管道檔案配置。
port 6379
預設值/var/run/redis.pid,指定redis服務的進程號檔案路徑,以守護模式運行時需要配置本參數;
loglevel notice
設定服務端的記錄層級,有下列幾種選擇(提示詳情從上到下,提示得越來越少): debug:記錄詳細資料,用於開發或調試; verbose:提供很多有用的資訊,但是又不像debug那麼詳盡,預設就是這一選項; notice:適度提醒,多用於產品環境; warning:僅顯示重要的警告資訊;
logfile ""
指定日誌的輸出路徑,預設值stdout,表示輸出到螢幕,後台模式時則輸出到/dev/null;
如果要輸出日誌,可以設定syslog-enabled yes,預設該選項值為no,表示不輸出日誌。
syslog-enabled
是否輸出日誌。
syslog-ident redis
記錄檔名稱標識。
syslog-facility local0
輸出日誌工具
databases 16
指定資料庫的數量,預設為16個,預設使用的資料庫是DB 0。
tcp-backlog 511
設定 tcp 的 backlog,backlog 其實是一個串連隊列,backlog 隊列總和 = 未完成三向交握隊列 + 已經完成三向交握隊列。
在高並發環境下你需要一個高 backlog 值來避免慢用戶端串連問題。注意 Linux 核心會將這個值減小到 /proc/sys/net/core/somaxconn 的值,所以需要確認增大 somaxconn 和 tcp_max_syn_backlog 兩個值來達到想要的效果。
換一個說法:
此參數確定了TCP串連中已完成隊列(完成三向交握之後)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,預設是511,而Linux的預設參數值是128。當系統並發量大並且用戶端速度緩慢的時候,可以將這二個參數一起參考設定。該核心參數預設值一般是128,對於負載很大的服務程式來說大大的不夠。一般會將它修改為2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然後在終端中執行sysctl -p。
bind 127.0.0.1
指定 redis 只接收來自於該 IP 位址的請求,如果不進行設定,那麼將處理所有請求
timeout 0
此參數為設定用戶端空閑超過timeout,服務端會中斷連線,為0則服務端不會主動中斷連線,不能小於0。
tcp-keepalive 0
tcp keepalive參數。如果設定不為0,則不會進行 Keepalive 的檢測,建議設定為 60,官方給出的建議值是300S。使用keepalive有兩個好處:檢測掛掉的對端。降低中間裝置出問題而導致網路看似串連卻已經與對端斷開的問題。在Linux核心中,設定了keepalive,redis會定時給對端發送ack。檢測到對端是否關閉。 SNAPSHOTTING 快照
save <seconds> <changes>
表示多少秒鐘裡,滿足多少次寫操作將會觸發自動記憶體資料備份。
RDB是整個記憶體的壓縮過的 Snapshot(快照),RDB 的資料結構,可以配置複合的快照觸發條件。
預設(推薦用預設設定,這是官方最佳實務):
15 分鐘內改了 1 次
5 分鐘內改了 10 次
1 分鐘內改了 1萬次
那麼如何禁用自動備份快照。。。
如果想禁用 RDB 持久化的策略,只要不設定任何 save 指令,或者給 save 傳入一個Null 字元串參數。
如何進行重要資料快速備份。。
直接在 控制台 打入 save 或者 bgsave 命令就可以達到動態手動備份。
stop-writes-on-bgsave-error
表示,如果在後台備份記憶體資料的過程中,如果發生了錯誤,是否停止記憶體資料的寫入。
如果配置為 no ,表示你不在乎資料不一致或者有其它的手段發現和控制。
預設為 yes。
rdbcompression yes
使用壓縮rdb檔案,rdb檔案壓縮使用LZF壓縮演算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁碟空間。
推薦使用壓縮。
rdbchecksum yes
在儲存快照後,還可以讓 redis 使用 CRC64 演算法來進行資料校正。從rdb格式的第五個版本開始,在rdb檔案的末尾會帶上CRC64的校正和。這跟有利於檔案的容錯性,但是在儲存rdb檔案的時候,會有大概10%的效能損耗,所以如果你追求高效能,可以關閉該配置。
推薦開啟。。。 REPLICATION 複製
未完待續。。。 SECURITY 安全
擷取串連密碼和服務啟動路徑:
修改 Redis 串連密碼:
LIMITS 限制
maxclients 10000
設定能連上redis的最大用戶端串連數量。預設是10000個用戶端串連。由於redis不區分串連是用戶端串連還是內部開啟檔案或者和slave串連等,所以maxclients最小建議設定到32。如果超過了maxclients,redis會給新的串連發送’max number of clients reached’,並關閉串連。
maxmemory <bytes>
redis配置的最大記憶體容量。當記憶體滿了,需要配合maxmemory-policy策略進行處理。注意slave的輸出緩衝區是不計算在maxmemory內的。所以為了防止主機記憶體使用量完,建議設定的maxmemory需要更小一些。
所以,面試經常問到的問題是,Redis 的記憶體策略是怎麼配置的。
maxmemory-policy noeviction
記憶體容量超過maxmemory後的處理策略。
volatile-lru:利用LRU(Less Recentely Use 最近很少使用)演算法對設定過到期時間的最近最不經常使用的key進行刪除。
volatile-random:隨機移除設定過到期時間的key。
volatile-ttl:移除即將到期的key,根據最近到期時間來刪除(輔以TTL),用以儲存新資料
allkeys-lru:優先刪除掉最近最不經常使用的任何key,用以儲存新資料
allkeys-random:隨機從all-keys中選擇一些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-samples
設定樣本數量,LRU 演算法和最小 TTL 演算法都並非是精確的演算法,而是估算值,所以你可以設定樣本的大小, redis 預設會檢查這麼多個 key 並選擇其中 LRU 的那個。 APPEND ONLY MODE 追加
appendonly no
預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的資料丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案。
appendfilename "appendonly.aof"
AOF檔案備份和資料載入到記憶體的名稱。
appendfsync everysec
aof 檔案備份模式。
一共有三種模式: always:非同步同步持久化 每次發生資料變更會被立即記錄到磁碟 效能較差但資料完整性比較好。 everysec:出廠預設推薦,非同步作業,每秒記錄,如果一秒內宕機,有一秒資料丟失。 no:表示不執行fsync,由作業系統保證資料同步到磁碟,速度最快。
no-appendfsync-on-rewrite no
在aof重寫或者追加寫入aof檔案的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite欄位設定為預設設定為no。如果對延遲要求很高的應用,這個欄位可以設定為yes,否則還是設定為no,這樣對持久化特性來說這是更安全的選擇。設定為yes表示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入,預設為no,建議yes。Linux的預設fsync策略是30秒。可能丟失30秒資料。
auto-aof-rewrite-percentage 100
aof自動重寫配置。當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候Redis能夠調用bgrewriteaof對記錄檔進行重寫。當前AOF檔案大小是上次日誌重寫得到AOF檔案大小的二倍(設定為100)時,自動啟動新的日誌重寫過程。
auto-aof-rewrite-min-size 64mb
設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
如果是好一點的公司,這個值 3G 為起步設定,但是通常大規模應用這裡設定為 6G,
當你看到你公司的 這個 值還是 64mb的 時候,你就能夠知道這個公司的水平怎麼樣。 常見配置 redis.conf 介紹
未完待續。。。