![](https://www.rmrf2020.com/upload/2022/08/1498119653712274.png)
redis配置文件详解
1. INCLUDES
1.1 include
include 可以使用多个配置文件,如果配置文件有相同值,后面的会覆盖前面的
# include /path/to/local.conf
# include /path/to/other.conf
1.2 loadmodule
加载modules 没什么用好像,还需要继续研究
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
2. NETWORK
2.1 bind
指定Redis只接受来自该IP的请求,如果不进行设置,那么接收所有请求
bind 127.0.0.1 -::1
2.2 protected-mode
默认开启 保护模式,如果未配置bind选项的IP和Redis的密码,那么服务将指允许本地访问
protected-mode yes
2.3 port
端口,设置为0就不会监听
port 6379
2.4 tcp-backlog
backlog是一个连接队列,在TCP三次握手中,会有SYN_RCVD和ESTABLISHED两种状态
在Linux内核2.2之前backlog包括半连接和全连接两种状态
在Linux内核2.2之后,分为两个backlog来限制半连接和全连接状态
在WSL Ubuntu18.04中/proc/sys/net/ipv4/tcp_max_syn_backlog=1024
/proc/sys/net/core/somaxconn=4096
或/etc/sysctl.conf修改net.core.somaxconn = 2048
tcp-backlog 511
2.5 unixsocket
unix socket ,默认不监听,没用
# unixsocket /run/redis.sock
2.6 unixsocketperm
指定文件的权限
# unixsocketperm 700
2.7 timeout
客户端空闲多少秒后关闭连接(0为不关闭)
timeout 0
2.8 tcp-keepalive
tcp-keepalive设置。如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK,用途如下:
1)能够检测无响应的对端
2)让该连接中间的网络设备知道这个连接还存活
在Linux上,这个指定的值(单位秒)就是发送ACK的时间间隔。
注意:要关闭这个连接需要两倍的这个时间值。
在其他内核上这个时间间隔由内核配置决定# 从redis3.2.1开始默认值为300秒
tcp-keepalive 300
3. TLS/SSL
3.1 tsl-port
默认关闭,如果要启用,设置如下
port 0
# tls-port 6379
3.2 tls-cert-file
# tls-cert-file redis.crt
3.3 tls-key-file
# tls-key-file redis.key
3.4 tls-key-file-pass
私钥密码
# tls-key-file-pass secret
3.5 tls-client-cert-file
# tls-client-cert-file client.crt
3.6 tls-client-key-file
# tls-client-key-file client.key
3.7 tls-client-key-file-pass
# tls-client-key-file-pass secret
3.8 tls-dh-params-file
Redis 的 TLS/SSL 通信支持 Diffie-Hellman (DH) 密钥交换算法,可以通过该选项指定 DH 参数文件来开启。
# tls-dh-params-file redis.dh
3.9 tls-ca-cert-file
CA 证书和下一项配置至少配置一项
# tls-ca-cert-file ca.crt
3.10 tls-ca-cert-dir
# tls-ca-cert-dir /etc/ssl/certs
3.11 tls-auth-clients
默认情况下,Redis 使用双向 TLS 认证,要求客户端(包括副本服务器)使用有效的证书进行身份验证(客户端使用由 tls-ca-cert-file
或 tls-ca-cert-dir
指定的可信根 CA 颁发的证书进行身份认证)。
可以使用此配置选项禁用身份验证。
默认为 yes
启用,设为 no
则禁用。
# tls-auth-clients no
# tls-auth-clients optional
3.12 tls-replication
默认情况下,Redis 副本服务器不尝试与其主服务器建立 TLS 连接。
如果要让副本服务器到其主服务器的复制连接使用 TLS ,必须在副本服务器上将 tls-replication
设置为 yes
。
# tls-replication yes
3.12 tls-cluster
默认情况下,Redis Cluster 总线使用普通 TCP 连接,要为集群总线协议和跨节点连接启用 TLS,需将 tls-cluster
设为 yes
。
# tls-cluster yes
3.13 tls-protocols
明确指定要支持的 TLS 版本,包括 TLSv1
、TLSv1.1
、TLSv1.2
、TLSv1.3
(需要 OpenSSL >= 1.1.1),不区分大小写。
可以同时指定多个版本,使用空格分隔,如下仅支持 TLSv1.2 和 TLSv1.3:
# tls-protocols "TLSv1.2 TLSv1.3"
3.14 tls-ciphers
配置允许的 TLS 加密算法
# tls-ciphers DEFAULT:!MEDIUM
3.15 tls-ciphersuites
配置允许的 TLSv1.3 密码学套件
# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256
3.16 tls-prefer-server-ciphers
选择密码学套件时,请使用服务器而不是客户端的首选项。服务器默认遵循客户端的首选项。
# tls-prefer-server-ciphers yes
3.17 tls-session-caching
会话缓存
# tls-session-caching no
3.18 tls-session-cache-size
会话缓存大小
# tls-session-cache-size 5000
3.19 tls-session-cache-timeout
# tls-session-cache-timeout 60
4.0 GENERAL
4.1 daemonize
是否将Redis作为守护进程运行。如果需要的话配置成’yes’
注意配置成守护进程后Redis会将进程号写入文件/var/run/redis.pid
daemonize no
4.2 supervised
进程管理模式,可选值:no、upstart、systemd、auto
supervised auto
4.3 pidfile
进程ID文件目录
pidfile /var/run/redis_6379.pid
4.4 loglevel
日志级别,可用:debug、verbose、notice、warning
loglevel notice
4.5 logfile
日志文件,默认情况会将日志输出到/dev/null
logfile ""
4.6 syslog-enabled
是否输出到系统日志,no=关闭,yes=开启
# syslog-enabled no
4.6 syslog-ident
系统日志的标识符
# syslog-ident redis
4.7 syslog-facility
指定syslog设备,值可以是USER或LOCAL0-LOCAL7
# syslog-facility local0
4.8 crash-memcheck-enabled
# crash-memcheck-enabled no
4.9 databases
databases 16
4.10 always-show-logo
启动时是否显示redis的logo
always-show-logo no
4.11 set-proc-title
设置进程名
set-proc-title yes
4.12 proc-title-template
进程名模板
proc-title-template "{title} {listen-addr} {server-mode}"
5. SNAPSHOTTING
5.1 save
RDB保存快照的规则,写法:save <秒数> <修改数>,默认配置为:900秒内有1个key变更就保存快照。详情
# save <seconds> <changes>
5.2 stop-writes-on-bgsave-error
当异步快照保存时出现异常,停止快照写入
stop-writes-on-bgsave-error yes
5.3 rdbcompression
快照压缩,默认开启,使用LZF压缩算法,如果想减轻CPU负担,可以关闭
rdbcompression yes
5.4 rdbchecksum
快照检查,会增加CPU10%的消耗
rdbchecksum yes
5.5 dbfilename
快照文件名
dbfilename dump.rdb
5.6 rdb-del-sync-files
rdb文件是否删除同步锁
rdb-del-sync-files no
5.7 dir
快照文件目录
dir ./
6. REPLICATION
6.1 replicaof
副本从哪台主机哪个端口复制
# replicaof <masterip> <masterport>
6.2 masterauth
master的密码,如果在requirepass中配置了密码,则需要在这里配置相应的密码
# masteruser <username>
6.3 masteruser
master 用户名
# masteruser <username>
6.4 replica-serve-stale-data
从节点从主节点复制过程中,是否继续响应客户端请求,yes=响应,no=不响应
replica-serve-stale-data yes
6.5 replica-read-only
从节点是否只读,yes=只读,no=可写
replica-read-only yes
6.6 repl-diskless-sync
是否允许diskless同步,即只同步到从节点内存中,不写入磁盘,no=不允许,yes=允许
repl-diskless-sync no
6.7 repl-diskless-sync-delay
无磁盘同步的延迟时间,秒级
repl-diskless-sync-delay 5
6.8 repl-diskless-load
是否启用无磁盘加载
repl-diskless-load disabled
6.9 repl-ping-replica-period
从节点向主节点发送心跳的间隔时间,秒级
# repl-ping-replica-period 10
6.10 repl-timeout
从节点与主节点通信超时时间,秒级
# repl-timeout 60
6.11 repl-disable-tcp-nodelay
实时数据传输,内网带宽不需要修改,如果是跨机房或跨平台同步,则最好设置为yes,并设置延迟时长,避免复制占满带宽
repl-disable-tcp-nodelay no
6.12 repl-backlog-size
复制时的块大小
# repl-backlog-size 1mb
6.13 repl-backlog-ttl
副本过期时间,秒级
# repl-backlog-ttl 3600
6.14 replica-priority
优先级,当主节点长时间未响应,则切换优先级高的从节点
replica-priority 100
6.15 min-replicas-to-write
健康从节点最小数量,小于该数值,master将变为只读 详情
# min-replicas-to-write 3
6.16 min-replicas-max-lag
最大的延迟时间
# min-replicas-max-lag is set to 10.
6.17 replica-announce-ip
以host方式明确该从节点是谁
# replica-announce-ip 5.5.5.5
6.18 replica-announce-port
明确该节点的端口号
# replica-announce-port 1234
7. KEYS TRACKING
7.1 tracking-table-max-keys
客户端缓存值 详情
# tracking-table-max-keys 1000000
8. SECURITY
8.1 acllog-max-len
ACL 日志的最大长度
acllog-max-len 128
8.2 aclfile
如果不在redis.conf中配置user,提供一个独立的(stand-alone)文件来列出用户,格式和redis.conf相同,同时配置,系统不会启动
# aclfile /etc/redis/users.acl
8.3 requirepass
从 Redis 6 开始,“requirepass”只是新 ACL 系统之上的一个兼容层
# requirepass foobared
9. CLIENTS
9.1 maxclients
最大连接数,当连接数超出时,会返回异常,集群中一个节点占用两个连接数(imcoming/outcoming)
# maxclients 10000
10. MEMORY MANAGEMENT
10.1 maxmemory
最大可用内存,当有副本的时候,需要将副本的值设置的比主节点的低
# maxmemory <bytes>
# NOTE FROM DEFULT redis.conf
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
# units are case insensitive so 1GB 1Gb 1gB are all the same.
10.2 maxmemory-policy
内存超出时,清理key的策略,一般使用LRU策略
# maxmemory-policy noeviction
# NOTE
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
10.3 maxmemory-samples
淘汰算法的样本数量,样本越多越准确也越耗CPU,建议值:5
# maxmemory-samples 5
10.4 replica-ignore-maxmemory
从节点是否忽略maxmemory设置
# replica-ignore-maxmemory yes
10.5 active-expire-effort
清理过期key时的CPU消耗占比,值越大,消耗的CPU越多,详情
# active-expire-effort 1
11 . LAZY FREEING
11.1 lazyfree-lazy-eviction
maxmemory超限是否开启bio删除
lazyfree-lazy-eviction no
11.2 lazyfree-lazy-expire
key过期时是否开启bio删除
lazyfree-lazy-expire no
11.3 lazyfree-lazy-server-del
服务端执行del是否自动修改为unlink
lazyfree-lazy-server-del no
11.4 replica-lazy-flush
replica-lazy-flush no
11.5 lazyfree-lazy-user-del
客户端执行del是否自动修改为unlink
lazyfree-lazy-user-flush no
12. THREADED I/O
12.1 io-threads
默认是禁用的,线程数量,建议设置为CPU的百分之70
# io-threads 4
12.2 io-threads-do-reads
当io thread被开启的时候,默认thread是只做写入,该配置设置为yes则开启thread的读操作
# io-threads-do-reads no
13. KERNEL OOM CONTROL
13.1 oom-score-adj
当出现OOM时,开启该参数,则会按照优先级尝试kill进程:从节点子进程 < 从节点主进程 < 主节点子进程 < 主节点主进程
oom-score-adj no
# NOTE
# no: Don't make changes to oom-score-adj (default).
# yes: Alias to "relative" see below.
# absolute: Values in oom-score-adj-values are written as is to the kernel.
# relative: Values are used relative to the initial value of oom_score_adj when
# the server starts and are then clamped to a range of -1000 to 1000.
# Because typically the initial value is 0, they will often match the
# absolute values.
13.2 oom-score-adj-values
按顺序设置主、从、子进程的kill分值,分值越高越可能被杀死
oom-score-adj-values 0 200 800
14. APPEND ONLY MODE
主从复制AOF模式配置,详情
14.1 appendonly
是否开启AOF模式
appendonly no
14.2 appendfilename
追加的文件名
appendfilename "appendonly.aof"
14.3 appendfsync
将数据刷入磁盘的方式,默认每秒刷一次,可选值:no(系统控制刷),always(直接写入磁盘),everysec(每秒刷一次)
appendfsync everysec
# NOTE
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
14.4 no-appendfsync-on-rewrite
主、子进程竞争fsync,参数为no表示当主进程在写时,子进程阻塞。参数为yes时,子进程只将数据写入缓存,不刷新到磁盘
no-appendfsync-on-rewrite no
14.5 auto-aof-rewrite-percentage
触发自动重写的增量百分比
auto-aof-rewrite-percentage 100
14.6 auto-aof-rewrite-min-size
当自动重写时,最小写入的文件大小
auto-aof-rewrite-min-size 64mb
14.7 aof-load-truncated
Redis异常退出时,有不完整的aof文件,在重启Redis时,会根据这个配置来决定是否加载不完整的aof文件,yes=加载,no=不加载,并启动失败
aof-load-truncated yes
14.8 aof-use-rdb-preamble
是否开启混合模式的持久化,开启可提高redis启动时数据加载效率
aof-use-rdb-preamble yes
15. REDIS CLUSTER
15.1 cluster-enabled
是否开启集群模式
# cluster-enabled yes
15.2 cluster-config-file
重写redis.conf
# cluster-config-file nodes-6379.conf
15.3 cluster-node-timeout
节点心跳超时时间,毫秒级
# cluster-node-timeout 15000
15.4 cluster-replica-validity-factor
从节点与主节点失联超过 (cluster-node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period
时间后,从节点不会升级为主节点,如果设置为0,则无论主从失联多久,都会升为主节点
# cluster-replica-validity-factor 10
15.5 cluster-migration-barrier
当还有主节点下有N个节点没有分配,将触发主节点分配
# cluster-migration-barrier 1
15.6 cluster-require-full-coverage
是否需要所有slot都可用时redis才提供服务,yes=是,no=部分slot可用也继续提供服务
# cluster-allow-replica-migration yes
15.7 cluster-replica-no-failover
当主节点故障时,yes为不允许从节点升为主节点,no则允许
# cluster-replica-no-failover no
15.8 cluster-allow-reads-when-down
节点故障或网络分区期间不需要数据的一致性, 只要节点上拥有指定数据就可以读取(默认是no)
# cluster-allow-reads-when-down no
16. SLOW LOG
16.1 slowlog-log-slower-than
慢查询最小时间限制,命令处理超过该时间,即记录一次慢查询,微秒级
slowlog-log-slower-than 10000
16.2 slowlog-max-len
慢查询记录的最大长度,超过长度会被删除,一般不会出现慢查询,所以长度不需要设置太大
slowlog-max-len 128
17 . LATENCY MONITOR
比慢查询更详细的延迟命令的记录,详情
17.1 latency-monitor-threshold
延时命令监控阈值,毫秒级
latency-monitor-threshold 0
18 . EVENT NOTIFICATION
特性官网文档
目前不明白的是,一个Key的操作是否会给所有client发送通知?
如果给所有client发送通知,那么在多链接场景,会消耗大量资源,最好不要启用该特性
18.1 notify-keyspace-events
设置要通知的事件,"AKE"表示所有事件都会发送通知
notify-keyspace-events ""
19 . ADVANCED CONFIG
19.1 hash-max-ziplist-entries
hash的field数量在512个以内且field的value在64以内将进行数据压缩,节约内存
hash-max-ziplist-entries 512
19.2 hash-max-ziplist-value
同上
hash-max-ziplist-value 64
19.3 list-max-ziplist-size
List最大的数量设置,-2=8KB,-1=4KB,-3=16KB,-4=32KB,-5=64KB
list-max-ziplist-size -2
# NOTE
# -5: max size: 64 Kb <-- not recommended for normal workloads
# -4: max size: 32 Kb <-- not recommended
# -3: max size: 16 Kb <-- probably not recommended
# -2: max size: 8 Kb <-- good
# -1: max size: 4 Kb <-- good
19.4 list-compress-depth
压缩的逻辑,0表示不压缩,1=头尾不压缩,中间压缩,2=头尾及相邻1元素不压缩,中间压缩,3=头尾及相邻2个元素不压缩,中间压缩
list-compress-depth 0
# NOTE
# 0: disable all list compression
# 1: depth 1 means "don't start compressing until after 1 node into the list,
# going from either the head or tail"
# So: [head]->node->node->...->node->[tail]
# [head], [tail] will always be uncompressed; inner nodes will compress.
# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
# 2 here means: don't compress head or head->next or tail->prev or tail,
# but compress all nodes between them.
# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
19.5 set-max-intset-entries
超过阈值的set元素,会转为dict,详情
set-max-intset-entries 512
19.6 zset-max-ziplist-entries
意义同hash
zset-max-ziplist-entries 128
19.7 zset-max-ziplist-value
同上
zset-max-ziplist-value 64
19.8 hll-sparse-max-bytes
HyperLogLog有两种矩阵,稀疏矩阵、密集矩阵,输入超过3000字节的会自动转为密集矩阵,详情
hll-sparse-max-bytes 3000
19.9 stream-node-max-bytes
用于设定 Streams 单个节点的最大大小和最多能保存多个个元素
stream-node-max-bytes 4096
19.10 stream-node-max-entries
同上
stream-node-max-entries 100
19.11 activerehashing
开启时,redis将在每100msCPU使用时间内花1ms进行rehash操作;关闭后可能不会及时的释放空闲内存
activerehashing yes
19.12 client-output-buffer-limit
不同的客户端支持不同的参数配置,一般不做用于普通的客户端(比如hgetall之类的命令),只有在大批量数据拉取时,比如Push时,才会通过该限制来保证redis正常。
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
19.13 client-query-buffer-limit
查询限制,只有当有巨大的数据请求时才需要修改该参数
# client-query-buffer-limit 1gb
19.14 proto-max-bulk-len
批量查询桶的大小限制,一般不用修改
# proto-max-bulk-len 512mb
19.15 hz
值越高,处理关闭链接、过期key就越快越精准,同时消耗的CPU也会增加,建议范围是1~500,一般不建议超过100
hz 10
19.16 dynamic-hz
client大增时,会根据hz整数倍调大hz,用于低延迟处理
dynamic-hz yes
19.17 aof-rewrite-incremental-fsync
当子进程进行 AOF 的重写时,如果启用了 aof-rewrite-incremental-fsync, 子进程会每生成 32 MB 数据就进行一次 fsync 操作。 通过这种方式将数据分批提交到硬盘可以避免高延迟峰值。
aof-rewrite-incremental-fsync yes
19.18 lfu-log-factor
当 Redis 保存 RDB 文件时,如果启用了 rdb-save-incremental-fsync 功能, Redis 会每生成 32 MB 数据就执行一次 fsync 操作。 通过这种方式将数据分批提交到硬盘可以避免高延迟峰值。
rdb-save-incremental-fsync yes
19.19 lfu-decay-time
调整LFU策略的计数器对数因子
# lfu-log-factor 10
19.20 replica-announce-port
调整LFU策略的计数器衰退时间
# lfu-decay-time 1