二、Redis 配置文件详解(redis.conf)

一、前言概述

本内容分模块讲解 redis.config 配置项的内容模块以及作用,具体原理涉及到详细的内容会在对应的源码分析部分讲解。

二、INCLUDES 模块

2.1、INCLUDES 介绍

在此处我们可以包含一个或多个配置文件。如果你具有可用所有 Redis 服务器的标准模板,但还需要自定义一些每台服务器设置,则此功能很有用。

这一个选项将不会被 admin 或 Redis Sentinel 命令中 CONF REWRITE 重写。

由于Redis 始终水用最后处理的行最为配置指令的值。因此最好include 放在此文件的开头,以此来避免运行时覆盖配置更改。

如果你想要你引入的配置文件不被原有配置所干扰,可以放在最后一行。

2.2、INCLUDES 配置项写法

include /path/to/local.conf
include /path/to/other.conf
include /path/to/fragments/*.conf

三、NETWORK 模块

3.1、NETWORK 模块介绍

此模块配置,就是用来配置 Redis 的网络,比如说 绑定 ip,监听接口,设置是否使用保护模式,设置 tcp的backlog参数,超时时间等。

3.2、bind 配置项

bind 配置项指定 Redis 赴俄武器监听等IP地址(可以是一个或多个 IP 地址)。如果没有设置该选项,那么所有的网络接口都可以访问 redis ,如果设置 bind 项目,那么只有 bind 项内的网络接口可以访问,有点类似 IP 白名单的意思。

如果 Redis 不设置 bind 向所有网络地址开放,这种做法比较危险,所以默认情况设置

bind 127.0.0.1 -::1

如果你确实需要向外暴露,那么就需要注释所有的 bind 设置。

3.3、bind-source-addr 配置项

在默认情况下,出站连接(从备到主,从哨兵到实例,集群总线)不绑定到一个特定的本地地址,在大多数情况下,这意味着操作系统将根据路由和连接出去的接口来处理。

使用 bind-source-addr 可以配置一个特定的地址来绑定,这也会影响连接的路由。

bind-source-addr 10.0.0.1

3.4、protected-mode 配置项

保护模式是一个安全防护层,以避免留在互联网上的 Redis 实例被访问和利用。

当保护模式开启并且默认用户没有密码时,Redis 服务器只接受来之 IPv4 地址(127.0.0.1)、IPv6 地址(::1) 或 Unix 套接字。

默认情况下,保护模式是启用的,只有当你想让其他主机的客户端连接到 Redis。只有当你想让其他主机的客户端连接到 Redis 时,你才需要禁用它,即使没有配置权限认证。

Redis 使用默认的硬化安全配置指令来减少无辜用户的攻击面。因此一些敏感配置指令不可被改变,一些有潜在危险的命令也会被组织。

比如说 控制Redis 写入文件的配置(dir、dbfilenmae 指令),以及通常在运行期间不被修改的配置指令,通过其不可变来保护。

可以增加 Redis 攻击面的命令,以及通常不被用户调用的命令,在默认起ing看下是被阻止的。

通过将下面列出的每个配置设置为这些值中的任何一个,这些都可以暴露给所有的连接,或者只暴露给本地的连接

  • no:阻止任何连接(保护不可改变)
  • yes:允许任何连接(无保护)
  • local:只允许本地连接,源自于 IPv4 地址(127.0.0.1)、IPv6 地址(::1)或 Unix 域套接字。
# enable-protected-configs no
# enable-debug-command no
# enable-module-command no

3.5、port 配置

配置指定端口的 连接,默认是 6379,如果指定端口为0,Redis 将不在 TCP 套接字上监听。

port 6379

3.6、tcp 配置

tcp-backlog 设置监听积压,在高并发以避免缓慢的客户端连接问题。注意:Linux 内核会默默地将其截断为 /proc/sys/net/core/somaxconn 的值,所以要确保同时提高 somaxconn 和 tcp_max_syn_backlog 的值,以获得预期的效果。

tcp-backlog 511

3.7、Unix socket 配置项

监听 Unix 套接字的路径,该套接字用于监听用于监听进入的连接。没有默认值,所以 Redis 在没有指定时不会 监听 Unix 套接字。

unixsocket /run/redis.sock
unixsocketperm 700 # 指定sock文件的权限

3.8、timeout 配置

设置超时时间,可以决定一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭。

timeout 0

3.9 TCP 心跳检测

对访问客户端的一种心跳检测,每隔 n 秒检测一次。如果设置为 0 ,则不会进行 keepalive 检测,建议设置成 60

tcp-keepalive 300

四、TLS/SSL 模块

4.1、TLS/SSL 模块

该模块是在 Redis 6.X 版本 以上开始支持,如果需要支持 TLS/SSL 模块,则需要在编译的时候添加对应的编译参数,并且需要安装OpenSSL开发库(例如:Debian/Ubuntu上的libssl-dev)。

make BUILD_TLS=yes

Redis 的源码中为我们提供了 证书生成工具。 /utils/gen-test-certs.sh,生成的目录在 tests/tls 目录(要使用TLS运行 Redis 测试套件,需要TCL的TLSd 支持,即 Debian 的tcl-tls 软件包)。

4.2、tls-port 配置项

默认情况下,TLS 配置是禁用的。 我们需要配置 tls-port 选项去开启 TLS的监听端口。

port 0 # 禁用非 TLS 端口
tls-port 6379

4.3、X.509 证书配置项

默认情况下,Redis 使用 双向 TLS 并要求客户端使用有效证书进行身份验证(根据 ca-cert-file 或 ca-cert-dir 指定的受信任根CA证书进行身份验证)

# tls-cert-file redis.crt
# tls-key-file redis.key
# tls-key-file-pass secret
# tls-client-cert-file client.crt
# tls-client-key-file-pass secret

五、GENERAL 模块

5.1、daemonize 配置项

Redis.config 配置文件中的 daemonize 守护线程,默认是NO,用来指定Redis 是否要用守护线程的方式启动。

  • yes:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
  • no: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。

5.2、supervised 配置项

supervised 表示是否使用 upstart 或者是 systemd 这两种守护进程的管理程序来管理 Redis。

  • no:没有监督互动
  • upstart:通过将 redis 置于 SIGSTOP 模式来启动信号
  • systemd: signal systemd 将 READY =1 写入 $ NOTIFY_SOCKET
  • auto:检测 upstart 或 systemd 方法基于 UPSTART_JOB 或 NOTIFY_SOCKET 环境变量

5.3、pidfile 配置项

配置 PID 文件路径,当 Redis 作为守护进程运行的时候,它会把 pid 默认写到指定文件中。Windows 不支持此配置。

5.4、loglevel 配置项

loglevel 定义日志级别,默认值为 notice,有四种取值

  • debug:记录大量日志信息,使用开发、测试阶段
  • verbose:较多日志信息
  • notice:适量日志信息,使用生产环境
  • warning:仅有部分重要、关键信息才会被记录

5.5、logfile 配置项

log日志文件地址,默认打印在命令行终端的窗口上

5.6、syslog-enabled 配置项

如果想要日志记录到系统日志,就把此项目设置为yes。

5.7、syslog-ident 配置项

设置系统日志的id。

5.8、syslog-facility 配置项

指定系统日志的,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值

5.9、crash-log-enabled 配置项

禁用/启用内置日志

5.10、crash-memcheck-enabled 配置项

5.10、databases 配置项

设置数据库的数目。默认值是 16,也就是说默认Redis有16个数据库。默认使用数据库是DB 0 ,可以在每个连接上使用select 命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。

5.11、always-show-logo 配置项

5.12、set-proc-title 配置项

5.13、proc-title-template 配置项

六、SNAPSHOTTING 模块

6.1、save 配置项

用来配置触发 Redis的持久化条件

  • save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
  • save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
  • save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存

如果不想启用持久化功能,只需要设置成 save “” 即可。

6.2、stop-writes-on-bgsave-error 配置项

默认值是:yes。当启用了 RDB 且最后一次后台保存数据失败, Redis 是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意的灾难发生了。如果 Redis 重启了,那么又可以 重新开始接收数据了。

6.3、rdbcompression 配置项

默认yes。对于存储到硬盘中的快照,可以设置是否进行压缩存储。若是,Redis采用LZF算法进行压缩。若你不想消耗CPU来进行压缩,可设置关闭此功能,但存储的快照数据会比较大。

6.4、rdbchecksum 配置项

默认yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能

6.5、sanitize-dump-payload 配置项

6.6、dbfilename 配置项

设置快照的文件名,默认是 dump.rdb

6.7、rdb-del-sync-files 配置项

6.8、dir 配置项

设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。

七、REPLICATION

7.1、replicaof

主从复制,使用 slaveof 来让一个 redis 实例成为另一个reids 实例的副本,默认关闭 。注意这个只需要在 从机上配置。

7.2、masterauth

如果 master 需要密码认证,就在这里设置,默认不设置。

7.3、masteruser

7.4、replica-serve-stale-data

默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:

  • yes:slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候
  • no:在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 “SYNC with master in progress” 的错误。

7.5、replica-read-only

默认值为yes。即Slave是否为只读Redis。配置Redis的Slave实例是否接受写操作。

7.6、repl-diskless-sync

主从数据复制是否使用无硬盘复制功能。默认值为no。

7.7、repl-diskless-sync-delay

延迟时间以秒为单位,默认为5秒。当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。

7.8、repl-diskless-sync-max-replicas

7.9、repl-diskless-load

7.10、repl-ping-replica-period

从站redis会周期性的向主站redis发出PING包,你可以通过repl_ping_slave_period指令来控制其周期,默认是10秒。

7.11、repl-timeout

设置备份的超时时间。
-从从站的角度,同步期间的批量传输的I/O
从站角度认为的主站超时(数据,ping)
主站角度认为的从站超时(REPLCONF ACK pings)

确认这些值比定义的repl-ping-slave-period要大,否则每次主站和从站之间通信低速时都会被检测为超时

7.12、repl-disable-tcp-nodelay

默认值为no,同步之后是否禁用从站上的TCP_NODELAY。如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。 Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。

7.13、 repl-backlog-size

设置备份的工作储备大小。默认1mb.

  • 工作储备是一个缓冲区,当从站断开一段时间的情况时,它替从站接受数据,因此当从站重连时,通常不需要完全备份,只需要一个部分同步就可以,即把从站断开时错过的一部分数据接收。
  • 工作储备越大,从站可以断开并稍后执行部分同步的断开时间就越长。只要有一个从站连接,就会立刻分配一个工作储备。

7.14、repl-backlog-ttl

主站有一段时间没有与从站连接,对应的工作储备就会自动释放。这个选项用于配置释放前等待的秒数,秒数从断开的那一刻开始计算,值为0表示不释放。

7.15、replica-priority

从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站。

低优先级的从站被认为更适合于提升,因此如果有三个从站优先级分别是10、 100、25,sentinel会选择优先级为10的从站,因为它的优先级最低。 然而优先级值为0的从站不能执行主站的角色,因此优先级为0的从站永远不会被redis sentinel提升。 默认优先级是100。

7.16、 propagation-error-behavior

7.17、replica-ignore-disk-write-errors

7.18、replica-announced

7.19、min-replicas-to-write

7.20、min-replicas-max-lag

7.21、replica-announce-ip

7.22、replica-announce-port

八、KEYS TRACKING 模块

九、SECURITY 模块

9.1、requirepass

设置连接 redis 连接密码

9.2、rename-command

将命令重命名,为了安全考虑,可以将某些重要的、危险的命令重命名。当你把某个命令重命名成空字符串的时候就等于取消了这个命令。
例如一些危险命令

  • flushdb(清空数据库)、flushall(清空所有记录)、config(客户端连接后可配置服务器)
  • keys(客户端连接后可查看所有存在的键)

十、CLIENTS 模块

十一、MEMORY MANAGEMENT 模块

十二、LAZY FREEING 模块

十三、KERNEL OOM CONTROL 模块

与 linux 的 OOM 机制相关

十四、KERNEL transparent hugepage CONTROL 模块

THP控制,是 linux 中的一种机制,其实也是一种内存相关的优化策略。

十五、 APPEND ONLY MODE

十六、SHUTDOWN 模块

十七、REDIS CLUSTER 模块

十八、SLOW LOG 模块

十九、LATENCY MONITOR 模块

二十、LATENCY TRACKING 模块

二十一、EVENT NOTIFICATION 模块

事件通知,该功能是让客户端通过发布/订阅给定的频道或模式来获取数据库中键的变化,以及数据库命令的执行情况,它的参数比较多,包括K键空间通知、E键事件通知、Set 命令等等。

二十二、ADVANCED CONFIG 模块

高级配置,这一部分是底层数据结构优化的配置。

二十三、ACTIVE DEFRAGMENTATION 模块

活动碎片整理,其实就是内存碎片的整理。该部分主要是配置是否 让Redis 进行内存整理压缩,针对内存中数据的小分配和取消分配之间的剩余空间,从而让内存的利用更有效率。

以及 CPU 绑定

你可能感兴趣的:(跟小嘉学习Redis源码分析,redis,数据库,缓存)