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

  1. bind:綁定主機地址
# 默認值
bind 127.0.0.1
  1. port:監聽的端口
# 默認值
port 6379
  1. timeout:超時時間
    當客戶端 N 秒內沒有操作將斷開連接.0表示永不斷開
# 默認值 
timeout 0
  1. tcp-keepalive:心跳機制
    每300秒向客戶端發送一次心跳檢查,判斷客戶端是否存活
# 默認值 
tcp-keepalive 300
  1. daemonize:是否以守護進程的方式啓動(後臺啓動)

5. GENERAL

# 默認值 
daemonize no
  1. pidfile :當以守護進程方式啓動時,需要用到的pid文件.
# 默認值 
pidfile /var/run/redis_6379.pid
  1. 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
  1. logfile :日誌文件
# 默認值 
logfile ""
  1. syslog-enabled :是否允許將日誌打印到系統日誌
# 默認值 
syslog-enabled no
  1. syslog-ident redis:指定系統日誌標識
# 默認值
syslog-ident redis
  1. syslog-facility :系統日誌設備
# 只能是USER或者在LOCAL0-LOCAL7之間
# 默認值
syslog-facility local0
  1. databases :開啓數據庫的個數
# 默認值 
databases 16

6. SNAPSHOTTING

  1. save:自動保存
# save seconds updatetimes
# 指定時間範圍內,更新次數達到一定的次數,那麼就會進行保存,將內存中的數據持久化到.rdb文件.
# 如果想要禁用,可以寫成:
# save ""
# 默認設置
save 900 1
save 300 10
save 60 10000
  1. stop-writes-on-bgsave-error:後臺保存錯誤時停止寫入
    如果後臺進程保存時報錯,不允許再寫入數據,可以保證數據的一致性,如果不需要可以手動改爲no
# 默認值
stop-writes-on-bgsave-error yes
  1. rdbcompression :是否對rdb文件進行壓縮.
# 默認值
rdbcompression yes
  1. rdbchecksum yes
    在存儲快照後,還可以讓Redis使用CRC64算法來進行數據校驗,但是這樣做會增加額外大概10%的性能損耗,如果希望獲得最大的性能,可以將它設置爲no
rdbchecksum yes
  1. dbfilename :rdb文件名稱
# 默認值
dbfilename dump.rdb
  1. dir :rdb文件存放路徑
dir ./

7. REPLICATION

#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
  1. replicaof <masterip> <masterport>
    在slave服務配置,指定主server的ip和端口.

  2. masterauth <master-password>
    如果master設置了密碼訪問(requirepass配置),那麼這裏需要配置master的密碼

  3. replica-serve-stale-data :
    在slave與master同步數據時,是否允許客戶端請求數據
    如果設置爲no則表示不允許,將會提示消息:
    SYNC with master in progress

replica-serve-stale-data yes
  1. replica-read-only yes:
    slave是否是隻讀的
replica-read-only yes
  1. repl-ping-replica-period :
    默認的,slave每10秒向master發送ping,來確認是否連接通暢.
# 默認值
repl-ping-replica-period 10
  1. repl-timeout :
    60爲連通則宣佈超時.
# 默認值
repl-timeout 60
  1. repl-disable-tcp-nodelay
    slave和master同步時,是否採用TCP_NODELAY方式進行數據同步.
    設置爲yes:redis會將小的tcp包合併起來,然後發送,這樣做會增加同步的延遲,可能造成數據的不一致,如果slave和master的通信距離較大,那麼建議設置爲yes
    設置爲no:每次同步立即發送數據,沒有延遲
# 默認值
repl-disable-tcp-nodelay no
  1. repl-backlog-size :
    同日志大小,當salve掉線時,會將同步數據發送到同步日誌緩衝,這樣,當salve再次上線時,就可以直接從同步日誌中讀取錯過的數據,設置的值越大,則可能允許salve掉線的時間越長.
# 默認值
repl-backlog-size 1mb
  1. repl-backlog-ttl :同步日誌的有效時長
# 默認值
repl-backlog-ttl 3600
  1. replica-priority :salve優先級
    當master宕機時,Redis的哨兵機制會從slave中選出優先級最高的slave當做master,以保證正常的寫請求.
# 默認值
replica-priority 100
  1. 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
  1. 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

  1. requirepass :
    是否需要密碼驗證,默認的不需要,因爲安全問題應該交給linux系統來管理,而redis只負責數據.

  2. rename-command :

命令重命名,有些命令是比較危險的,如果所有用戶都能操作到的話,則可能對服務產生威脅,比如如果讓每個用戶都能使用flushall命令的話,那數據就都被清空了,還有官方給出的CONFIG命令,重命名之後,運維人員可以進行操作,但是客戶端的用戶不必知道.
如果想要使一個命令失效,可以給他重命名爲空字符串.

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

9. CLIENTS

  1. maxclients :
    最大允許多少個客戶端連接
maxclients 10000

10. MEMORY MANAGEMENT

  1. maxmemory <bytes>
    允許redis使用的最大內存,單位是bytes,當達到使用上限時,redis則會開始(按照maxmemory-policy)自動清除key.
  2. 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
  1. maxmemory-samples:
    在LRU和LFU算法時需要用到的樣例數,默認是5,數值越大要算法越精確,但是相對的耗費的時間越長,反之速度快但是精度變小.
# 默認值
maxmemory-samples 5
  1. 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

  1. appendonly :是否開啓appendonly來持久化數據.
appendonly no
  1. appendfilename :aof文件名
appendfilename "appendonly.aof"
  1. appendfsync :appendonly的同步策略
    有三種策略:
    no:不同步
    always:每次更新都同步,就是每條更新命令都會被同步,效率低,但是安全
    everysec:每秒鐘同步一次.
# 默認值
appendfsync everysec
  1. no-appendfsync-on-rewrite:
    當aof同步日誌時,可能會產生大量的I/O操作,在某些Linux的配置下,可能造成很長時間的阻塞.
    因此可以將下面的值設置爲yes來進行後臺保存操作,但是這樣一來,就相當於appendonly no可能會造成數據的不同步,因此官方建議最安全的方法是將它設置爲no.
# 默認值
no-appendfsync-on-rewrite no
  1. 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
  1. aof-load-truncated:
    當Redis服務崩了之後,AOF文件可能不完整,比如命令剛寫了一半,或者有亂碼之類的錯誤存在於AOF文件中,那麼下次啓動時,是否在明知道AOF文件不完整也要從AOF回覆數據.
    如果設置成no,則無法啓動Redis,除非使用redis-check-aof命令來修復AOF文件.
aof-load-truncated yes
  1. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章