一、系统配置
1.1、ulimit
对Linux操作系统来说,每一个Redis客户端连接,都会消耗一个文件描述符,系统默认的open files是1024,而Redis默认配置“maxclients”允许最大10000个客户端连接,在Redis内部最多会使用32个文件句柄,所以Redis建议将open files的值设置为10032个:
# 临时设置:
# ulimit -Sn 10032
1.2、TCP backlog
TCP backlog是已连接但未进行accept处理的SOCKET队列大小。Redis的默认值是511,而Linux系统的默认值只有128:
# 临时修改:
# echo 511 > /proc/sys/net/core/somaxconn
# 永久修改:
# echo "net.core.somaxconn = 511" >> /etc/sysctl.conf
# sysctl -p
1.3、overcommit_memory
overcommit_memory是系统的内存分配策略,默认值是0,即在有足够的可用内存时,内存申请通过,否则申请失败。这在低可用内存环境下可能导致BGSAVE
或BGREWRITEAOF
失败,所以Redis建议将该值设置为1,即允许超量使用内存直到用完为止:
# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
# sysctl -p
1.4、swappiness
当物理内存不足时,可以临时使用由硬盘提供的swap分区。对于高吞吐、高并发的Redis来说,磁盘IO将会成为系统瓶颈,所以将swappiness设置为0,即使OOM killer也不使用swap:
# 临时设置:
# echo 0 > /proc/sys/vm/swappiness
# 永久设置:
# echo "vm.swappiness = 0" >> /etc/sysctl.conf
# sysctl -p
1.5、THP
为了给需要获得大量内存的应用程序快速分配内存,Linux内核增加了THP(大页内存)特性,支持2MB大页内存分配。这将会导致Redis重写期间消耗更多内存,Redis建议禁用此特性:
# 临时设置:
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
二、Redis配置项
2.1、通用配置
配置项 | 说明 | 默认值 | 可选值 |
---|
bind | Redis运行绑定的地址 | 127.0.0.1 | IP地址 |
port | Redis监听的TCP端口号。设置为0时,不监听TCP端口 | 6379 | 0-65535 |
unixsocket | 监听的unix套接字 | 空 | 自定义的套接字文件 |
unixsocketperm | 套接字文件的权限 | 700 | Linux文件系统可用权限 |
tcp-backlog | 等待处理的连接队列大小 | 511 | 整数值 |
daemonize | 是否以守护进程形式在后台运行Redis | no | yes/no |
pidfile | Redis运行时进程ID文件 | /var/run/redis_6379.pid | 自定义的pid文件 |
loglevel | 日志级别 | notice | debug/verbose/notice/warning |
logfile | 日志文件名 | 空,即输出到/dev/null | 自定义的日志文件名和路径 |
databases | 可用的数据库数目 | 16 | 整数值 |
dir | 工作目录,RDB、AOF、日志文件默认放在该目录下 | ./ | 自定义的目录 |
2.2、RDB相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
save | RDB触发条件 | save 900 1/save 300 10/save 60 10000 | 900秒内有一次写入,不配置将不触发 |
stop-writes-on-bgsave-error | bgsave过程中发生错误,Redis是否停止接收写指令 | yes | yes/no |
rdbcompression | 是否对RDB文件启用压缩 | yes | yes/no |
rdbchecksum | 是否对RDB文件进行校验 | yes | yes/no |
dbfilename | RDB文件名称,保存在配置项“dir”指定的目录下 | dump.rdb | 建议命名格式dump-{port}.rdb |
2.3、AOF相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
appendonly | 是否启用AOF持久化 | no | yes/no |
appendfilename | AOF持久化的文件名,保存在配置项“dir”指定的目录下 | appendonly.aof | 建议命名为:appendonly-{port}.aof |
appendfsync | 数据持久化策略 | everysec,每秒同步一次 | always(每次有写指令都同步)/everysec/no(由操作系统决定) |
no-appendfsync-on-rewrite | 在AOF重写时,不做数据持久化操作 | no | yes/no |
auto-aof-rewrite-percentage | 当前AOF文件与上次重写后AOF文件大小的比值超过100时,触发AOF重写 | 100 | 整数值 |
auto-aof-rewrite-min-size | 当前AOF文件超过指定大小时,触发AOF重写 | 64mb | 字节数 |
aof-load-truncated | Redis启动时,忽略AOF文件不完整的情况 | yes | yes/no |
aof-use-rdb-preamble | 在AOF重写时,是否使用RDB文件以加快重写速度 | yes | yes/no |
2.4、内存相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
maxmemory | Redis最大可用内存 | 0,不限制 | 字节数 |
maxmemory-policy | 内存不够时,数据的删除策略 | noeviction,不删除数据 | volatile-lru/allkeys-lru/volatile-lfu/allkeys-lfu/volatile-random/allkeys-random/volatile-ttl/noeviction |
maxmemory-samples | LRU采样数 | 5 | 整数值 |
replica-ignore-maxmemory | Redis5版本以后,主从复制模式中,从节点是否忽略“maxmemory”最大内存限制 | yes | yes/no |
2.5、slowlog相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
slowlog-log-slower-than | 慢查询的时间阈值 | 10000,单位微秒 | 整数值 |
slowlog-max-len | 内存中记录慢查询的队列长度 | 128 | 整数值 |
2.6、主从复制相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
replicaof | 指定当前节点作为哪个节点的从节点 | 空 | replicaof [ip] [port] |
masterauth | 主节点的验证密码 | 空 | 明文密码 |
replica-serve-stale-data | 从节点与主节点连接中断后,从节点是否继续接收客户端请求 | yes | yes/no |
replica-read-only | 从节点是否为只读模式。在集群模式下,从节点默认读写都不可用,需要手动开启只读 | yes | yes/no |
repl-ping-replica-period | 主节点向从节点发送ping消息,判断从节点是否存活的时间间隔,单位是秒 | 10 | 整数值 |
repl-timeout | 主从复制超时时间,单位是秒 | 60 | 整数值 |
repl-disable-tcp-nodelay | 主从复制时,是否禁用TCP NODELAY。不禁用时,主节点的数据会立即发送给从节点;禁用时,主节点会将小的TCP包合并再发送给从节点,以节省带宽 | no | yes/no |
repl-backlog-size | 复制积压缓冲区大小 | 1mb | 字节数 |
repl-backlog-ttl | 主节点在没有从节点时,释放复制积压缓冲区的时间,单位秒。设置为0时,将永不释放 | 3600 | 整数值 |
replica-priority | 从节点的优先级。用在哨兵模式下的从节点选举 | 100 | 整数值 |
repl-diskless-sync | 是否开启无盘复制 | no | yes/no |
repl-diskless-sync-delay | 无盘复制时,RDB操作的延迟时间,单位是秒 | 5 | 整数值 |
min-replicas-to-write | | 0 | 整数值 |
min-replicas-max-lag | 当主节点发现从节点小于“min-replicas-to-write”个,并且延迟小于10秒时,停止写入操作 | 10 | 整数值 |
2.7、客户端相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
timout | 断开与客户端连接的空闲时间,单位是秒 | 0(永不断开) | 整数值 |
tcp-keepalive | 发送TCP ACK进行心跳检测的周期,单位是秒 | 300 | 整数值 |
maxclients | 客户端连接的最大数量 | 10000 | 整数值 |
2.8、安全相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
protected-mode | 当没有通过“bind”绑定地址,并且没有通过“requirepass”设置密码时,仅允许本地登录 | yes | yes/no |
requirepass | 客户端连接时的验证密码 | 空 | 明文密码 |
rename-command | 将关键命令重命名 | 空 | rename-command CONFIG “”:将禁用CONFIG 命令 |
2.9、集群相关配置
配置项 | 说明 | 默认值 | 可选值 |
---|
cluster-enabled | 是否在该Redis实例上启用集群功能 | 空 | yes/no |
cluster-config-file | 集群配置文件的名称,在启用集群功能时自动生成,不要手动修改它 | nodes-6379.conf | |
cluster-node-timeout | 集群节点不可用的最大时间,单位是毫秒。对于一个主节点,如果超过该时间不可用,将被从节点代替 | 15000 | 整数值 |
cluster-slave-validity-factor | 从节点有效性判断因子。如果设置为0,从节点在任何时候都可以参与故障转移;如果设置为正整数,例如设置为10,假如cluster-node-timeout为5秒,则从节点与主节点失联时间超过50秒时,该节点不参与故障转移 | 10 | 整数值 |
cluster-migration-barrier | 主从节点切换需要的最小从节点个数 | 1 | 整数值 |
cluster-require-full-coverage | 如果设置为“yes”(默认值),在槽没有被完全分配时,集群将不接收写入请求 | yes | yes/no |
cluster-allow-reads-when-down | 如果设置为“no”(默认值),当集群中节点被下线或无法连接到法定主节点时将不会接收任何请求 | no | yes/no |