Redis配置文件
默認的配置文件是redis.conf
Redis5.0版官方的默認配置文件內容:
有時候無法訪問,可以試試換個瀏覽器,Chrome
應該沒什麼問題.
https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
1. Units
如果需要指定內存使用大小時,可以用一下的形式來指定:
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes
不區分大小寫,所以1GB 1Gb 1gB 都可以被正確識別
2. INCLUDES
Redis server支持多個配置文件,尤其當服務器比較多時,會有一個統一的配置文件,然後各自的服務有自己的定製化配置內容.
如果你需要用include進來的配置文件覆蓋配置信息時,最好將它寫在配置文件末尾.
include /path/to/other.conf
3. MODULES
配置啓動時加載模塊,如果server不能加載模塊,那麼將不會被啓動
loadmodule /path/to/my_module.so
loadmodule /path/to/other_module.so
4. NETWORK
- bind:綁定主機地址
# 默認值
bind 127.0.0.1
- port:監聽的端口
# 默認值
port 6379
- timeout:超時時間
當客戶端 N 秒內沒有操作將斷開連接.0表示永不斷開
# 默認值
timeout 0
- tcp-keepalive:心跳機制
每300秒向客戶端發送一次心跳檢查,判斷客戶端是否存活
# 默認值
tcp-keepalive 300
- daemonize:是否以守護進程的方式啓動(後臺啓動)
5. GENERAL
# 默認值
daemonize no
- pidfile :當以守護進程方式啓動時,需要用到的pid文件.
# 默認值
pidfile /var/run/redis_6379.pid
- loglevel :日誌級別
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
# 默認值
loglevel notice
- logfile :日誌文件
# 默認值
logfile ""
- syslog-enabled :是否允許將日誌打印到系統日誌
# 默認值
syslog-enabled no
- syslog-ident redis:指定系統日誌標識
# 默認值
syslog-ident redis
- syslog-facility :系統日誌設備
# 只能是USER或者在LOCAL0-LOCAL7之間
# 默認值
syslog-facility local0
- databases :開啓數據庫的個數
# 默認值
databases 16
6. SNAPSHOTTING
- save:自動保存
# save seconds updatetimes
# 指定時間範圍內,更新次數達到一定的次數,那麼就會進行保存,將內存中的數據持久化到.rdb文件.
# 如果想要禁用,可以寫成:
# save ""
# 默認設置
save 900 1
save 300 10
save 60 10000
- stop-writes-on-bgsave-error:後臺保存錯誤時停止寫入
如果後臺進程保存時報錯,不允許再寫入數據,可以保證數據的一致性,如果不需要可以手動改爲no
# 默認值
stop-writes-on-bgsave-error yes
- rdbcompression :是否對rdb文件進行壓縮.
# 默認值
rdbcompression yes
- rdbchecksum yes
在存儲快照後,還可以讓Redis使用CRC64算法來進行數據校驗,但是這樣做會增加額外大概10%的性能損耗,如果希望獲得最大的性能,可以將它設置爲no
。
rdbchecksum yes
- dbfilename :rdb文件名稱
# 默認值
dbfilename dump.rdb
- dir :rdb文件存放路徑
dir ./
7. REPLICATION
# +------------------+ +---------------+
# | Master | ---> | Replica |
# | (receive writes) | | (exact copy) |
# +------------------+ +---------------+
-
replicaof <masterip> <masterport>
在slave服務配置,指定主server的ip和端口. -
masterauth <master-password>
如果master設置了密碼訪問(requirepass
配置),那麼這裏需要配置master的密碼 -
replica-serve-stale-data :
在slave與master同步數據時,是否允許客戶端請求數據
如果設置爲no
則表示不允許,將會提示消息:
SYNC with master in progress
replica-serve-stale-data yes
- replica-read-only yes:
slave是否是隻讀的
replica-read-only yes
- repl-ping-replica-period :
默認的,slave每10秒向master發送ping
,來確認是否連接通暢.
# 默認值
repl-ping-replica-period 10
- repl-timeout :
60爲連通則宣佈超時.
# 默認值
repl-timeout 60
- repl-disable-tcp-nodelay
slave和master同步時,是否採用TCP_NODELAY方式進行數據同步.
設置爲yes
:redis會將小的tcp包合併起來,然後發送,這樣做會增加同步的延遲,可能造成數據的不一致,如果slave和master的通信距離較大,那麼建議設置爲yes
設置爲no
:每次同步立即發送數據,沒有延遲
# 默認值
repl-disable-tcp-nodelay no
- repl-backlog-size :
同日志大小,當salve掉線時,會將同步數據發送到同步日誌緩衝,這樣,當salve再次上線時,就可以直接從同步日誌中讀取錯過的數據,設置的值越大,則可能允許salve掉線的時間越長.
# 默認值
repl-backlog-size 1mb
- repl-backlog-ttl :同步日誌的有效時長
# 默認值
repl-backlog-ttl 3600
- replica-priority :salve優先級
當master宕機時,Redis的哨兵機制會從slave中選出優先級最高的slave當做master,以保證正常的寫請求.
# 默認值
replica-priority 100
- min-replicas-to-write & min-replicas-max-lag
當salve少於min-replicas-to-write
或者當延遲大於min-replicas-max-lag
時,master不接受寫請求.
# 默認值
# min-replicas-to-write 0
# min-replicas-max-lag 10
- replica-announce-ip & replica-announce-port
當使用了端口轉發
或Network Address Translation (NAT)
時,slave需要指定ip,port來對外提供訪問.
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234
8. SECURITY
-
requirepass :
是否需要密碼驗證,默認的不需要,因爲安全問題應該交給linux系統來管理,而redis只負責數據. -
rename-command :
命令重命名,有些命令是比較危險的,如果所有用戶都能操作到的話,則可能對服務產生威脅,比如如果讓每個用戶都能使用flushall
命令的話,那數據就都被清空了,還有官方給出的CONFIG命令,重命名之後,運維人員可以進行操作,但是客戶端的用戶不必知道.
如果想要使一個命令失效,可以給他重命名爲空字符串.
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
9. CLIENTS
- maxclients :
最大允許多少個客戶端連接
maxclients 10000
10. MEMORY MANAGEMENT
maxmemory <bytes>
允許redis使用的最大內存,單位是bytes
,當達到使用上限時,redis則會開始(按照maxmemory-policy
)自動清除key.- maxmemory-policy noeviction
當達到內存使用上限,按照何種方式刪除key.
LRU (Least recently used) 最近最少使用,如果數據最近被訪問過,那麼將來被訪問的機率也更高。
LFU (Least frequently used) 最不經常使用,如果一個數據在最近一段時間內使用次數很少,那麼在將來一段時間內被使用的可能性也很小。
# volatile-lru -> 最近最少使用,並且設置了過期時間的key.
# allkeys-lru -> 最近最少使用的key.
# volatile-lfu -> 最近使用頻率相對較少的,設置了過期時間的key.
# allkeys-lfu -> 最近使用頻率相對較少的key.
# volatile-random -> 隨機刪除設置了過期時間的key.
# allkeys-random -> 隨機刪除任意key.
# volatile-ttl -> 刪除快到期的key
# noeviction -> 不刪除任何key,只是返回一個error.
# 默認值
maxmemory-policy noeviction
- maxmemory-samples:
在LRU和LFU算法時需要用到的樣例數,默認是5,數值越大要算法越精確,但是相對的耗費的時間越長,反之速度快但是精度變小.
# 默認值
maxmemory-samples 5
- replica-ignore-maxmemory:
自Redis 5開始,默認的slave會忽略內存上限的設置,當需要刪除時是由master發送刪除命令到slave的,除非當master宕機需要slave來充當master時,否則一般不需要設置.
但是這也意味着,slave需要保證內存的充足,以免發生OOM.
replica-ignore-maxmemory yes
11. LAZY FREEZING
Redis提供了2種刪除key的方式.
一種是調用DEL命令,它是阻塞式的,這也意味着在刪除操作持續期間內,是不接受任何更命令操作的.在要刪除的數據量比較小時,可能影響不是很大,但是如果需要刪除的key數據量比較龐大,那它可能會花費好幾秒的時間.
因此Redis也爲我們提供了,另一種方式,非阻塞式的刪除.
比如:UNLINK ,FLUSHALL 的ASYNC選項和FLUSHDB 命令,都是爲了可以在後臺回收資源.
下面4組設置對應了4種情況下,是否要採用非阻塞式刪除,默認是不開啓的.
# maxmemory 達到上限,依據設置的策略刪需要除時
lazyfree-lazy-eviction no
# key過期時
lazyfree-lazy-expire no
# 一些命令的副作用需要涉及到刪除key時
#(RENAME命令,會將oldkey刪除,然後重新創建一個新的key)
lazyfree-lazy-server-del no
# 當slave要從master完全同步信息時,需要先移除slave的整個database,
#以便來加載從master同步來的RDB文件
replica-lazy-flush no
12. APPEND ONLY MODE
- appendonly :是否開啓appendonly來持久化數據.
appendonly no
- appendfilename :aof文件名
appendfilename "appendonly.aof"
- appendfsync :appendonly的同步策略
有三種策略:
no:不同步
always:每次更新都同步,就是每條更新命令都會被同步,效率低,但是安全
everysec:每秒鐘同步一次.
# 默認值
appendfsync everysec
- no-appendfsync-on-rewrite:
當aof同步日誌時,可能會產生大量的I/O操作,在某些Linux的配置下,可能造成很長時間的阻塞.
因此可以將下面的值設置爲yes
來進行後臺保存操作,但是這樣一來,就相當於appendonly no
可能會造成數據的不同步,因此官方建議最安全的方法是將它設置爲no.
# 默認值
no-appendfsync-on-rewrite no
- auto-aof-rewrite-percentage & auto-aof-rewrite-min-size
默認的,Redis會記錄上一次向aof文件寫入內容的日誌大小,當日志文件大小到達上一次日誌內容的大小時,會自動寫入aof.
設置auto-aof-rewrite-min-size
來保證下限,至少要達到下限時,才寫入aof文件,否則文件太小可能導致I/O操作太頻繁,浪費資源.
而auto-aof-rewrite-percentage
可以設置一個百分比,當達到所設置size的一定比例時開始寫入,這樣可以留有一定的容錯機率.
# 默認值如下,但是size有點兒小,一般生產都建議5G左右
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
- aof-load-truncated:
當Redis服務崩了之後,AOF文件可能不完整,比如命令剛寫了一半,或者有亂碼之類的錯誤存在於AOF文件中,那麼下次啓動時,是否在明知道AOF文件不完整也要從AOF回覆數據.
如果設置成no
,則無法啓動Redis,除非使用redis-check-aof
命令來修復AOF文件.
aof-load-truncated yes
- aof-use-rdb-preamble :
是否使用RDB與AOF來進行混合持久化.
在AOF重寫時,不是像之前那樣直接將更新指令寫到AOF文件,而是現將這一刻的內存做RDB快照處理,並且將RDB快照信息和在這之後的AOF更新操作追加到AOF文件中,此時文件包含兩個部分:
[RDB file]
REDIS XXX
[AOF tail]
xxx
這樣,再從AOF進行恢復數據時,先從RDB快照恢復大部分信息,之後再從AOF部分來恢復快照後的更新內容.
這麼做是因爲,AOF文件要比RDB慢很多,有時進行大量數據的重寫時會影響效率,所以這種混合的持久化方式可以大大提升效率.
aof-use-rdb-preamble yes