1、前言:

本文档是对 Redis 6.0.16版的 redis.conf的注释说明。
Redis: 6.0.16
注意:为了读取配置文件,Redis必须以配置文件路径作为第一个参数进行启动:

1
./redis-server /path/to/redis.conf

关于配置文件中单位的注意事项:当需要设置内存大小的时候,可按照惯例指定形式,如:1K、5GB、4M以此类推:

1
2
3
4
5
6
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

单位不区分大小写,因此 1G 1GB 1Gb 1gB都是一样的。

2、引用外部配置

Redis 可以引用一个或者多个外部配置文件。
当搭建多个Redis 实例的时候,如果所有的Redis都有一部分通用的配置,且每个实例又有个性化的配置时,将该通用部分定义为一个外部配置文件,然后使用include选项来引入会非常方便。

1
2
include /path/to/local.conf
include /path/to/other.conf

注意:include选项不会被admin或者Redis Sentinel中的CONFIG REWRITE命令重写。
对于同一个配置选项,Redis 始终以最后一行正确配置为准,因此最好将include 放在当前配置文件的开始,以避免运行时覆盖当前配置。

当然,如果要使用include所在文件的配置覆盖当前同名选项,则应将include 放在当前配置文件的最后。

3、模块配置

Redis 4.0 开始加入自定义外部模块,外部模块可以实现新的Redis命令、数据结构等。
通过多个loadmodule选项配置可以让Redis在启动时加载多个模块,如果Redis无法加载指定的模块,则启动会被终止。

1
2
loadmodule /path/to/my_module.so
loadmodule /path/to/other_module.so

4、网络配置

bind 绑定网络接口

默认情况下,如果未指定bind配置选项,则Redis将侦听所在服务器的所有可用网络接口的连接。
而通过bind选项可以使得Redis仅侦听一个或者多个指定的网络接口,依次限制Redis只侦听一个或者多个指定的IP地址,并且每一个IP地址通过增加‘-’前缀,指定在其失效时直接忽略,而不影响Redis继续启动操作。
不可用仅仅是与任何网络接口不对应的IP地址。如果IP地址已使用,则启动失败;如果是通讯协议不支,则忽略跳过。

比如:

1
2
3
4
# Examples:
bind 192.168.1.100 10.0.0.1 # 监听两个IP V4地址
bind 127.0.0.1 ::1 # 监听IPV4和IPV6回路地址
bind * -::* # 类似默认,监听所有有效的网络接口

告警
如果运行redis服务器直接暴露到 Internet,则绑定任何网络接口都是非常危险的,这会将 Redis 实例暴露给 Intenet 的每个人。因此,默认情况下,我们取消注释以下绑定指令,强制 Redis 仅侦听 IPv4 和 IPv6 环回地址。 这意味着 Redis 将只能接受来自运行它的同一主机的客户端连接。
如果确定需要监听所有的接口,只需要把这配置注释即可:

1
bind 127.0.0.1 -::1

protected-mode 保护模式

保护模式是 Redis 安全保护的一层,用以避免暴露在 Internet 的 Redis 实例被访问和利用。
当开启保护模式时,如果:

  • 1、服务器没有通过bind指令显示绑定一组IP地址; 且
  • 2、没有配置密码。
    那么服务器只接受来自 IPv4 和 IPv6 的环回地址 127.0.0.1::1 以及Unix域套接字的客户端连接。

告警
保护模式默认情况下是开启的(yes),只有确定希望没有使用bind绑定网络端口且未配置身份验证的情况下,其他主机的客户端仍要连接到 Redis,才应该禁用保护模式(no)

1
protected-mode yes

port 端口号

接收指定端口号的连接,Redis 默认端口号是:6379
该端口号如果设置为0,则表示Redis取消监听 TCP Socket。

1
port 6379

tcp-backing TCP建立连接队列大小

该选项用于设置 TCP 连接中已完成队列的最大长度。在高并发场景下,可以增大该值以提高客户端连接速度。
注意,该选项受到 Linux 内核的限制,需要同时配置内核参数 net.core.somaxconnnet.ipv4.tcp_max_syn_backlog 以达到希望的效果。

1
tcp-backlog 511

补充信息

tcp-backlog 是已建立好的连接队列大小,即服务端接收到 ACK 完成三次握手后,状态为 ESTABLISHED 的连接队列(accept queue)。
Redis 会取该选项和 Linux 内核参数 net.core.somaxconn 二者中的较小值。
TCP 连接建立过程中,服务端接收到 SYN 后会将连接加入未完成队列(syn queue),当服务端最终收到 ACK 后会将连接转换到 accept queue。
syn queue 的大小受 Linux 内核参数 net.ipv4.tcp_max_syn_backlog 控制;accept queue 的大小受 Linux 内核参数 net.core.somaxconn 控制。
如果 somaxconn 大而 tcp_max_syn_backlog 小,那么可能 syn queue 中没有足够的连接移动到 accept queue,accept queue 永远都不会满;反之如果 tcp_max_syn_backlog 大而 somaxconn 小,那么可能 syn queue 中会堆积等待建立的连接。
因此无论只调 somaxconn 还是 tcp_max_syn_backlog 可能都不起作用,需要将同时调整两个参数。
注:从 Linux 内核版本 4.3 开始,用 net.core.somaxconn 来同时表示 syn queue 和 accept queue 的大小,因此只需要配置这一个参数即可。

Unix Socket 侦听Unix socket

指定用于侦听传入连接的 Unix socket 路径。
没有默认值,因此若未指定该选项,则 Redis 不会侦听 Unux Socket。

1
2
# unixsocket /tmp/redis.sock
# unixsocketperm 700

timeout 连接空闲超时

客户端空间 N 秒后关闭连接(0表示禁止该机制)

1
2
timeout 0

tcp-keepalive TCP连接保活

如果该选项配置不为 0,则 Redis 将周期性使用 SO_KEEPALIVE 向 客户端发送 TCP ACK 包,有两个用途:

  • 对端状态探测。
  • 保持网络连接的活动状态。

在 Linux 上,指定的值(以秒为单位)是用于发送 ACK 的时间间隔。注意,关闭连接需要两倍的时间。在其它内核上,期限取决于内核配置。

该选项的合理值为 300 秒,这是从 Redis 3.2.1 开始的新默认值。

1
tcp-keepalive 300

5、TLS/SSL配置

略,后续单独文章列出。

6、常规配置

daemonize 守护进程配置

默认情况下, Redis不以守护进程方式启动(no),

1
daemonize no

可以修改该值为yes, 让Redis 以守护进程(daemon)方式启动,这时候 Redis 会生成一个进程ID文件/var/run/redis.pid

supervised Supervisor管理进程配置

pidfile 进程ID文件路径配置

loglevel 日志级别配置

logfile 日志文件配置

syslog-enabled syslog开启配置

syslog-facility syslog设施配置

databases 数据库数量配置

always-show-logo 输出Redis logo配置

7、快照配置

8、复制配置

9、KEY TRACKING

10、安全配置

11、客户端配置

12、LAZY FREEING配置

13、慢日志配置

14、LATENCY MONITOR配置

15、事件通知配置

16、GOPHER服务配置

17、高级配置

18、ACTIVE DEFRAGMENTATION