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-filetls-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 版本,包括 TLSv1TLSv1.1TLSv1.2TLSv1.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

启动时是否显示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