[原创]Redis 6 参数说明

Redis 6 参数说明(6.2.6)

[ includes ]

include

Redis的配置文件redis.conf中的include参数可以用来指定其他的配置文件。

include参数的值指定为一个文件夹时,Redis会载入这个文件夹下的所有以.conf为后缀的文件。

示例:

include /path/to/redis.conf.d/

include参数的值指定为一个文件时,Redis会载入这个文件的配置。

示例:

include /path/to/other_redis.conf

通过使用include参数,可以将Redis的配置文件分割为多个文件,方便管理和维护。可以根据需要将相关的配置放在不同的文件中,例如可以将持久化相关的配置放在一个文件中,将高可用相关的配置放在另一个文件中。

[ modules ]

loadmodule

在Redis中,LOADMODULE命令用于加载一个动态链接库作为一个Redis模块。

LOADMODULE命令的语法如下:

LOADMODULE <module_path> [config_parameter=value ...]

其中,<module_path>是模块文件的路径。config_parameter=value是可选的配置参数,用于给模块传递额外的配置信息。

例如,要加载一个名为mymodule.so的模块,并传递一个配置参数param=value,可以执行以下命令:

LOADMODULE /path/to/mymodule.so param=value

加载模块时,还可以使用一些全局的配置参数。以下是一些常用的全局配置参数:

  • timeout:模块加载超时时间,单位为毫秒。
  • expiretime:模块的过期时间,单位为秒。
  • rate:模块的执行速率,单位为每秒执行次数。 可以在模块的文档或配置文件中查看更多可用的配置参数和其含义。

需要注意的是,LOADMODULE命令只能在Redis的配置文件或启动命令中使用,不能在Redis客户端中直接执行。

[ network ]

unixsocket

redis unixsocket参数用于设置 Redis 服务器监听的 Unix 域套接字。Unix 域套接字是一种用于进程间通信的传输协议。

Unix 域套接字参数的格式如下:

unixsocket /path/to/socket.sock

其中,/path/to/socket.sock 表示 Unix 域套接字文件的路径。

这个参数用于替代 bind 参数来设置服务器监听的地址和端口。如果设置了 unixsocket 参数,那么 Redis 服务器将只监听 Unix 域套接字。

默认情况下,Redis 不会启用 Unix 域套接字。如果需要使用该功能,可以通过编辑 Redis 的配置文件(redis.conf)来设置 unixsocket 参数。

设置此参数后,可以使用与其他网络相关的参数(如 portbindtcp-keepalive 等)一样的方式来配置服务器。

bind

Redis 6中的bind参数用于指定Redis服务器监听的网络接口。可以通过设置bind参数,限制Redis服务器只能监听指定的网络接口,这样可以增加Redis服务器的安全性。

bind参数的语法如下:

bind <ip-address>

其中,<ip-address>表示要监听的网络接口。可以使用IP地址、主机名、IPv6地址。

例如,要让Redis服务器只监听本地回环地址(127.0.0.1),可以将bind参数设置为:

bind 127.0.0.1

如果要让Redis服务器监听所有可用的网络接口,可以将bind参数设置为:

bind 0.0.0.0

注意,如果Redis服务器需要通过网络进行访问,那么bind参数必须设置为一个非回环地址。

protected-mode

Redis 6中的protected-mode参数用于控制是否允许远程客户端连接到Redis服务器。它可以设置为以下两个值之一:

  1. yes:这是默认值。当protected-mode设置为yes时,只有在服务器配置文件(redis.conf)或通过CONFIG SET命令显式设置了requirepass参数的情况下,才允许远程客户端连接到Redis。
  2. no:当protected-mode设置为no时,允许任何远程客户端连接到Redis,而无需进行身份验证。这会使Redis服务器无密码保护,因此不建议在生产环境中使用。

要更改protected-mode参数的值,你可以编辑redis.conf文件并将其设置为所需的值,然后重新启动Redis服务器。或者,你可以使用CONFIG SET命令在运行时动态更改它的值。例如,要将protected-mode设置为no,可以执行以下命令:


CONFIG SET protected-mode no

tcp-backlog

在 Redis 6 中,引入了新的 tcp-backlog 参数,它用于设置 Redis 服务器监听连接过程中 TCP backlog 的大小。

TCP backlog 是指操作系统所维护的一个队列,用于存放已经完成三次握手的连接,但服务器尚未通过 accept 函数接受的连接。当一个客户端尝试连接到 Redis 服务器时,其连接请求会先被放入到 TCP backlog 队列中,然后 Redis 服务器通过 accept 函数从队列中取出连接请求并与客户端建立连接。

tcp-backlog 参数的默认值为 Redis 服务器所在操作系统的默认设置。在大多数操作系统中,默认值为128。可以通过修改这个参数的值来提高 Redis 服务器同时接受连接的能力。

要设置 tcp-backlog 参数,可以在 Redis 的配置文件中添加以下配置:

tcp-backlog 511

上述配置将 tcp-backlog 设置为 511。当然,也可以在启动 Redis 服务器时通过命令行参数设置,如:

redis-server --tcp-backlog 511

需要注意的是,在部分操作系统中,tcp-backlog 参数的最大值是有限制的。如果超出了操作系统的限制,Redis 服务器将会使用操作系统允许的最大值。所以在设置 tcp-backlog 参数时,需要注意操作系统的限制。

timeout

在Redis 6中,timeout是一个可选的参数,用于配置与客户端的连接超时时间。

Redis的timeout参数通常在redis.conf配置文件中进行设置。它指定了一个客户端和服务器之间连接的最大空闲时间,超过这个时间没有数据交互,连接将自动关闭。这个参数对于防止长时间空闲连接占用服务器资源是非常有用的。

默认情况下,timeout参数的值是0,表示永远不会超时。如果设置为一个正整数,单位是秒,那么客户端和服务器之间的连接在指定时间内没有数据交互时将会被关闭。

例如,设置timeout参数为60秒:

timeout 60

这将使服务器在连接空闲60秒后自动关闭连接。

需要注意的是,如果设置了一个较小的超时时间,并且Redis服务器是通过网络进行访问的,那么在网络不稳定的情况下,可能会导致连接频繁断开。因此,需要根据实际情况和网络环境来选择合适的超时时间。

tcp-keepalive

在Redis 6中,tcp-keepalive是一个新的配置参数,用于设置Redis服务器和客户端之间TCP连接的keepalive选项。

当启用tcp-keepalive参数时,Redis服务器会在TCP连接空闲一定时间后,发送心跳包给客户端,以确保连接的活跃性。这可以防止由于长时间的连接空闲导致的连接中断或超时问题。

tcp-keepalive参数接受一个整数值,表示空闲连接的时间(以秒为单位),默认值为0,表示禁用该功能。如果设置为正整数N,则表示连接空闲N秒后会发送心跳包。

以下是一个示例配置:

tcp-keepalive 60

上述配置将在连接空闲60秒后发送心跳包。

需要注意的是,tcp-keepalive参数只在Redis服务器侧生效,客户端不需要进行额外的配置。此外,tcp-keepalive参数仅在TCP连接上生效,对于UNIX域套接字连接无效。

值得注意的是,tcp-keepalive参数需要操作系统和网络环境的支持,因此在使用该参数之前,需要确保操作系统和网络环境的配置允许启用keepalive选项。具体的配置方法和支持情况可以参考操作系统和网络设备的文档。

[ TLS/SSL ]

Redis 6版本中引入了TLS/SSL特性,使得客户端与Redis服务器之间的通信可以更安全地进行。以下是Redis 6中的TLS/SSL特性的一些主要方面:

  1. TLS/SSL支持:Redis 6通过OpenSSL库提供对TLS/SSL的支持。这意味着客户端可以使用TLS/SSL协议与Redis服务器进行安全通信。
  2. 证书验证:Redis服务器可以配置为要求客户端提供一个有效的证书,并在握手过程中对其进行验证。这可以防止中间人攻击,确保客户端与服务器之间的通信是经过验证和加密的。
  3. 加密通信:TLS/SSL提供了数据加密的功能,可以确保在客户端和服务器之间传输的数据是经过加密的。这可以防止数据泄露和窃听攻击。
  4. 配置选项:Redis服务器提供了一些配置选项,用于启用和配置TLS/SSL。例如,可以指定要使用的证书和密钥文件,以及所需的TLS/SSL协议版本。

需要注意的是,为了使用TLS/SSL,Redis 6的安装和配置过程可能与以前版本有所不同。必须安装适当的OpenSSL版本并进行正确的配置才能启用TLS/SSL功能。另外,由于TLS/SSL会增加通信的开销,可能会对Redis的性能产生一定的影响。

tls-port

在Redis 6中,引入了一些新的安全功能,其中一个是TLS端口参数(tls-port)。

Redis支持通过TLS(Transport Layer Security)进行安全通信,以加密客户端和服务器之间的数据传输。 这对于保护Redis中的数据和密码非常重要。

tls-port参数用于指定Redis服务器要监听的TLS端口。默认情况下,Redis服务器监听普通的非加密连接,但是可以通过配置tls-port参数来启用TLS连接。

在Redis配置文件中,可以使用以下格式设置tls-port参数:

tls-port <port>

这里,是您要为Redis服务器配置的TLS端口号。例如,要将Redis服务器配置为在6380端口上监听TLS连接,您可以这样设置:

tls-port 6380

设置完毕后,Redis服务器将在指定的TLS端口上启动并监听TLS连接。

请注意,要使用TLS,您还需要生成并配置有效的TLS证书和私钥。配置文件中还有其他与TLS相关的参数,如tls-cert-filetls-key-file,用于指定证书和密钥文件的位置。

使用TLS可以保护Redis中的数据传输,防止数据泄露和未经授权的访问。建议在使用Redis时启用TLS以增强安全性。

tls-cert-file

在 Redis 6 中,tls-cert-file 参数用于指定 Redis 服务器使用的 TLS/SSL 证书文件的路径。

TLS/SSL 是一种用于加密与认证的网络协议,它可以确保客户端与服务器之间的通信安全和私密。使用 TLS/SSL 可以防止数据在传输过程中被窃取或篡改。

通过设置 tls-cert-file 参数,可以告诉 Redis 服务器使用特定的证书文件来启用 TLS/SSL。 参数的具体使用方式如下:

tls-cert-file /path/to/certificate.pem

其中, /path/to/certificate.pem 是 TLS/SSL 证书文件的路径和名称。这个证书文件应该是一个 PEM 编码的文件,包含了服务器的公钥和私钥。

需要注意的是,为了使 Redis 服务器能够成功启用 TLS/SSL,还需要设置其他相关的 TLS/SSL 参数,例如 tls-key-file(指定私钥文件的路径)和 tls-port(指定用于 TLS/SSL 连接的端口号)等。

重要提示:为了保护服务器与客户端之间的通信安全,请确保证书文件的私钥部分是保密的,只有服务器可访问。

tls-key-file

在Redis 6中,参数tls-key-file用于指定Redis服务器使用的私钥文件的路径。私钥文件包含服务器的私钥,用于与客户端建立安全的TLS连接。客户端在建立与Redis服务器的TLS连接时,将使用相应的公钥进行验证。

Redis服务器在启用TLS时,需要同时指定tls-cert-filetls-key-filetls-ca-cert-file参数,其中tls-cert-file用于指定服务器的证书文件路径,tls-ca-cert-file用于指定用于验证客户端证书的CA证书文件路径。

以下是示例配置:

tls-cert-file /path/to/server.crt
tls-key-file /path/to/server.key
tls-ca-cert-file /path/to/ca.crt

请注意,私钥文件必须具有正确的权限和保密性,以确保服务器和客户端之间的通信的安全性。

tls-key-file-pass

在Redis 6中,tls-key-file-pass参数用于指定用于解密私钥文件的密码。当使用TLS加密连接时,私钥文件通常是加密过的,需要密码才能解密。tls-key-file-pass参数允许您在Redis服务器启动时提供该密码。

以下是tls-key-file-pass参数的使用示例:

redis-server --tls-key-file-pass your_password

在上面的示例中,your_password是用于解密私钥文件的密码。通过将该密码提供给tls-key-file-pass参数,Redis服务器将能够成功解密私钥文件,并在启动时建立安全的TLS连接。

请注意您需要提供正确的密码才能解密私钥文件并成功建立TLS连接。如果密码不正确,则会出现错误,并且无法建立TLS连接。

tls-client-cert-file

在Redis 6中,新增了一个用于配置TLS客户端证书文件的参数tls-client-cert-file

tls-client-cert-file参数用来指定Redis客户端使用的TLS证书文件的路径。TLS证书文件通常是以.pem为后缀的文件,包含了客户端证书和私钥。该证书用于认证客户端以确保安全通信。

以下是使用示例:

tls-client-cert-file /path/to/client-certificate.pem

需要注意的是,该参数仅在启用TLS支持时才会起作用。要启用TLS支持,需要配置tls-port参数,并提供服务器端证书和私钥文件。

参考文档:https://redis.io/topics/encryption

tls-client-key-file

在Redis 6中,tls-client-key-file是用于指定Redis作为TLS客户端时使用的客户端私钥文件的参数。

它用于提供Redis客户端身份验证时所需的私钥文件。私钥文件应包含密钥对中的私钥部分,并且必须是RSA或ECDSA类型。

使用tls-client-key-file参数,您需要提供私钥文件的路径。

示例配置如下:

tls-client-key-file /path/to/client_key.pem

请注意,使用TLS时,还需要配置其他TLS相关的参数,如tls-porttls-cert-filetls-key-file等,以确保Redis与TLS协议进行安全通信。

tls-client-key-file-pass

在 Redis 6 中,tls-client-key-file-pass 是一个可选的配置参数,用于设置客户端连接 Redis 时的私钥密码文件路径。当 Redis 作为 TLS 服务器进行配置时,该参数可用于指定客户端私钥密码文件的位置。

以下是 tls-client-key-file-pass 参数的使用示例:

tls-client-key-file-pass /path/to/key_file_pass.txt

在上面的示例中,/path/to/key_file_pass.txt 是客户端私钥密码文件的路径。通过设置该参数,Redis 将读取并使用指定的私钥密码文件来对客户端的连接进行身份验证和加密通信。

请注意,tls-client-key-file-pass 参数需要与其他 TLS 相关参数一起使用,例如 tls-cert-filetls-key-filetls-ca-cert-file 等。这些参数可以一起配置,以便在 Redis 服务器上启用 TLS 安全连接。

有关更多关于 Redis 6 TLS 配置的信息,可以查阅 Redis 官方文档中的 TLS 配置部分:https://redis.io/topics/tls

tls-dh-params-file

在Redis 6中,有一个新的参数叫做tls-dh-params-file,用于指定Diffie-Hellman参数文件的路径。Diffie-Hellman参数用于创建安全的握手密钥。这个参数主要用于配置Redis的TLS/SSL连接。

默认情况下,Redis使用经过硬编码的Diffie-Hellman参数来进行加密握手操作。然而,你也可以通过指定tls-dh-params-file参数来加载自己的Diffie-Hellman参数文件。

当使用自定义Diffie-Hellman参数文件时,你应该先生成该文件。你可以使用openssl命令来生成一个Diffie-Hellman参数文件。以下是一个示例命令:

openssl dhparam -out dhparam.pem 2048

这将生成一个2048位的Diffie-Hellman参数文件,保存为dhparam.pem

然后,你可以在Redis的配置文件中指定tls-dh-params-file参数的值为该文件的路径,例如:

tls-dh-params-file /path/to/dhparam.pem

通过指定这个参数,Redis将使用你提供的Diffie-Hellman参数文件来进行TLS/SSL的握手操作。

请注意,使用自定义的Diffie-Hellman参数文件可能会带来性能方面的影响,因为使用更大的参数长度会增加计算量。

tls-ca-cert-file

在Redis 6中,tls-ca-cert-file是一个可选的配置参数,用于设置TLS证书的CA根证书文件路径。它用于在Redis服务器端验证客户端连接的TLS证书的有效性。以下是关于tls-ca-cert-file参数的详细说明:

  • 参数名称:tls-ca-cert-file
  • 参数类型:字符串
  • 默认值:空字符串(即不启用TLS)
  • 可选值:一个有效的文件路径字符串,指定TLS证书的CA根证书文件路径
  • 适用范围:Redis服务器配置文件

使用示例:

tls-ca-cert-file /path/to/ca-cert.pem

注意事项:

  • 如果启用了TLS,但未设置tls-ca-cert-file参数,则Redis服务器将不会进行客户端证书的验证。
  • 在配置文件中,如果路径包含了空格或特殊字符,需要使用引号将其括起来。
  • 在设置tls-ca-cert-file参数之前,必须先启用TLS(通过设置tls-port参数)。

有关更多关于Redis 6 TLS配置的信息,请参阅Redis官方文档。

tls-ca-cert-dir

在Redis 6中,tls-ca-cert-dir是一个用于配置TLS认证的参数。它指定了一个目录路径,该目录包含用于对客户端进行TLS认证的CA证书。

当Redis服务器在TLS模式下运行时,可以使用tls-ca-cert-dir参数来加载CA证书。Redis将会在指定的目录中查找所有的证书文件,并将它们用于对连接到服务器的客户端进行身份验证。

使用tls-ca-cert-dir参数时,必须确保Redis服务器对指定的目录具有读取权限。

示例配置:

tls-ca-cert-dir /path/to/ca/certificates

上述示例将告诉Redis服务器在/path/to/ca/certificates目录中查找CA证书文件并进行加载。

tls-auth-clients

在 Redis 6.0 中,TLS-Auth-Clients 参数用于指定允许通过 TLS/SSL 加密连接的客户端。指定如何验证客户端证书。可选值有"yes"、"no"和"optional"。

  • 如果设置为yes,则客户端必须提供有效证书才能与服务器建立安全连接。如果客户端未提供有效证书,连接将被拒绝。
  • 如果设置为no,则服务器将不会验证客户端证书,允许任何客户端连接。
  • 如果设置为optional,则服务器将验证客户端证书,但允许没有证书的客户端连接。

注意:在使用tls-auth-clients参数时,还需要配合使用requirepass参数设置Redis密码,以提供基于密码的身份验证。

要启用TLS和相应的参数,可以在Redis配置文件中添加以下行:

tls-port <port_number>
tls-cert-file <path_to_server_cert>
tls-key-file <path_to_server_key>
tls-ca-cert-file <path_to_ca_cert>
tls-auth-clients <yes|no|optional>
requirepass <redis_password>

请注意替换<port_number><path_to_server_cert><path_to_server_key><path_to_ca_cert><redis_password>为实际的值。

更多关于Redis 6的TLS配置信息,可以参考官方文档:https://redis.io/topics/encryption

tls-cluster

在Redis 6中,可以通过TLS启用集群。以下是用于配置Redis 6 TLS集群的一些参数:

  1. cluster-require-full-coverage: 如果设置为yes,在启动时,Redis集群中的所有槽位必须被实例覆盖,否则集群将处于一个在部分槽位上不可用的状态。默认值为yes
  2. cluster-replica-validity-factor: 这个参数用于配置集群中主从节点的有效性因子。在一个Redis集群中,如果一个从节点在指定的时间内(比如说5秒)不能从主节点中接收到数据,那么这个从节点将被认为是无效的,并且会被Redis集群移除。cluster-replica-validity-factor参数就用于设置这个时间因子的倍数,默认值为10。
  3. cluster-replica-no-failover: 如果设置为yes,当主节点出现故障时,Redis集群将不会自动进行主从切换。需要手动将一个从节点提升为主节点。默认值为no
  4. cluster-replica-failover-timeout: 这个参数用于设置主节点故障后,进行主从切换的超时时间。默认值为180000毫秒(3分钟)。
  5. cluster-require-peer-authentication: 如果设置为yes,集群中的节点之间必须使用TLS进行身份验证。默认值为no
  6. cluster-announce-ip: 这个参数用于设置节点广播给其他节点的IP地址。如果未设置,Redis会自动获取本机的IP地址。
  7. cluster-announce-port: 这个参数用于设置节点广播给其他节点的端口号。
  8. cluster-announce-tls-port: 这个参数用于设置节点广播给其他节点的TLS端口号。

这些是用于配置Redis 6 TLS集群的一些参数,可以根据需要进行配置。

tls-protocols

在Redis 6中,tls-protocols参数用于配置Redis与客户端之间使用的TLS(Transport Layer Security)协议版本。TLS是一种加密协议,用于在网络通信中确保数据的保密性和完整性。

tls-protocols参数接受以下值:

  • default:使用Redis默认支持的TLS协议版本。
  • tlsv1.3:强制使用TLS 1.3版本进行通信。
  • tlsv1.2:强制使用TLS 1.2版本进行通信。
  • tlsv1.1:强制使用TLS 1.1版本进行通信。
  • tlsv1:强制使用TLS 1.0版本进行通信。

多个TLS协议版本可以通过逗号进行分隔,例如tls-protocols tlsv1.2,tlsv1.3表示Redis将仅使用TLS 1.2和TLS 1.3进行通信。

示例配置:

tls-protocols tlsv1.2,tlsv1.3

注意,tls-protocols参数只对Redis客户端的连接起作用,不适用于Redis集群的内部通信。此外,请确保在Redis配置文件中启用了TLS,以便支持TLS加密通信。

tls-ciphers

在Redis 6中,tls-ciphers参数用于配置Redis服务器使用的TLS/SSL密码套件。

它允许管理员指定Redis服务器接受的密码套件列表,以便在客户端和服务器之间建立加密连接时使用。

tls-ciphers参数的语法如下:

tls-ciphers cipher1[:cipher2:...]

其中,cipher1[:cipher2:...]是一个以冒号分隔的密码套件列表。

以下是tls-ciphers参数的一些示例用法:

  • tls-ciphers DEFAULT:!MEDIUM表示使用默认的密码套件,但排除掉中级的安全级别套件。
  • tls-ciphers HIGH:+3DES:@STRENGTH表示仅使用高级别的安全套件,并强制使用3DES加密算法,同时按安全级别排序。
  • tls-ciphers TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256表示只使用AES-256-GCM-SHA384AES-128-GCM-SHA256密码套件。

请注意,密码套件的支持和可用性取决于Redis构建时使用的TLS库和操作系统。因此,在配置tls-ciphers参数之前,请确保所选套件与您的构建和操作系统兼容。

更多关于tls-ciphers参数的详细信息,请查阅Redis官方文档。

tls-ciphersuites

在Redis 6中,新增了一个名为tls-ciphersuites的参数,用于指定TLS/SSL连接使用的密码套件。密码套件是一组加密算法和密钥协商协议的集合,它们用于在客户端和服务器之间建立安全的通信通道。

tls-ciphersuites参数的语法如下:

tls-ciphersuites <cipher1> <cipher2> ...

其中,<cipher1> <cipher2> ...是密码套件的名称,多个密码套件名称之间使用空格分隔。Redis 6支持的密码套件名称取决于所使用的TLS库。例如,在OpenSSL中,一些常见的密码套件名称包括AES128-SHAAES256-SHAECDHE-RSA-AES128-GCM-SHA256等。

默认情况下,Redis 6使用的TLS库会排除掉不安全的密码套件。你可以使用tls-ciphersuites参数来显式地指定要使用的密码套件,以便根据你的安全要求进行配置。

以下是一些示例:

tls-ciphersuites AES128-SHA:ECDHE-RSA-AES256-SHA256

这将指定Redis使用AES128-SHAECDHE-RSA-AES256-SHA256这两个密码套件进行TLS连接。

需要注意的是,tls-ciphersuites参数只在启用了TLS的情况下才有效,并且要求Redis使用支持密码套件的TLS库,如OpenSSL。如果Redis未启用TLS或使用的TLS库不支持密码套件,则tls-ciphersuites参数将被忽略。

tls-prefer-server-ciphers

在Redis 6中,tls-prefer-server-ciphers是一个新的参数,它指示Redis服务器在与客户端建立加密连接时是否应该优先选择服务器定义的密码套件。默认情况下,Redis服务器在与客户端协商使用的密码套件时会考虑到客户端的首选项,但在某些情况下,服务器可以通过使用此参数来确保只使用服务器定义的密码套件。

tls-prefer-server-ciphers设置为yes时,Redis服务器将优先选择由服务器配置的密码套件,而不考虑客户端的首选项。这可以提供更强的密码套件的支持和更高的安全性,但也可能导致与某些客户端不兼容。

tls-prefer-server-ciphers设置为no时,Redis服务器将使用客户端首选的密码套件(如果服务器也支持它们)。这是默认的行为,以确保与大多数客户端的兼容性。

在大多数情况下,将tls-prefer-server-ciphers保持为默认值no是安全的和兼容的选择。只有在服务器有特殊的安全需求,且客户端也能支持服务器定义的密码套件时,才需要将其设置为yes

tls-session-caching

redis 6 版本中的 tls-session-caching 参数是用于配置 Redis TLS 会话缓存的选项。

TLS 会话缓存是指在使用 TLS(Transport Layer Security)协议进行加密通信时,可以缓存加密会话以提高通信效率的技术。TLS 会话缓存可以避免在每个加密会话的建立过程中执行复杂的密钥交换和证书验证操作,从而提高加密通信的性能。

在 Redis 6 中,当开启了 TLS 加密功能时,可以使用 tls-session-caching 参数来配置 TLS 会话缓存。该参数有以下几个选项:

  • no: 表示禁用 TLS 会话缓存。
  • server: 表示仅缓存服务器端的 TLS 会话。
  • client: 表示仅缓存客户端的 TLS 会话。
  • both: 表示同时缓存服务器端和客户端的 TLS 会话。 默认情况下,不启用 TLS 会话缓存,即使用 no 参数。 注意,当 Redis 内部使用的是 OpenSSL 库时,才支持启用 TLS 会话缓存。如果 Redis 使用的是其他 TLS 库,那么该参数将被忽略。
  • 使用示例:
redis-server --tls-session-caching=both

以上命令启动了一个 Redis 服务器,并开启了 TLS 会话缓存,同时缓存服务器端和客户端的 TLS 会话。

tls-session-cache-size

在Redis 6中,tls-session-cache-size参数用于配置TLS会话缓存的大小。

默认值为10000,表示最多存储10000个TLS会话。每个会话通常占用几百字节的内存

当Redis作为TLS终止器时,会话缓存用于存储与客户端建立的TLS连接的会话数据,以便提高握手性能。

减小此参数的值可以减少内存使用量,但可能会导致TLS握手延迟增加。增大此参数的值可以提高性能,但会占用更多的内存。可以根据实际情况调整该参数的值。

tls-session-cache-timeout

在Redis 6中,tls-session-cache-timeout参数用于设置TLS会话缓存的超时时间。TLS会话缓存是指Redis和客户端之间建立的TLS会话的缓存,在客户端重新连接时可以重用该会话,以提高连接速度和性能。

默认情况下,该参数的值为 300 秒(5分钟),表示TLS会话缓存将在5分钟后过期。可以通过修改该参数来调整会话缓存的超时时间。

该参数的配置可以在Redis配置文件中进行设置,例如:

tls-session-cache-timeout 600

上述示例中,将会话缓存的超时时间设置为600秒(10分钟)。

需要注意的是,该参数仅在Redis启用TLS(通过配置文件中的tls-port参数开启)时生效。如果未启用TLS,该参数将不起作用。

[ general ]

daemonize

在Redis 6.2中,默认情况下,Redis服务器以守护进程的方式运行,不需要指定daemonize参数。如果您需要在后台运行Redis,只需运行Redis服务器即可。

例如,可以使用以下命令启动Redis服务器并在后台运行:

redis-server

如果您希望让Redis服务器在前台运行,可以使用以下命令:

redis-server --daemonize no

注意:在Redis 6.2中,daemonize参数已被废弃。

supervised

在Redis中,supervised参数用于指定Redis进程是否由操作系统的init系统(如systemd或sysv)来管理。

supervised参数有三个可选值:

  1. no:表示Redis进程不被操作系统的init系统所管理。这通常意味着Redis进程将不受操作系统的控制,并且在Redis进程终止时不会自动重启。
  2. systemd:表示Redis进程由systemd管理。这意味着systemd将负责启动、停止和监控Redis进程,并在Redis进程异常终止时自动重启。
  3. yessysv:表示Redis进程由sysv(System V)init系统管理。这意味着sysv将负责启动、停止和监控Redis进程,并在Redis进程异常终止时自动重启。

默认情况下,supervised参数为no,即Redis进程不由操作系统的init系统管理。如果你希望Redis进程受到init系统的管理,你需要将supervised参数设置为相应的值(systemdsysv)。

pidfile

在Redis 6.2中,pidfile参数用于指定保存Redis主进程的进程ID(PID)的文件路径。

使用方法:

redis-server --pidfile /path/to/pidfile

上述命令将启动Redis服务器并将主进程的PID写入指定的文件路径。

如果未指定pidfile参数,则Redis将不会将PID写入文件中。

注意:在Redis 6.2中,pidfile参数已被弃用。现在,Redis会将主进程的PID直接写入日志文件中的[init] server started行。如果需要找到主进程的PID,你可以通过检查日志文件中的相关行来获取。

loglevel

在Redis 6.2中,loglevel参数用于设置日志的详细程度。

该参数有以下几个可选值:

  1. debug:详细的调试信息,适用于开发和疑难排查。
  2. verbose:更多的日常操作信息,适用于查看Redis的运行情况。
  3. notice:一般的运行信息,适用于日常操作。
  4. warning:警告信息,表示Redis可能遇到了一些问题。
  5. critical:严重错误信息,表示Redis遇到了无法恢复的错误。 可以通过修改Redis配置文件中的loglevel参数来设置日志的详细程度。例如,可以使用以下命令来修改配置文件:
config set loglevel debug

注意,修改日志级别会对Redis的性能产生影响,因为更详细的日志级别会产生更多的日志记录。因此,在生产环境中,应将日志级别设置为适当的级别,以确保合理的性能和日志记录。

logfile

Redis 6.2中的logfile参数用于指定Redis服务器的日志文件路径和文件名。

该参数的语法如下:

logfile /path/to/redis.log
  • /path/to/redis.log 是日志文件的路径和文件名。可以是相对路径或绝对路径。

    默认情况下,Redis服务器在启动时会将日志信息输出到标准输出设备(控制台)。如果指定了logfile参数,则日志信息将会重定向到指定的日志文件中。

    注意事项:

  • 如果指定的日志文件不存在,Redis服务器会自动创建该文件。

  • 如果指定的日志文件已经存在,Redis服务器会将新的日志信息追加到该文件的末尾。

  • 如果没有指定logfile参数,则Redis服务器将不会生成日志文件,日志信息仅输出到控制台。

使用日志文件可以帮助您更方便地查看和分析Redis服务器的运行情况。可以通过查看日志文件来跟踪错误、调试问题以及监控服务器的性能。

syslog-enabled

在Redis 6中,syslog-enabled是一个用于启用或禁用Redis服务器向syslog发送日志消息的参数。

默认情况下,syslog-enabled参数被设置为no,表示禁用syslog功能。如果你希望Redis服务器将日志消息发送到syslog,你需要将syslog-enabled参数设置为yes

使用syslog-enabled参数,可以将Redis服务器的日志与其他系统日志一起发送到syslog中,以便集中存储和分析。这可以帮助你更好地监控和管理Redis服务器。

syslog-ident

在Redis 6中,syslog-ident参数用来设置在系统的syslog中显示的标识符(ident)。它是一个可选的参数,用于在日志消息中标识Redis的来源。

通过设置syslog-ident参数,可以将不同的Redis服务实例的日志区分开来,方便在syslog中进行筛选和跟踪。标识符可以是任何字符串,默认情况下,它是"redis"。

以下是syslog-ident参数的示例用法:

redis-server --syslog-ident myredis

通过上述命令,Redis将在syslog中显示的标识符设置为"myredis"。

请注意,syslog-ident参数只在Redis配置文件(redis.conf)中生效,无法通过CONFIG SET命令动态修改。在启动Redis实例之前,需要编辑配置文件并重启Redis服务。

syslog-facility

在Redis 6中,syslog-facility是一个用于指定与syslog通信时使用的syslog设施的参数。以下是syslog-facility参数的可选值和功能:

  1. user0:用户级别的消息
  2. daemon1:守护进程级别的消息
  3. local0~local716~23:本地预留设施,通常由用户自定义使用

通过指定syslog-facility参数,可以将Redis的日志消息发送到syslog服务,以便对日志进行集中管理和分析。在Redis的配置文件(redis.conf)中可以设置该参数,如下所示:

syslog-facility local0

这将使Redis将所有日志消息发送到syslog服务的local0设施。根据syslog服务的配置,可以将这些日志消息保存到日志文件中、通过邮件通知管理员或进行其他操作。

crash-log-enabled

redis 6中的crash-log-enabled参数用于启用或禁用Redis的崩溃日志功能。

默认情况下,Redis 6中的crash-log-enabled参数被设置为yes,表示崩溃日志功能已启用。当Redis发生崩溃时,崩溃日志将被记录在特定的日志文件中,以帮助用户诊断和调试问题。

如果你想禁用崩溃日志功能,可以将crash-log-enabled参数设置为no。这将导致Redis不记录任何崩溃日志。

以下是在Redis配置文件(redis.conf)中设置crash-log-enabled参数的示例:

# 启用崩溃日志
crash-log-enabled yes
# 禁用崩溃日志
crash-log-enabled no

请注意,如果你禁用了崩溃日志功能,当Redis发生崩溃时,你将无法获得相关的日志信息,可能会增加故障排查的难度。因此,一般情况下建议将crash-log-enabled参数设置为“yes”。

crash-memcheck-enabled

在Redis 6中,crash-memcheck-enabled是一个启用或禁用内存检查的参数。当启用内存检查时,Redis会使用Valgrind实用程序memcheck来检查内存错误和泄漏。这有助于发现和修复潜在的内存问题。

要使用crash-memcheck-enabled参数,请在Redis配置文件中添加以下行:

crash-memcheck-enabled yes

将该参数设置为yes以启用内存检查,或设置为no以禁用它。

请注意,启用内存检查会显著影响Redis的性能,因为它会增加运行时开销。因此,仅在调试或测试目的时才应启用此参数。在生产环境中,应禁用它以获得最佳性能。

此外,要使用crash-memcheck-enabled参数,您需要在编译Redis时启用--enable-redis-check-memory选项。这将确保编译时包含Valgrind所需的符号信息。

请注意,crash-memcheck-enabled参数仅适用于Redis 6及更高版本。如果您使用的是早期版本的Redis,可能不支持此参数。

databases

Redis 6.0版本以前,Redis默认有16个数据库,数据库编号从0到15。每个数据库都是一个独立的命名空间,可以用于存储不同的数据。

在Redis 6.0版本及以后的版本中,默认只有一个数据库,也就是数据库编号为0。但是可以通过修改配置文件或者通过命令行参数来设置Redis中的数据库数量。

设置数据库数量的命令行参数是--databases,可以通过以下方式来设置:

redis-server --databases <num>

其中表示要设置的数据库数量,可以是一个整数值,例如:

redis-server --databases 16

这样就可以设置Redis的数据库数量为16个。

需要注意的是,增加数据库数量会增加内存的消耗,因此需要根据实际需求来合理配置数据库数量。

在Redis 6中,always-show-logo参数用于控制Redis服务器在启动时是否显示LOGO。

默认情况下,always-show-logo参数的值是yes,表示Redis服务器在启动时会显示LOGO。

你可以通过在Redis配置文件中设置always-show-logo no来禁用服务器启动时的LOGO显示。也可以通过命令行选项--no-logo来达到相同的效果。

set-proc-title

在Redis版本6中,set-proc-title是一个新引入的配置选项,用于设置Redis进程的标题。

Redis进程的"标题"是指在操作系统中显示的进程名称,一般是通过在命令行中运行ps命令来查看。默认情况下,Redis进程的标题是redis-server,但使用set-proc-title可以将其设置为用户自定义的值。

set-proc-title参数可以在Redis的配置文件(redis.conf)中进行配置,或者通过命令行参数传递。

语法:

set-proc-title title

参数说明:

  • title: 用户自定义的进程标题值。

示例:

set-proc-title "My Redis Server"

在上述示例中,Redis进程的标题将会被设置为"My Redis Server"。

proc-title-template

Redis 6中的proc-title-template参数是用于设置Redis进程的标题模板的。该参数可以使用一些特定的模板变量来自定义Redis进程的标题,以更好地标识Redis实例。

以下是一些可用的模板变量:

  • {redis-ver}:Redis的版本号
  • {run-id}:Redis实例的运行ID
  • {cluster-enabled}:如果Redis实例是集群模式,则为1,否则为0
  • {maxmemory-policy}:Redis实例的最大内存策略

使用proc-title-template参数,可以根据需要设置Redis进程的标题。例如,可以使用以下命令行选项来设置Redis进程标题为"redis-server {redis-ver} {run-id}":

redis-server --proc-title-template "redis-server {redis-ver} {run-id}"

这将创建一个Redis进程标题类似于"redis-server 6.0.9 c0ecd1e1a59fe54dbd88a77e7d27cebb8180691c"的文本。这样的标题可以更方便地识别Redis实例和其相关信息。

[ snapshot ]

save

在Redis 6中,save参数用于指定何时执行持久化操作,它接受一个由数字组成的列表。每个数字表示一个条件,当满足该条件时,Redis会执行一次持久化操作。

该参数的默认值是:save 900 1 300 10 60 10000。这意味着当900秒内至少有1个键被修改、300秒内至少有10个键被修改、60秒内至少有10000个键被修改时,Redis会执行一次持久化操作。

您可以通过修改配置文件或使用CONFIG SET命令来修改save参数。例如,要将条件改为每隔1分钟至少修改100个键,则可以使用CONFIG SET命令:

CONFIG SET save "60 100"

请注意,Redis的持久化操作有两种方式:RDB(Redis数据库快照)和AOF(Append-Only File,追加式文件)。您可以使用"save"参数分别配置RDB和AOF持久化的条件。

stop-writes-on-bgsave-error

在Redis 6中,stop-writes-on-bgsave-error是一个布尔类型的配置参数。当设置为yes时, 如果在执行RDB持久化操作(bgsave)时出现错误,Redis将停止接受写入命令,直到手动解决问题。

这个参数的作用是在RDB持久化期间发生错误时,防止数据的丢失。一旦发生错误,Redis将停止写入操作,以避免将错误的数据写入磁盘。这样,可以确保Redis的数据完整性,但会导致停止写入。

默认情况下,stop-writes-on-bgsave-error参数是关闭的。若要打开该参数,可以在Redis的配置文件(redis.conf)中添加以下行:

stop-writes-on-bgsave-error yes

然后,重新启动Redis生效。

rdbcompression

在Redis 6中,rdbcompression是一个配置参数,用于指定是否在生成RDB快照时对数据进行压缩。

默认情况下,rdbcompression参数是关闭的,即不对RDB快照数据进行压缩。当rdbcompression设置为no时,生成的RDB文件将以未压缩的格式保存。

要启用RDB数据的压缩,可以将rdbcompression参数设置为yes。这将导致生成的RDB文件以较小的文件大小保存,但在生成和读取RDB文件时会增加一些CPU开销。

示例使用方法:

redis-cli config set rdbcompression yes

要查看当前的rdbcompression设置,可以使用以下命令:

redis-cli config get rdbcompression

注意:在Redis 6之前的版本中,可以使用rdbcompression参数设置RDB数据的压缩级别。但在Redis 6中,该参数只用于启用或禁用压缩。压缩级别由新的rdbchecksum参数控制。

rdbchecksum

在Redis 6中,rdbchecksum参数是一个配置选项,用于开启或关闭在进行RDB持久化时计算和保存校验和。

默认情况下,rdbchecksum参数的值为yes,表示开启校验和。这意味着在进行RDB持久化时,Redis会计算并保存RDB文件的校验和。校验和是一个用于验证文件完整性的值,如果RDB文件损坏或被篡改,校验和将无法通过。

如果将rdbchecksum参数的值设置为no,则表示关闭校验和。这意味着在进行RDB持久化时,Redis不会计算和保存RDB文件的校验和。关闭校验和可以提高RDB持久化的性能,但意味着在恢复RDB文件时无法验证文件的完整性。

要注意的是,如果Redis节点作为主节点执行RDB持久化,并且配置了从节点进行数据复制,那么关闭rdbchecksum可能会导致主从数据不一致的问题。因此,在生产环境中,为了保证数据的完整性和一致性,建议将rdbchecksum参数设置为yes

sanitize-dump-payload

在Redis 6中,添加了一个新的参数sanitize-dump-payload,用于在执行RDB持久化期间对数据进行预处理。

sanitize-dump-payload参数可以设置为以下值之一:

  • yes:在进行RDB持久化之前,将进行数据预处理。预处理操作会尝试对数据进行安全且可逆的转换,以减少RDB文件的大小,并防止在RDB文件中包含敏感或复杂的数据类型和值。这有助于在进行RDB文件转储和加载时提高性能和可靠性。
  • no:禁用数据预处理,RDB文件将以原始形式包含所有数据。

例如,可以通过以下命令来设置sanitize-dump-payload参数:

CONFIG SET sanitize-dump-payload yes

需要注意的是,sanitize-dump-payload参数只对RDB持久化过程起作用,对AOF持久化过程没有影响。同时,数据预处理可能会导致一些数据类型和值的丢失或变化,因此在使用此参数之前,请确保你了解其可能产生的影响。

另外,需要注意的是,sanitize-dump-payload参数仅在Redis 6及更高版本中可用。

dbfilename

在Redis 6中,dbfilename参数用于指定持久化文件名的格式。默认情况下,持久化文件名为dump.rdb

可以使用如下方式配置dbfilename参数:

dbfilename <filename>

其中<filename>为你指定的持久化文件名。你可以使用占位符来在文件名中包含日期和时间等信息。

以下是一些可用的占位符:

  • %d:代表日期,格式为YYYYMMDD
  • %H:代表小时,格式为HH
  • %M:代表分钟,格式为`MM``
  • ``%S:代表秒,格式为SS`

例如,如果你想使用以日期为后缀的持久化文件名,可以配置如下:

dbfilename "dump-%d.rdb"

这将生成类似于dump-20220101.rdb的持久化文件名。

注意,dbfilename参数只在启动Redis时生效,如果你希望在运行时更改持久化文件名,你可以使用CONFIG SET命令来修改dbfilename参数的值。

CONFIG SET dbfilename <filename>

rdb-del-sync-files

在Redis 6中,rdb-del-sync-files是用于设置删除RDB文件后是否同步删除对应.aof文件的选项。该选项有两个可能的值:

  1. yes:表示当删除RDB文件时,会同步删除对应的.aof文件。这意味着如果Redis正在使用AOF持久化模式,当你使用SAVEBGSAVESHUTDOWN命令删除RDB文件时,Redis将同时删除.aof文件。这可以确保RDB文件和.aof文件之间的一致性。
  2. no:表示删除RDB文件时不会同步删除对应的.aof文件。这意味着如果你正在使用AOF持久化模式,并且手动删除RDB文件,Redis将保留对应的.aof文件。你需要手动删除.aof文件,或者使用BGREWRITEAOF命令重写.aof文件来保持一致性。

默认情况下,rdb-del-sync-files选项的值为yes。你可以通过在Redis配置文件中设置rdb-del-sync-files参数来修改此选项的值。例如,将rdb-del-sync-files设置为no

rdb-del-sync-files no

注意,修改此选项的值可能需要重启Redis才能生效。

dir

在 Redis 6 中,dir 参数用于指定持久化文件的保存路径。 默认情况下,Redis 将持久化文件保存在服务器的当前工作目录中。

可以通过在 Redis 配置文件 redis.conf 或者使用命令行参数来设置 dir 参数。

例如,要将持久化文件保存在 /var/redis 目录下,可以在 redis.conf 文件中添加以下配置:

dir /var/redis

或者,可以在启动 Redis 服务器时使用命令行参数:

redis-server --dir /var/redis

需要注意的是,Redis 服务器需要有足够的权限来访问指定的目录。否则,启动 Redis 服务器时可能会出现错误。

请注意,dir 参数仅适用于持久化操作(即 RDB快照或 AOF 日志的保存),它并不影响内存数据库的操作。 Redis 的数据持久化方式有两种,即 RDB 和 AOF。当使用 RDB 持久化方式时,Redis 服务器会周期性地将内存中的数据库快照保存到磁盘中;当使用 AOF 持久化方式时,Redis 服务器会将每次更新操作追加到一个只追加写文件(append-only file)中。

[ replication ]

replicaof

在Redis 6中,replicaof参数用于设置Redis实例的主从复制机制。它接受两个参数,分别是主节点的IP地址和端口号。

使用replicaof参数可以将当前Redis实例设置为主节点的从节点,实现主从复制。当主节点有新的写操作时,从节点会同步更新自己的数据。

示例用法:

replicaof <masterip> <masterport>

其中,<masterip>是主节点的IP地址,而<masterport>是主节点的端口号。

需要注意的是,Redis 6中引入了新的复制机制(Redis 6以前的版本使用旧的复制机制)。新的复制机制使用了PSYNC命令,允许从节点进行部分重同步,从而减少了主从节点初始同步时的网络带宽和服务器负载。

masterauth

在Redis 6中,masterauth参数用于配置主节点(master)和从节点(slave)之间的主节点验证密码。

当一个从节点要连接到主节点时,它将发送一个认证请求。主节点将通过比较从节点发送的密码与masterauth参数中配置的密码来验证从节点。

要在Redis 6中配置masterauth参数,可以编辑redis.conf文件并在其中添加以下行:

masterauth <password>

其中,<password>是用于验证主节点的密码。

请注意,masterauth参数是可选的。如果不配置此参数,主节点将不会进行密码验证。

masteruser

在Redis 6中,masteruser是一个新的配置选项,它用于设置与Redis主服务器连接的认证用户名。该配置选项可以确保只有授权用户才能连接到Redis主服务器。

以下是有关masteruser参数的一些重要信息:

  • 配置名称:masteruser
  • 默认值:无
  • 可配置范围:全局配置文件(redis.conf)或命令行参数
  • 参数类型:字符串
  • 功能:用于设置与Redis主服务器连接的认证用户名

示例:

  • 修改redis.conf文件:
masteruser myuser
  • 或在命令行中使用参数:
redis-server --masteruser myuser

请注意,masteruser参数需要搭配使用Redis的认证功能。您还需要使用requirepass参数设置一个密码,并将masterauth参数设置为相应的密码,以确保只有授权用户才能连接到Redis主服务器。

replica-serve-stale-data

在Redis 6中,有一个名为replica-serve-stale-data的参数,通过设置它可以控制Redis复制的行为。当主节点不可用时,副本节点可以选择是继续提供服务并返回过期的数据,还是停止服务直到主节点恢复并同步数据。

replica-serve-stale-data参数有以下几个选项:

  • no(默认值):副本节点在主节点下线时会停止服务,直到主节点恢复并同步数据。
  • on-error:副本节点会检查是否有错误发生,如果没有错误则继续提供服务并返回过期的数据。一旦发生错误,副本节点会停止服务直到主节点恢复并同步数据。
  • always:副本节点无论什么时候都会继续提供服务并返回过期的数据,不会停止服务,也不会检查是否有错误发生。

通过设置replica-serve-stale-data参数,可以根据业务需求来决定副本节点在主节点不可用时的行为。但需要注意的是,如果副本节点提供过期的数据,则会存在数据不一致的风险。因此,在选择提供过期数据时,需要谨慎权衡数据一致性和服务可用性之间的平衡。

replica-read-only

在Redis 6中,引入了replica-read-only参数。此参数用于控制当一个从节点(replica)以只读模式连接到主节点(master)时,该从节点是否允许执行写操作。

默认情况下,replica-read-only参数的值为yes,意味着从节点仅允许执行只读命令。这是为了确保主节点的数据一致性和安全性。如果尝试在只读的从节点上执行写操作,将会返回一个错误。

但是,在某些情况下,你可能希望从节点能够执行写操作,例如在主节点失败时,手动将从节点提升为主节点,并继续对其进行写操作。为了满足这种需求,可以将replica-read-only参数的值设置为no

要设置replica-read-only参数的值,可以通过配置文件或者在Redis服务器启动命令中使用相应的选项进行设置。

配置文件中的设置示例:

replica-read-only no

在Redis服务器启动命令中的设置示例:

redis-server --replica-read-only no

值得注意的是,在Redis 5及更早版本中,并没有replica-read-only参数。相应地,从节点可以在任何情况下执行读写操作。

repl-diskless-sync

在Redis 6中,有一个名为repl-diskless-sync的新参数可以使用。该参数控制当Redis主节点与其从节点进行全量同步时,是否使用磁盘完全同步的方式。

具体的参数选项及其含义如下:

  • repl-diskless-sync yes:主节点和从节点会尝试通过网络直接进行全量同步,避免使用磁盘同步方式。这是默认行为。
  • repl-diskless-sync no:主节点和从节点会通过将RDB文件写入磁盘,然后从节点再从磁盘加载RDB文件来进行全量同步。这会增加磁盘I/O的负载,但可以避免网络负载过大的情况。

从Redis 6开始,Redis会动态选择使用哪种方式进行全量同步,默认情况下会尝试使用repl-diskless-sync yes的方式。如果使用repl-diskless-sync yes时出现了问题(如网络延迟过大),Redis会自动尝试使用repl-diskless-sync no的方式。

请注意,repl-diskless-sync参数只对主节点和从节点之间的全量同步有影响,不影响增量同步或部分同步(如PSYNC命令)的方式。

repl-diskless-sync-delay

redis 6增加了一个新的配置参数repl-diskless-sync-delay,它定义了Redis从主节点同步数据到从节点时的延迟时间。

默认情况下,Redis使用diskless replication将数据从主节点复制到从节点。这意味着Redis不必将数据写入磁盘,而是直接通过网络发送给从节点。这种方式可以显著减少同步的延迟时间。

然而,在某些情况下,使用diskless replication的同步可能会由于网络因素造成延迟。为了解决这个问题,Redis 6引入了repl-diskless-sync-delay配置参数。

repl-diskless-sync-delay参数的默认值为5毫秒。这意味着当从节点请求同步数据时,主节点会等待5毫秒,以允许从节点能够追赶上来。如果在5毫秒内,从节点没有请求同步数据,主节点将启用disk-based sync,即将数据写入磁盘,并通过网络发送给从节点。

可以通过修改repl-diskless-sync-delay参数的值来调整同步延迟的时间。较小的值可以减少延迟,但可能增加了网络负载。而较大的值可能会增加延迟,但能够减少网络负载。

需要注意的是,repl-diskless-sync-delay参数只对使用diskless replication进行数据同步的从节点生效,对于使用disk-based sync的从节点没有影响。

repl-diskless-load

在Redis 6中,repl-diskless-load是一个新的配置参数,用于控制当slave节点接收到RDB文件时是否通过磁盘加载。

当将RDB文件传输给slave节点时,可以选择在slave节点上通过磁盘加载该文件,或者通过网络直接加载。通过磁盘加载可以避免网络传输带来的延迟,并且能更快地完成同步。

repl-diskless-load参数有以下两个选项:

  • 默认选项是always,表示总是通过磁盘加载RDB文件。
  • 另一个选项是swapdb,表示只有在对slave节点执行全量复制操作时才通过磁盘加载RDB文件。在增量复制的情况下,不会通过磁盘加载RDB文件。

你可以在Redis配置文件中设置repl-diskless-load参数,例如:

repl-diskless-load always

或者

repl-diskless-load swapdb

需要注意的是,repl-diskless-load参数只在slave节点上生效,主节点不受影响。默认情况下,该参数设置为always

repl-ping-replica-period

在Redis 6中,repl-ping-replica-period参数用于配置主节点定期向从节点进行PING操作的时间间隔(以毫秒为单位)。

PING操作用于检测从节点是否仍然与主节点保持连接。如果从节点在一定时间内没有收到PING操作,则会认为与主节点的连接已经断开,并尝试重新连接。这个参数可以帮助主节点及时检测从节点的状态,并在需要时重新连接。

默认情况下,repl-ping-replica-period参数的值为10秒(10000毫秒)。您可以根据自己的需求和网络环境调整这个值。较小的值将使主节点更频繁地发送PING操作,从而更及时地检测从节点的状态,但可能会增加网络开销。较大的值将减少PING操作的频率,从而降低网络开销,但可能在出现问题时延迟检测。

例如,要将repl-ping-replica-period的值设置为5秒,您可以在Redis配置文件中添加以下行:

repl-ping-replica-period 5000

请注意,这个参数仅适用于主节点。从节点没有相应的配置选项来控制PING操作的频率。

repl-timeout

Redis 6中的repl-timeout参数用于设置从节点连接到主节点的超时时间。当从节点与主节点的连接在该超时时间内没有接收到任何数据时,从节点认为与主节点的连接已经断开,并尝试重新连接。该参数的默认值为60秒。

repl-timeout参数可以通过以下方式进行配置:

  1. 在配置文件redis.conf中添加或修改repl-timeout的值:
repl-timeout <timeout>

其中<timeout>表示超时时间(以毫秒为单位)。

  1. 在启动Redis服务器时通过命令行传递参数:
redis-server --repl-timeout <timeout>

需要注意的是,repl-timeout的值应该根据你的具体环境和需求进行调整。如果从节点与主节点之间的网络延迟较大,建议将repl-timeout的值增加,以避免不必要的连接重试。如果从节点与主节点之间的网络延迟较小,可以将repl-timeout的值减小,以提升连接的响应速度。

repl-disable-tcp-nodelay

redis 6 repl-disable-tcp-nodelay 参数是Redis 6中的一个配置参数,用于禁用TCP_NODELAY选项。

TCP_NODELAY是一种TCP协议的选项,用于禁用Nagle算法,该算法的作用是将多个较小的数据包合并为一个较大的数据包进行传输。

当开启TCP_NODELAY选项时,数据的发送方无需等待接收方对已发送数据的确认,而是可以立即发送下一个数据包。这可以提高数据传输的效率,减少因等待确认而产生的延迟。

但在某些情况下,Nagle算法会对某些应用程序的性能产生负面影响,因此可以使用repl-disable-tcp-nodelay参数禁用TCP_NODELAY选项。

禁用TCP_NODELAY选项后,Redis在进行主从复制数据传输时将不会合并数据包,而是即时发送每个数据包。这可能会增加数据传输的延迟,但可以在某些特定应用场景下提供更好的性能。

要启用repl-disable-tcp-nodelay参数,可以在Redis配置文件中设置:

repl-disable-tcp-nodelay yes

默认情况下,该参数为禁用状态(no)。

repl-backlog-size

在Redis 6中,repl-backlog-size参数用于设置复制日志(replication backlog)的大小。复制日志是一个固定长度的环形缓冲区,用于保存最近的复制操作命令。当主节点与从节点进行复制时,主节点将最新的命令写入复制日志,然后从节点从复制日志中读取命令以进行同步。

repl-backlog-size参数的默认值为1MB。它决定了复制日志的最大容量。

当从节点断开与主节点的连接,并重新连接时,从节点可以使用复制日志中保存的命令来进行部分重同步。较大的复制日志大小可以增加从节点断线期间能够恢复的命令数量,从而减少重同步所需的时间。

但是,设置较大的复制日志大小也会增加Redis实例的内存开销。因此,在设置repl-backlog-size参数时应该平衡推荐值和实际可用内存之间的关系。

可以使用CONFIG SET命令来动态设置repl-backlog-size参数的值,例如:

CONFIG SET repl-backlog-size 10mb

这将把复制日志大小设置为10MB。

repl-backlog-ttl

Redis 6版本引入了repl-backlog-ttl参数,用于设置复制积压日志的过期时间。

在Redis复制中,主节点负责将写操作发送给所有从节点进行复制。复制积压日志是主节点用于记录复制操作的环形缓冲区。从节点通过读取积压日志来进行复制操作。repl-backlog-ttl参数定义了复制积压日志中的日志条目的过期时间。过期的日志条目将从积压日志中删除。

该参数的默认值是-1,表示不启用过期时间,并且复制积压日志中的所有日志条目将一直保留。

可以通过以下方式设置repl-backlog-ttl参数:

CONFIG SET repl-backlog-ttl <value>

其中,<value>是一个以秒为单位的整数,表示复制积压日志中日志条目的过期时间。如果将<value>设置为0,则表示立即删除过期的日志条目。

注意,设置repl-backlog-ttl参数后只会影响新的日志条目,不会修改之前已经存在的日志条目的过期时间。

replica-priority

在Redis 6中,replica-priority是用于设置Redis副本的优先级的参数。

当一个Redis主节点有多个副本时,replica-priority可以用来指定每个副本的优先级。副本的优先级决定了它们在成为主节点的候选者时的优先级。

默认情况下,所有副本的优先级都为0,表示它们具有相同的优先级。当主节点不可用时,Redis会根据副本的复制偏移量和复制偏移量增量进行选举,以选择一个新的主节点。然后,副本会使用replica-priority的值来决定它们成为主节点的优先级。

较高优先级的副本将优先于较低优先级的副本成为主节点。如果有多个具有相同较高优先级的副本,则将选择具有最大复制偏移量和复制偏移量增量的副本成为主节点。

可以使用以下命令在Redis配置文件中设置replica-priority参数:

replica-priority <priority>

这里,<priority>是一个整数,表示副本的优先级。较高的值表示较高的优先级。

需要注意的是,如果将主节点恢复正常,它将重新成为主节点,而不考虑副本的优先级设置。副本的优先级仅在主节点不可用时用于选举新主节点。

replica-announced

在 Redis 6 中,replica-announced 参数表示一个可选的逗号分隔的 IP 地址列表。当 Redis 服务器作为主节点时,在启动时会尝试将自己的 IP 地址广播给这些 IP 地址对应的主机上的 Redis 从节点。

replica-announced 参数的语法如下:

replica-announced ip1:port1,ip2:port2,...,ipn:portn

其中,ip1:port1 表示一个从节点的 IP 地址和端口号。你可以指定多个从节点的 IP 地址和端口号,多个节点之间使用逗号分隔。这些从节点会在启动时接收到主节点广播的 IP 地址。

需要注意的是,replica-announced 参数只在主节点的启动配置中有效。此外,这个参数仅在 Redis Cluster 启用时才会生效。

min-replicas-to-write

在Redis 6中,有一个新的配置参数min-replicas-to-write。该参数用于指定在进行写操作时至少需要有多少个副本节点处于可写状态。

在Redis Sentinel中,如果设置了该参数,当Master节点发生故障时,只有在满足min-replicas-to-write条件的情况下,Sentinel才会将一个Slave提升为新的Master节点。这可以避免在大多数副本节点不可用的情况下,将一个不完整的数据库状态推送给客户端。

示例使用方法:

redis-server --min-replicas-to-write 2

上述示例中,min-replicas-to-write参数被设置为2,表示至少需要有两个可写的副本节点时,才可以进行写操作。

需要注意的是,该参数只在master节点上有效,不会传播到slave节点。并且需要使用Redis Sentinel来管理复制集合群集。

min-replicas-max-lag

Redis 6引入了min-replicas-max-lag参数,它用于配置在Redis Sentinel中允许的从服务器实例正常工作的最大复制延迟。

当一个Redis主服务器下线时,Sentinel会自动将一个从服务器提升为新的主服务器。然后,Sentinel会将其他从服务器复制新的主服务器。在这个切换过程中,从服务器可能会遇到一些延迟,这是由于数据复制所需的时间引起的。

min-replicas-max-lag参数定义了从服务器复制延迟的最大阈值。如果从服务器的复制延迟超过这个阈值,Sentinel会认为该从服务器无法正常工作,并将其排除在故障转移过程之外。

这个参数的值是一个毫秒数,可以通过在Sentinel配置文件中设置来定义。默认情况下,它是0,表示没有复制延迟阈值,即所有从服务器都可以参与故障转移。

设置min-replicas-max-lag参数可以帮助确保故障转移过程中的数据一致性,因为从服务器的复制延迟可能导致数据不一致。但同时,设置一个较小的值也可能会导致一些从服务器被排除在故障转移过程之外。

总结起来,min-replicas-max-lag参数是Redis Sentinel中控制从服务器复制延迟的参数,它定义了允许的最大延迟阈值。设置这个参数可以帮助确保故障转移过程中的数据一致性。

replica-announce-ip

在Redis 6中,replica-announce-ip是一个可选参数,它允许配置主节点宣告给从节点的IP地址。

该参数允许用户在复制期间指定主节点宣告给从节点的IP地址,以便从节点能够正确连接到主节点。在某些网络环境下,主节点与从节点之间的连接可能需要通过网络地址转换(NAT)进行。在这种情况下,如果主节点宣告给从节点的是错误的IP地址,从节点将无法连接到主节点。

基本语法如下:

replica-announce-ip <ip-address>

其中,<ip-address>是主节点宣告给从节点的IP地址。默认情况下,Redis会使用主节点的bind参数所配置的IP地址。通过设置replica-announce-ip参数,可以将其设置为一个不同的IP地址。

请注意,replica-announce-ip参数仅适用于从节点连接到主节点的情况,而不适用于主节点连接到从节点的情况。主节点连接到从节点的IP地址是根据网络连接的实际情况自动选择的。

此外,replica-announce-ip参数还需要与replica-announce-port参数一起使用,以指定主节点宣告给从节点的端口号。

replica-announce-port <port>

这两个参数的组合允许用户配置主节点宣告给从节点的IP地址和端口号。

replica-announce-port

在Redis 6中,新增了一个名为replica-announce-port的配置参数。这个参数用于设置Redis主节点在复制过程中通知从节点的端口号。

当一个Redis主节点被配置为使用replica-announce-ipreplica-announce-port参数去通知从节点复制的地址时,从节点会使用这个参数指定的端口号去连接主节点进行复制。

使用这个参数可以解决一些特殊情况下的网络配置问题,例如主节点和从节点之间的连接需要通过不同的端口进行通信时,可以使用replica-announce-port来指定从节点连接主节点的端口号。

注意,这个参数仅适用于从Redis版本6开始的复制过程。在旧版本的Redis中不起任何作用。

[ keys tracking ]

tracking-table-max-keys

在Redis 6中,tracking-table-max-keys是一个全局参数,用于设置跟踪表的最大键数。跟踪表是一个特殊的Redis内部数据结构,用于存储键的一些元数据,以支持Redis Streams等一些功能。

该参数的默认值为1000000,可以在Redis配置文件中或者通过CONFIG SET命令进行修改。它的作用是限制跟踪表中键的数量,以控制内存使用。

需要注意的是,修改该参数可能会对Redis Streams等功能的性能产生影响,因此在调整时要权衡内存和性能之间的平衡。

示例使用方法:

  1. 修改配置文件:在Redis配置文件中找到tracking-table-max-keys参数,并将其值修改为所需的最大键数。
tracking-table-max-keys 2000000
  1. 使用CONFIG SET命令:可以使用Redis的CONFIG SET命令在运行时修改参数的值。
$ redis-cli
> CONFIG SET tracking-table-max-keys 2000000

[ security ]

redis 6 ACL命令

在Redis 6中,引入了ACL(Access Control List)命令,用于管理Redis实例的访问控制列表。

以下是Redis 6中的ACL命令:

  1. ACL SETUSER <username> [RESET-STALE-CONNECTIONS]:创建或更新指定用户名的用户并设定相应的权限。如果指定了RESET-STALE-CONNECTIONS选项,将会关闭所有与指定用户相关的已建立的连接。
  2. ACL DELUSER <username>:删除指定用户名的用户。
  3. ACL GETUSER <username>:获取指定用户名的用户的详细信息。
  4. ACL SETPASS <username> <password>:为指定用户名的用户设置密码。
  5. ACL SETUSER <username> NOAUTH:移除指定用户名的用户的密码。
  6. ACL CAT [<categoryname>]:获取指定类别或所有类别下的命令和模式的列表。如果未指定类别,则返回所有命令和模式的列表。
  7. ACL GENPASS:生成一个随机密码。
  8. ACL WHOAMI:返回当前连接的用户名。
  9. ACL LIST:获取当前Redis实例的所有用户的列表。
  10. ACL LOG [<count>]:获取最近的个ACL日志条目(默认为10)。
  11. ACL SAVE:保存ACL权限配置到磁盘。
  12. ACL LOAD:从磁盘加载ACL权限配置。

以上是Redis 6中的ACL命令,通过使用这些命令,可以方便地管理和控制Redis实例的访问权限。

user alice on

要设置用户"alice"的密码为"somepassword",并授予她对所有命令的访问权限(包括屏蔽debug命令的权限),可以按照以下步骤进行设置:

  1. 使用REDIS6的命令ACL SETUSER来创建或更新用户alice。命令的语法如下:
ACL SETUSER alice on +@all -DEBUG ~* >somepassword

该命令将创建用户"alice",并为她设置密码为"somepassword",赋予她对所有命令的权限("+"表示允许,"@all"表示所有命令),以及屏蔽debug命令("-DEBUG"表示屏蔽指定命令)。

  1. 当你执行命令后,Redis将返回"OK"表示用户设置成功。

现在,用户"alice"的密码已被设置为"somepassword",并且拥有对所有命令的访问权限,但不能执行debug命令。

acllog-max-len

在Redis 6中,acllog-max-len是一个ACL(访问控制列表)的配置参数,用于指定ACL日志列表的最大长度。ACL日志列表用于跟踪和记录用户对Redis的访问尝试。

该参数可以通过配置文件或者动态设置进行配置。它的默认值是128,表示ACL日志列表的最大长度为128条。当ACL日志列表达到最大长度时,新的日志记录将替换最旧的日志记录。

可以通过修改acllog-max-len的值来调整ACL日志列表的大小,以满足特定需求。较大的值将允许更多的日志记录,但也会增加内存使用量。

以下是配置文件中的示例设置:

acllog-max-len 256

可以使用CONFIG SET命令在运行时动态设置参数:

CONFIG SET acllog-max-len 256

aclfile

在Redis 6中,引入了一些新的ACL(访问控制列表)功能,并且引入了一个新的配置参数"aclfile"来指定ACL文件的位置。

ACL文件是一个文本文件,用于存储Redis的访问控制列表规则。在Redis 6之前,ACL规则是通过Redis命令进行手动配置的。而通过引入ACL文件,可以将ACL规则以文本文件的形式进行管理和配置。

参数"aclfile"指定了ACL文件的位置。它可以接受绝对路径或相对路径。例如:

aclfile /etc/redis/acl.conf

这将把ACL文件的位置设置为"/etc/redis/acl.conf"。请注意,需要确保Redis服务器对ACL文件具有读取权限。

ACL文件应以普通文本文件的形式存在,每行对应一条ACL规则。每条规则包含了角色(roles)和权限(permissions)。例如:

user default on +@all -@dangerous

上述规则表示将"default"用户设置为具有所有命令的读写权限,并且排除了一些具有危险性的命令。

通过配置aclfile参数,并将ACL规则保存在ACL文件中,可以更方便地管理和配置Redis的访问控制列表。

requirepass

在 Redis 6 中,requirepass 参数用于设置客户端连接到 Redis 服务时所需的密码。只有提供了正确的密码,客户端才能成功连接到 Redis。

要使用 requirepass 参数,可以在 Redis 的配置文件(redis.conf)中添加以下行:

requirepass <password>

其中,<password> 是要设置的密码。

示例:

requirepass mypassword

在设置了 requirepass 参数后,客户端在连接 Redis 服务器时需要通过 AUTH 命令来进行身份验证。示例如下:

AUTH <password>

其中,<password> 是之前设置的密码。

如果密码验证成功,Redis 服务器会返回 OK;否则,将返回一个认证失败的错误。

acl-pubsub-default

在Redis 6中,acl-pubsub-default参数是用来设置默认的订阅和发布权限控制列表(ACL)规则的。当一个客户端没有指定自己的ACL规则时,将会使用acl-pubsub-default参数指定的规则。

该参数可以接受一个以空格分隔的列表,每个元素表示一个ACL规则。每个规则由两部分组成,分别是频道名称的模式和权限。频道名称的模式可以使用通配符进行匹配,例如使用"*"表示所有频道。权限可以是PUBLISH、SUBSCRIBE或是BOTH。分别代表发布、订阅或是两者兼具的权限。

举个例子,如果我们想要设置一个默认规则,允许所有客户端订阅所有频道,但仅允许特定用户发布频道“news”的消息,可以通过以下命令设置acl-pubsub-default参数:

ACL SETUSER default on +@all ~* &* -@all -@news +@special_user news

在这个示例中,我们通过+@all-@all设置了所有频道的订阅和发布权限,默认是允许订阅,但不允许发布。然后,我们通过-@news取消了频道“news”的订阅权限。最后,我们通过+@special_user news为特定用户“special_user”添加了发布频道“news”的权限。

请注意,设置acl-pubsub-default参数需要管理员权限。为了确保安全性,建议管理员仔细审查和限制默认ACL规则,以避免潜在的安全风险。

rename-command

在Redis 6中,rename-command命令用于将某个命令重命名为另一个名称。其参数定义如下:

  1. old-command: 需要被重命名的命令名称。
  2. new-command: 新的命令名称。

使用示例:

redis-cli
127.0.0.1:6379> rename-command old-command new-command
OK

上述示例中将old-command命令重命名为new-command

[ clients ]

maxclients

在Redis 6中,maxclients参数用于设置Redis服务器的最大客户端连接数。它允许你指定服务器同时接受的最大客户端连接数。

以下是关于maxclients参数的一些重要事项:

  1. 默认值:在默认情况下,maxclients参数的值为10000。这意味着Redis服务器最多可以同时接受10000个客户端连接。

  2. 适用范围:maxclients参数适用于所有类型的客户端连接,包括普通的TCP连接、UNIX域套接字连接和TLS连接。

  3. 超过最大连接数:如果服务器已经达到了maxclients指定的最大连接数,并且尝试创建新连接,服务器将拒绝该连接并返回一个错误。

  4. 动态修改:你可以通过CONFIG SET命令在Redis运行时动态修改maxclients参数的值。 例如,要将maxclients的值设置为20000,可以执行以下命令:

CONFIG SET maxclients 20000

需要注意的是,在动态修改maxclients参数后,新的值只在重新启动Redis服务器时才会生效。

  1. 性能考虑:增加最大客户端连接数会增加服务器的负载和消耗。因此,请确保服务器有足够的资源来处理更多的客户端连接。

  2. maxclients的最大值:maxclients参数的值不能超过操作系统对单个进程或文件描述符数的限制。如果尝试设置maxclients的值超过此限制,Redis服务器将在启动时报错。

    要注意的是,根据实际情况和服务器资源的限制,你应该权衡maxclients参数的值,以避免过多的客户端连接对服务器性能和可用性造成负面影响。

[ memory management ]

maxmemory

在Redis 6中,maxmemory参数指定了Redis实例可以使用的最大内存量。它可以通过以下方式进行配置:

  1. 在Redis配置文件(redis.conf)中添加一行 maxmemory <value>,其中表示最大内存量,可以使用以下单位:K(kilobytes)、M(megabytes)、G(gigabytes)。例如:maxmemory 1G 表示最大内存为1GB。

  2. 通过在Redis命令行中使用CONFIG SET命令进行动态配置。例如:CONFIG SET maxmemory 1G

    一旦Redis实例达到了设置的最大内存量,它将根据所配置的策略来处理新的写入操作。常见的策略包括:

  • volatile-lru:在有设置过期时间的键中,使用LRU算法淘汰最近最少使用的键。

  • volatile-random:在有设置过期时间的键中,随机选择键进行淘汰。

  • volatile-ttl:在有设置过期时间的键中,选择最早过期的键进行淘汰。

  • allkeys-lru:在所有的键中,使用LRU算法淘汰最近最少使用的键。

  • allkeys-random:在所有的键中,随机选择键进行淘汰。

    注意:maxmemory参数并不是指Redis进程的实际内存占用量,而是指Redis用于键值对存储的内存量。实际的内存占用量还包括Redis进程本身的内存占用和其他系统层面的内存消耗。

maxmemory-policy

在Redis 6中,maxmemory-policy参数用于指定在达到最大内存限制时,Redis服务器应如何管理内存的策略。以下是可用的选项:

  1. noeviction:当达到最大内存限制时,Redis拒绝写入请求并返回错误,这将防止内存使用超出设定的限制。
  2. allkeys-lru:通过使用近期最少使用算法(LRU)选择到期键(包括已设置过期时间的和过期的键)进行驱逐,以释放内存。
  3. volatile-lru:通过使用近期最少使用算法(LRU)选择已设置过期时间的键进行驱逐,以释放内存。如果没有满足条件的键,则使用与noeviction相同的行为。
  4. allkeys-random:在所有键中选择一个随机的键进行驱逐,以释放内存。
  5. volatile-random:在已设置过期时间的键中选择一个随机的键进行驱逐,以释放内存。如果没有满足条件的键,则使用与noeviction相同的行为。
  6. volatile-lfu:通过使用最少使用算法(LFU)选择已设置过期时间的键进行驱逐,以释放内存。如果没有满足条件的键,则使用与noeviction相同的行为。
  7. allkeys-lfu:通过使用最少使用算法(LFU)选择到期键(包括已设置过期时间的和过期的键)进行驱逐,以释放内存。

请注意,实际上,Redis 6中引入了其他新的maxmemory-policy的可选项,如volatile-ttl,代替了allkeys-lru。这些新选项使用键的剩余TTL(Time To Live)来选择要驱逐的键,并在可能的情况下尽量保留最新的数据。

你可以通过修改Redis配置文件(redis.conf)或通过CONFIG SET命令来设置maxmemory-policy参数。例如:

CONFIG SET maxmemory-policy allkeys-lru

maxmemory-samples

在Redis 6中,maxmemory-samples参数用于指定在进行内存淘汰(eviction)时,Redis将使用的样本数量。

默认情况下,Redis会从所有的keys中进行样本选择来决定要淘汰的键。样本数量越大,Redis选择要淘汰的键的准确性就越高。

maxmemory-samples参数的默认值为5,这意味着Redis将从所有keys中随机选择5个样本来进行内存淘汰。如果你想要增加样本数量,可以通过修改maxmemory-samples参数的值来实现。

需要注意的是,增加maxmemory-samples的值会增加Redis进行内存淘汰的时间。因此,在设置合适的参数值时,需要平衡精确性和性能之间的关系。

maxmemory-eviction-tenacity

在Redis中,maxmemory-eviction-tenacity参数控制了在内存达到上限时,Redis执行清理策略的坚韧度。该参数的取值范围是0到10,默认值是5。

具体的参数值解释如下:

  • 0:表示Redis在内存达到上限后立即执行清理策略,不考虑当前连接的活跃度。
  • 10:表示Redis会尽可能地等待连接变得不活跃或者空闲,再执行清理策略。

这个参数的含义是:Redis在内存达到上限后,会根据连接的活跃度来决定是否执行清理策略。如果值较低,Redis会更积极地执行清理策略,即使当前连接较活跃;如果值较高,Redis会更倾向于等待连接变得不活跃或者空闲,再执行清理策略。

你可以根据自己的需求和实际情况,调整maxmemory-eviction-tenacity参数的值,以达到性能和内存利用的平衡。

replica-ignore-maxmemory

在Redis 6中,replica-ignore-maxmemory参数被用来设定Redis从节点是否应该忽略主节点的maxmemory设置。

当设置为yes时,从节点将忽略主节点的maxmemory设置,并且在从节点上不进行内存控制以删除过期的数据。 当设置为no时,从节点将遵循主节点的maxmemory设置,并且将按照相同的策略进行内存控制。

默认情况下,replica-ignore-maxmemory参数设置为no,这意味着从节点将遵循主节点的maxmemory设置。当从节点的内存接近达到阈值时,从节点将开始删除过期的数据,以确保不超过maxmemory的限制。

然而,在某些情况下,我们可能希望从节点能够存储更多的数据,而不受主节点maxmemory设置的限制。这时,我们可以将replica-ignore-maxmemory参数设置为yes,以忽略maxmemory设置。

需要注意的是,忽略maxmemory设置可能会导致从节点使用更多的内存,甚至可能导致从节点崩溃。因此,在设置replica-ignore-maxmemory参数时,应谨慎考虑从节点的内存消耗情况。

active-expire-effort

Redis的active-expire-effort参数是用来配置在主动过期(key的过期时间到了主动删除)时的删除策略。当系统中有大量的过期key需要删除时,Redis使用active-expire-effort参数来决定删除的工作量与时间开销。

active-expire-effort参数的取值范围是1到10,默认值是1。取值越大,删除过期key的工作量也越大,删除key的速度也会更快。在执行主动过期时,Redis会根据该参数的值来决定每次删除的key的数量与执行的时间。

active-expire-effort参数的值为1时,Redis会以较低的工作量来执行删除操作。这意味着Redis可能会花费较长的时间来删除大量的过期key。在一些读写混合负载的场景下,较低的active-expire-effort值可以减轻删除操作对读取和写入性能的影响。

active-expire-effort参数的值较大时,Redis会以较高的工作量来执行删除操作。这意味着Redis会更快地删除过期key,但同时可能会对其他操作的性能产生影响。在一些对删除速度要求高的场景下,适当增大active-expire-effort的值可以加快删除速度。

需要注意的是,调整active-expire-effort参数的值可能会对Redis的性能产生影响,需要根据具体的场景和需求来选择合适的值。

[ lazy freeing ]

lazyfree-lazy-eviction

redis 服务器配置中的 lazyfree-lazy-eviction 参数用于控制 Redis 在释放内存时是否延迟操作。默认情况下,该参数的值为 yes,表示 Redis 在进行内存回收时会延迟操作。

具体来说,当 Redis 需要释放内存时,它会使用一种被称为 "lazy eviction" 的方式来清理过期的数据。这种方式下,Redis 不会立即释放已过期的数据,而是将这些数据放入一个队列中,并在稍后的某个时候对队列中的数据进行处理。

这种延迟操作的好处是减少了 Redis 频繁处理过期数据的开销,提高了系统的整体性能。然而,它也意味着过期数据会在一定的时间窗口内仍然存在于内存中。

如果你希望 Redis 在过期数据出现时立即删除它们并释放内存,你可以将 lazyfree-lazy-eviction 参数的值设置为 no。这样,Redis 将在过期数据出现时立即进行清理操作,但会增加一些额外的开销。

总结起来,lazyfree-lazy-eviction 参数用于控制 Redis 在释放内存时是否延迟操作。它对系统的性能和内存占用有一定的影响,可以根据实际需求进行配置。

lazyfree-lazy-expire

redis的lazyfree-lazy-expire参数用于控制redis在内存不足时对key进行过期处理的行为。

默认情况下,redis在内存不足时会尝试使用内部算法(LRU或近似LRU)主动删除一些过期的key或者value来腾出空间。然而,在某些情况下,这个处理方式可能会对性能产生负面影响,例如当数据库中有大量的过期key时。

lazyfree-lazy-expire参数可以控制redis在内存不足时是否延迟处理过期的key。当该参数设置为yes时,在内存不足时,redis仅仅执行一些最简单的检查,如果key确实过期了,那么直接删除该key。这种方式不会导致阻塞,但是可能会导致系统的内存使用超出阈值。

当该参数设置为no时,在内存不足时,redis会尝试通过算法删除过期的key或者value来腾出空间。这种方式可能会导致一些阻塞,但是可以保证系统的内存使用低于阈值。

使用lazyfree-lazy-expire参数可以根据系统的实际情况来进行调整,以平衡性能和内存使用的需求。

lazyfree-lazy-server-del

lazyfree-lazy-server-del是Redis配置参数,用于控制Redis服务器在删除数据库对象时的行为。

当Redis服务器删除一个数据库对象(例如key、hash field等)时,它可以选择是立即删除对象的内存、释放对象的内存空间,还是将对象放入到lazyfree过程中进行惰性删除。

默认情况下,Redis服务器使用lazyfree过程进行删除操作,这意味着它不会立即释放对象的内存空间,而是将对象添加到延迟删除链表中,然后在某个适当的时机进行回收。

lazyfree-lazy-server-del参数可选值为yesno,其中:

  • 当设置为yes时,Redis服务器将使用lazyfree过程进行删除操作,该过程可以将删除操作的成本分摊到更长的时间段中,在某些情况下可以提高性能。
  • 当设置为no时,删除操作将立即释放对象的内存空间,但会带来更多的内存碎片和额外的性能开销。

需要注意的是,lazyfree-lazy-server-del参数仅适用于Redis 4.0及以上版本。在Redis 4.0之前的版本中,不存在这个参数,默认行为是立即删除并释放对象内存空间。

在配置文件redis.conf中,可以通过添加以下行来设置lazyfree-lazy-server-del参数:

lazyfree-lazy-server-del yes

注意:对于大多数用户,保持默认值即可。只有在特定的场景下,例如内存不足、内存碎片等情况下,才需要考虑调整该参数的值。

replica-lazy-flush

replica-lazy-flush 是 Redis 的一个配置参数,它指定了 Redis 从主节点复制数据到从节点时的策略。

默认情况下,当主节点对键进行写操作后,它会立即将写操作的命令发送给从节点,以便从节点同步数据。但是,这种立即同步的方式可能会对从节点的性能产生影响,特别是在写入负载较重的情况下。

replica-lazy-flush 参数允许从节点尽可能地延迟同步数据,从而提高从节点的性能。当主节点对键进行写操作时,它会将写操作的命令先保存在内存缓冲区中。然后,当从节点请求同步数据时,主节点会将缓冲区中的所有命令一次性发送给从节点。

这种延迟同步的方式可以减少从节点与主节点之间的网络传输开销,提高从节点的性能。但是,它在从节点数据最终一致性方面可能会带来一定的延迟,因为从节点不是立即同步数据。 参数的值可以是以下选项之一:

  • yes:启用延迟同步策略。
  • no:禁用延迟同步策略。

默认值为 no

lazyfree-lazy-user-del

在 Redis 中,lazyfree-lazy-user-del 参数用于控制在 Redis 服务器进行懒惰删除(lazy freeing)时,是否采用懒惰删除用户数据。懒惰删除是一种内存回收机制,当 Redis 的内存使用达到最大限制时,会优先尝试删除过期的键和可能释放内存的键来减少内存使用。

该参数的默认值为 yes,表示懒惰删除会尝试删除用户的键值对以释放内存。如果将该参数设置为 no,则懒惰删除操作不会删除用户的键值对。

使用该参数可以在需要时权衡内存占用和数据完整性。如果数据的完整性比较重要,可以禁止懒惰删除以确保不会删除用户的数据;如果内存占用成为瓶颈,可以启用懒惰删除以释放更多的内存。

在 Redis 的配置文件 redis.conf 中可以通过设置 lazyfree-lazy-user-del no 来启用或禁用该参数。

lazyfree-lazy-user-flush

在Redis中,lazyfree-lazy-user-flush参数用于配置是否启用延迟释放内存的机制。默认情况下,该参数的值为yes,表示启用延迟释放内存。当启用延迟释放内存时,Redis会将需要释放的内存放入一个空闲内存链表中,而不是立即释放给操作系统。这样可以减少系统调用和内存分配的次数,提高内存使用率和性能。

下面是lazyfree-lazy-user-flush的相关配置选项和说明:

  • yes:启用延迟释放内存的机制。
  • no:禁用延迟释放内存的机制,即立即释放内存给操作系统。

该参数可以在Redis的配置文件redis.conf中进行设置,或者通过CONFIG SET命令在运行时进行修改。例如,要禁用延迟释放内存,可以执行以下命令:

CONFIG SET lazyfree-lazy-user-flush no

[ thread i/o ]

io-threads

在Redis 6中,io-threads参数是一个只在Windows上可用的设置,它用于指定Redis服务器进程使用的I/O线程数。I/O线程负责处理与网络IO相关的操作,包括接受和发送客户端请求。

使用io-threads参数可以改善Windows上Redis服务器的性能,特别是在处理大量客户端连接时。通过增加I/O线程数量,可以提高服务器的并发性能。

默认情况下,Redis 6在Windows上使用单个I/O线程。可以通过在Redis配置文件中添加io-threads参数来设置所需的I/O线程数量。示例如下:

io-threads 4

这将启动4个I/O线程用于处理网络IO操作。注意,io-threads参数只在Windows环境下有效,并且对其他操作系统没有影响。

请注意,在大多数情况下,增加I/O线程数可能会提高性能,但也会增加CPU和内存消耗。因此,在调整io-threads参数时,需要根据实际情况进行测试和评估,以获得最佳性能。

io-threads-do-reads

在 Redis 6 中,可以使用 io-threads-do-reads 参数来控制 Redis 启用或禁用 I/O 线程执行读操作。

默认情况下,Redis 的 I/O 处理是由主线程完成的,主线程会处理所有的读写操作。但是,如果 Redis 需要处理大量的读操作,主线程可能会成为瓶颈,限制系统的吞吐量。

为了提高 Redis 的读取性能,Redis 6 引入了 I/O 线程模型。在这个模型下,Redis 会创建一个或多个专门的 I/O 线程来处理读操作。

io-threads-do-reads 参数的值可以是以下几种:

  • yes:表示启用 I/O 线程执行读操作,默认值。
  • no:表示禁用 I/O 线程执行读操作。

将 Redis 配置文件中的 io-threads-do-reads 参数设置为 yes,可以启用 I/O 线程执行读操作。这将在 Redis 启动时创建一个或多个 I/O 线程,并将读操作委托给这些线程处理,从而提高读取性能。

请注意,在 Redis 中启用 I/O 线程执行读操作有一些限制和注意事项,具体取决于操作系统和网络库的支持情况。在某些情况下,启用此功能可能并不总是有效或可行。

[ kernel oom control ]

oom-score-adj

在Redis 6中,oom-score-adj参数是一个可配置的内存管理参数。它用于调整Redis在内存不足时的内存淘汰策略。oom-score-adj参数的取值范围为-100到100,默认值为0。

当Redis使用的内存超过了maxmemory限制时,Redis需要根据一定策略进行内存淘汰,释放一部分内存。oom-score-adj参数的作用就是调整这个策略,使得Redis可以更加智能地决定哪些数据可以被淘汰。

具体来说,oom-score-adj参数可以有以下取值:

  • 0:默认值,表示使用Linux的内存管理策略。
  • 正数(1到100):表示Redis的内存不足时,会优先淘汰新对象。较高的值可能会导致更频繁的数据淘汰,但可以更快地释放内存。
  • 负数(-1到-100):表示Redis的内存不足时,会优先淘汰旧对象。较低的值可能会导致更慢的数据淘汰,但可以更好地保护经常访问的数据。

这个参数的具体取值需要根据具体的内存管理需求进行调整。较高的值可以更快地释放内存,但可能会导致更多的数据淘汰和过多的系统开销。较低的值可以更好地保护经常访问的数据,但可能导致内存释放较慢。

oom-score-adj参数的调整可以通过配置文件redis.conf来设置,或者在Redis启动时通过命令行参数进行设置。

oom-score-adj-values

在Redis 6中,oom-score-adj-values参数用于指定Redis内存超限时的oom_score_adj值。

oom_score_adj是Linux内核用于计算进程OOM(Out-of-Memory)被终止的顺序的值。当系统内存不足时,操作系统会根据进程的oom_score_adj值决定哪些进程需要被终止以释放内存。

oom-score-adj-values参数是一个可配置的选项,用于指定Redis进程的oom_score_adj值的范围。该参数的格式为两个整数值,分别表示范围的最小值和最大值。默认值为"100 0",即Redis进程的oom_score_adj值在范围[100, 0]之间。

当Redis进程的内存使用超过maxmemory配置的限制时,Redis会触发内存驱逐策略来释放内存。如果释放内存后仍然无法满足需求,并且进程的oom_score_adj值在oom-score-adj-values参数指定的范围内,则Redis会尝试设置进程的oom_score_adj值为0。

通过调整oom-score-adj-values参数,可以控制Redis进程与其他进程之间的OOM终止顺序。较小的oom_score_adj值表示进程更有可能被终止,而较大的值表示进程更不容易被终止。

请注意,修改oom-score-adj-values参数可能需要root权限,并且应该谨慎操作,以免影响系统的稳定性和其他进程的正常运行。

[ kernel transparent hugepage control ]

disable-thp

在Redis 6中,有一个名为disable-thp的新参数,用于禁用Transparent Huge Pages(THP)。

Transparent Huge Pages是一种Linux内核功能,用于增加内存分配效率。但是,在某些情况下,THP可能会导致Redis的性能下降或不稳定。因此,Redis提供了disable-thp参数,用于禁用THP。

要禁用THP,可以在Redis配置文件中添加以下行:

disable-thp yes

这将告诉Redis在启动时禁用THP。

请注意,禁用THP可能会导致系统中其他应用程序的性能下降。因此,在决定是否禁用THP时,需要综合考虑系统的整体性能和需求。

此外,disable-thp参数只在Linux上有效,而在其他操作系统上将被忽略。

[ append only mode ]

appendonly

在 Redis 6 中,appendonly 参数用于配置 AOF(Append Only File)持久化方式。

AOF 是一种持久化方式,它将 Redis 服务器执行的所有写命令追加到文件末尾。当 Redis 服务器重启时,它会通过重新执行以前记录的命令来重建数据集。appendonly 参数可以设置三个选项:

  1. no:默认值,表示禁用 AOF 持久化方式。
  2. yes:启用 AOF 持久化方式,并在服务器每次执行写命令时将其追加到 AOF 文件末尾。
  3. always:启用 AOF 持久化方式,并在每个事件循环周期执行时将其追加到 AOF 文件末尾。这可以更频繁地持久化数据,但也可能对性能产生负面影响。

使用以下命令可以设置 appendonly 参数:

CONFIG SET appendonly <option>

其中,<option> 可以是 noyesalways

请注意,在修改 appendonly 参数后,需要重启 Redis 服务器使其生效。

appendfilename

在Redis 6版本中,appendfilename参数用于配置AOF(Append Only File)文件的名称,它指定了将AOF文件追加到磁盘上的文件名。

默认情况下,appendfilename参数的值是"appendonly.aof",即AOF文件名为appendonly.aof。在Redis服务器启动时,如果没有指定AOF文件名,则会使用默认值。

可以通过修改Redis配置文件(redis.conf)来更改appendfilename参数的值,或者在启动Redis服务器时使用命令行参数--appendfilename来指定。

以下是一个示例配置文件中appendfilename参数的设置:

appendfilename "appendonly.aof"

在Redis的运行过程中,如果需要更改appendfilename参数的值,可以使用CONFIG SET命令进行动态修改,例如:

CONFIG SET appendfilename new_appendonly.aof

注意:修改appendfilename参数的值后,需要重启Redis服务器才能使更改生效。

appendfsync

在Redis 6中,appendfsync参数有以下三个选项:

  1. always:每次有新的写命令被执行,都会直接将写命令同步到磁盘上的 AOF 文件。这是最安全的选项,但也可能会导致较低的性能。
  2. everysec:每秒将写命令同步到磁盘上的 AOF 文件。这是默认的选项,可以在保证一定的数据安全性的同时,获得较好的性能。
  3. no:将写命令交给操作系统的缓存,并由操作系统自行决定何时将数据同步到磁盘上的 AOF 文件。这是最高性能的选项,但也可能导致数据丢失的风险。

可以通过修改Redis配置文件中的appendfsync参数来设置相应的选项。

no-appendfsync-on-rewrite

在 Redis 6 中,no-appendfsync-on-rewrite 参数被废弃了。在之前的版本中,该参数用于指定当进行 AOF 重写操作时,是否要禁用 AOF 文件的 fsync 操作,以提高性能。

在 Redis 中,AOF 文件是用于持久化数据的一种方法,它记录了 Redis 服务器接收到的所有写命令,可以通过回放 AOF 文件来恢复数据。当进行 AOF 重写操作时,Redis 会通过遍历现有的数据来创建一个新的 AOF 文件,由于这个操作可能会耗费较长的时间,为了避免频繁进行 disk I/O 操作,Redis 以及提供了 no-appendfsync-on-rewrite 参数。

no-appendfsync-on-rewrite 参数的值为 yes 时,Redis 在进行 AOF 重写操作的时候,不会对新生成的 AOF 文件进行 fsync 操作,即不会强制将数据写入磁盘。这样可以大大提高 AOF 重写操作的性能,但也增加了数据安全性的风险,因为如果在 AOF 重写过程中发生服务器崩溃,那么新生成的 AOF 文件可能会丢失。

在 Redis 6 中,no-appendfsync-on-rewrite 参数被废弃了,这意味着在进行 AOF 重写操作时,Redis 会始终执行 fsync 操作,以确保数据的安全性。如果你需要在 Redis 6 中禁用 AOF 重写时的 fsync 操作,你可以考虑使用其他的方法,比如将 fsync 设置为 no来禁用 AOF 持久化操作。

auto-aof-rewrite-percentage

在Redis 6中,auto-aof-rewrite-percentage是一个配置参数,用于设置自动AOF重写的条件。

AOF(Append-Only File)是Redis中一种持久化数据的方式,它将每个写命令追加到AOF文件的末尾,以便在Redis重启时恢复数据。由于AOF文件会随着时间的推移不断增长,为了避免文件过大导致读写效率下降,Redis提供了自动AOF重写功能。当AOF文件大小超过自动重写阈值时,Redis将启动AOF重写过程,通过重写来压缩AOF文件,减小其大小。

auto-aof-rewrite-percentage参数用于设置自动AOF重写的百分比阈值。默认情况下,它的值为100,表示AOF文件大小超过当前大小的100%时会触发自动重写。如果将其设置为0,则表示禁用自动重写功能。

例如,设置auto-aof-rewrite-percentage 50将会在AOF文件大小超过当前大小的50%时触发自动重写。

请注意,auto-aof-rewrite-percentage只是一个配置参数,对已经存在的AOF文件不会立即生效。只有在下一次Redis重启时才会应用该配置。

auto-aof-rewrite-min-size

在Redis 6中,auto-aof-rewrite-min-size是一个配置参数,用于设置自动AOF重写的最小文件大小。AOF重写是将AOF文件重建为具有更紧凑格式的操作日志的过程,可以减小AOF文件的大小并提高性能。

默认情况下,auto-aof-rewrite-min-size的值为64MB。这意味着当AOF文件的大小达到或超过64MB时,Redis将自动触发AOF重写。但是,如果你希望设置不同的最小大小来触发AOF重写,你可以修改这个参数。

你可以使用以下命令在Redis的配置文件中设置auto-aof-rewrite-min-size参数的值:

auto-aof-rewrite-min-size <size>

其中,是一个整数,并且可以使用以下单位进行指定:K、M、G。例如,如果想将最小文件大小设置为128MB,可以使用以下命令:

auto-aof-rewrite-min-size 128mb

需要注意的是,修改该参数后需要重启Redis才能生效。另外,设置一个较小的值可能会导致更频繁的AOF重写操作,因此需要权衡文件大小和性能之间的关系。

aof-load-truncated

在Redis 6中,aof-load-truncated参数是一个布尔参数,指示Redis在启动时如何处理AOF日志被截断的情况。

当AOF(Append Only File)日志被异常截断或损坏时,Redis可以采取以下三种处理方式:

  1. 如果aof-load-truncatedyes(默认值),Redis将尝试加载截断的部分,并且还原到最后一个有效命令之前的状态。这意味着可能会丢失部分数据,但可以最大程度地恢复准确性。
  2. 如果aof-load-truncatedno,Redis将拒绝启动,并输出一个错误消息,告知用户出现了AOF截断的情况。这种情况下,Redis不会尝试恢复数据,需要用户手动处理修复问题。
  3. 如果aof-load-truncatedyes-corrupted,Redis将尝试加载截断的部分,但是在加载期间会忽略所有的错误。这意味着你可能会遇到某些异常数据,但是Redis会尽力恢复尽可能多的数据。

以上是aof-load-truncated参数的使用方式和说明,不同的取值可以根据需要进行设置。

aof-use-rdb-preamble

在 Redis 6 中,有一个名为 aof-use-rdb-preamble 的参数。这个参数决定了在 AOF 文件中是否使用RDB 头部。

aof-use-rdb-preamble 设置为 yes(默认值)时,启用了 AOF 文件的 RDB 头部信息。也就是说,在 AOF 文件最开始的地方,会先写入 RDB 文件的内容,然后再写入 AOF 的操作日志。这样做的好处是,当恢复数据时,Redis 可以选择快速加载 RDB 文件,而无需执行 AOF 日志的逐条操作。这样可以提高数据的恢复速度。

aof-use-rdb-preamble 设置为 no 时,禁用了 AOF 文件的 RDB 头部信息。也就是说,AOF 文件只记录操作日志,不包含 RDB 文件的内容。这样做的好处是,AOF 文件会变得更加紧凑,占用更少的磁盘空间。但恢复数据时,就需要执行完整的 AOF 日志操作,恢复速度可能较慢。

需要注意的是,在 Redis 6 中,只有在 AOF 文件的开头存在 RDB 文件的情况下,才能启用 aof-use-rdb-preamble 参数。如果 AOF 文件开头没有 RDB 文件的内容,则无论 aof-use-rdb-preamble 的值是什么,都不会使用 RDB 头部信息。

[ lua scripting ]

lua-time-limit

在Redis 6的版本中,lua-time-limit参数被引入以限制Lua脚本的执行时间。该参数用于控制在单个命令中执行Lua脚本的最大时长。

默认情况下,lua-time-limit参数的值为5000毫秒(5秒)。这意味着如果执行的Lua脚本超过5秒钟,Redis服务器将主动终止脚本的执行,并返回错误信息。

你可以使用CONFIG SET命令来修改lua-time-limit参数的值。例如,要将最大执行时间设置为10秒,你可以执行以下命令:

CONFIG SET lua-time-limit 10000

需要注意的是,修改lua-time-limit参数的值可能会对Redis服务器的性能产生影响。如果你希望执行比默认时间更长的Lua脚本,可以适当调整lua-time-limit的值,但请确保在调整之前评估服务器的资源使用情况和性能影响。

[ redis cluster ]

cluster-enabled

在Redis6中,cluster-enabled参数已被废弃。Redis 6通过引入Redis Cluster来支持分布式集群,不再需要手动配置cluster-enabled参数。

在Redis 6中,要启用集群模式,需要在配置文件中进行以下配置:

  • 配置节点的端口号和IP地址:
port 6379 bind 0.0.0.0
  • 配置节点的名称:
cluster-enabled yes cluster-node-name "my-node-1"
  • 配置集群节点的初始主从关系:
cluster-announce-ip <node_ip_address>
cluster-announce-port <node_port>
cluster-announce-bus-port <node_bus_port>
  • 对于每个节点,需要配置集群中其他节点的IP地址和端口号:
cluster-announce-addr <ip_address>:<port>
  • 配置节点是否是主节点或从节点:
cluster-announce-skip-slots-error no

需要注意的是,Redis 6的集群模式还处于实验阶段,可能会有一些限制和不稳定性。在生产环境中使用时,请谨慎评估和测试。

cluster-config-file

在Redis 6中,cluster-config-file是一个配置参数,用于指定集群模式中的配置文件路径。

默认情况下,Redis的集群模式使用名为nodes.conf的文件作为配置文件,该文件保存了集群的状态和拓扑信息。当Redis启动时,它会加载配置文件并使用其中的信息来初始化集群。

你可以在Redis的配置文件中使用cluster-config-file参数来指定集群配置文件的路径。例如:

cluster-config-file /path/to/cluster.conf

这将将集群配置文件的路径设置为/path/to/cluster.conf。请确保Redis对指定的路径具有读写权限。

注意,cluster-config-file参数只在Redis以集群模式启动时起作用,对于独立的Redis实例是无效的。

cluster-node-timeout

在Redis 6中,cluster-node-timeout参数用于配置集群节点之间的超时时间。

当Redis集群中的节点之间无法正确通信时,将会触发超时判定。这可能是由于网络故障、节点崩溃或其他原因导致的不可用性。

默认情况下,cluster-node-timeout参数的值为15000毫秒(15秒)。如果一个节点在指定的超时时间内没有回复其他节点的心跳检测请求,那么这个节点将被判定为不可靠节点,并被集群删除。

可以通过修改此参数来调整节点超时的时间。较小的值会导致节点更快地被判定为不可靠节点,但也可能会增加错误报告的可能性。较大的值则会延长超时时间,允许更多的网络故障自动恢复,但也会增加集群自动恢复所需的时间。

可以在Redis配置文件中设置cluster-node-timeout参数,或者在启动Redis服务器时通过命令行参数进行设置。例如:

cluster-node-timeout 20000

上述示例将超时时间设置为20000毫秒(20秒)。

请注意,修改此参数可能会对Redis集群的性能和可用性产生重要影响,请谨慎设置。

cluster-replica-validity-factor

在Redis 6中,cluster-replica-validity-factor是一个用于配置集群拓扑的参数。

该参数的作用是控制集群中主节点与从节点复制完整数据集的比例。当从节点与主节点复制的数据集的比例达到cluster-replica-validity-factor所指定的值时,从节点将被标记为有效副本。

默认情况下,cluster-replica-validity-factor的值为10。这意味着从节点必须复制主节点数据集的至少10%才会被标记为有效副本。

对于大型集群或需要更高的数据完整性的环境,可以将该参数的值调整为更高的值,以确保从节点具有足够的数据复制。

值得注意的是,调整cluster-replica-validity-factor的值可能会导致复制的延迟,因为从节点需要复制更多的数据。因此,在调整该参数时需要权衡数据完整性和性能。

要配置cluster-replica-validity-factor参数,可以在Redis配置文件中添加以下行:

cluster-replica-validity-factor <value>

其中<value>是一个整数,表示要设置的参数值。

修改完成后,重启Redis节点以使更改生效。

cluster-migration-barrier

在Redis 6中,cluster-migration-barrier是一个新的参数,用于控制集群迁移操作。

Redis集群迁移是将一个或多个主节点的槽位迁移到其他主节点上的过程。在迁移过程中,数据在不同主节点之间进行传输和同步。

cluster-migration-barrier参数用于控制迁移操作的顺序。它可以设置为以下几种不同的值:

  1. always:总是在主节点和从节点之间进行同步,对于每个迁移的握手步骤都会等待从节点同步完所有槽位数据。
  2. majority:只有当大多数从节点都完成了同步后才进行下一步握手。这可以保证数据的一致性,但可能会对迁移速度产生较大影响。
  3. each:对于每个从节点都进行等待,直到所有从节点完成同步。这将保证每个从节点都具有完整的数据副本,但会极大地减慢迁移速度。

默认值为always,这是最保守和确保数据一致性的选项。根据具体情况和需求,可以根据实际情况调整参数值。

参数设置示例:

cluster-migration-barrier majority

cluster-allow-replica-migration

cluster-allow-replica-migration是Redis 6新引入的一个配置参数,用于控制是否允许在集群模式下进行主从迁移。当该参数设置为yes时,表示允许主节点将从节点迁移至其它主节点。默认情况下,该参数的值是no

这个参数的引入是为了解决Redis集群的一个限制,即在之前的版本中,从节点只能迁移至其原来所属的主节点,限制了集群的弹性和灵活性。通过设置该参数为yes,可以打破这个限制,使得从节点可以在集群中移动到不同的主节点。

需要注意的是,当从节点迁移至新的主节点时,会引起重新同步数据的过程,这可能会对网络带宽和集群性能产生一定的影响。因此,在启用该参数之前,需要仔细评估网络和系统资源的情况,确保集群的稳定性和可用性。

cluster-require-full-coverage

在Redis 6中,cluster-require-full-coverage参数用于指定是否要求Redis Cluster集群的所有槽位都被分配到有效的节点上。

默认情况下,cluster-require-full-coverage参数设置为yes,即要求集群的所有槽位都必须被分配到有效的节点上。如果有任何槽位没有被分配到节点或者对应的节点不可用,集群将无法正常工作。

如果将cluster-require-full-coverage参数设置为no,集群可以在部分槽位未被分配或者对应的节点不可用的情况下正常工作。这样的话,未被分配的槽位将被视为没有映射到实际节点的槽位。

需要注意的是,将cluster-require-full-coverage参数设置为no可能导致数据的丢失或者集群不可用,因此需要谨慎使用。通常情况下,建议将该参数设置为yes,以确保集群的完整性和可用性。

cluster-replica-no-failover

在Redis 6中,没有一个名为cluster-replica-no-failover的参数。然而,Redis引入了一个名为replica-ignore-maxmemory的新参数,它允许从节点继续接受写入请求,即使从节点的内存超过了设定的最大内存限制。

若要禁用Redis 6中的从节点故障转移,请使用replica-ignore-maxmemory参数。在配置文件中,可以将该参数设置为yes,或者通过CONFIG SET命令进行动态设置。

请注意,在禁用从节点故障转移时,从节点可能会出现内存不足、数据丢失等问题。因此,在设置replica-ignore-maxmemory参数之前,请确保从节点的内存配置足够大,以避免出现不可预料的情况。

cluster-allow-reads-when-down

在Redis 6中,有一个名为cluster-allow-reads-when-down的参数。这个参数用于决定在Redis Cluster中的一个主节点下线时, 其他从节点和主节点是否允许读取数据。

默认情况下,cluster-allow-reads-when-down参数的值为yes,意味着即使主节点下线,其他节点仍然可以执行读取操作。这意味着即使主节点不可用,客户端仍然可以获得数据的最新副本。

如果将cluster-allow-reads-when-down参数设置为no,则当主节点下线时,其他节点将拒绝任何读取操作。这可以确保读取操作不会返回过时的数据,但也会导致在主节点下线期间无法执行读取操作。

要设置cluster-allow-reads-when-down参数,可以使用Redis的配置文件(redis.conf)或在启动Redis时使用命令行参数进行设置。例如,可以使用以下命令启动Redis并设置cluster-allow-reads-when-down参数为no

redis-server --cluster-allow-reads-when-down no

请注意,cluster-allow-reads-when-down参数仅适用于Redis Cluster,不适用于单机Redis实例。在单机实例中,始终允许读取操作。

[ cluster docker/nat support ]

cluster-announce-ip

在Redis 6中,cluster-announce-ip参数用于设置集群节点的IP地址。当Redis节点启动时,它会自动向其他节点宣布自己的IP地址,以便其他节点可以找到并与其建立连接。

cluster-announce-ip参数的默认值为空字符串,表示节点将使用其所在主机的IP地址。如果需要使用特定的IP地址,则可以将该参数设置为所需的IP地址。

以下是设置cluster-announce-ip参数的示例配置:

cluster-announce-ip 192.168.1.100

在这个示例中,节点将使用IP地址192.168.1.100来进行集群节点的宣布。

需要注意的是,Redis 6中的集群节点发现机制已经改变,除了cluster-announce-ip参数,还有其他参数也需要设置,如cluster-announce-portcluster-announce-bus-port。这些参数用于指定节点的端口号和总线端口号,以便其他节点可以通过这些信息来发现和连接到该节点。

cluster-announce-tls-port

在Redis 6中,cluster-announce-tls-port是一个参数,用于配置Redis集群节点与其他节点通信时使用的TLS端口。

集群通常使用Gossip协议进行节点之间的发现和通信。当启用TLS加密时,集群节点需要使用加密的端口进行通信。

cluster-announce-tls-port参数用于指定TLS端口号。当一个节点通过Gossip广播自己的信息时,它会包含该节点的IP地址和TLS端口号。其他节点将使用这些信息来建立与给定节点的TLS连接。

以以下方式设置cluster-announce-tls-port参数:

cluster-announce-tls-port <port_number>

其中,<port_number>是指定的TLS端口号。

需要注意的是,该参数需要在Redis配置文件中进行设置,并且需要在集群节点启动之前进行配置。在集群运行期间更改该参数将不会生效。

cluster-announce-port

在Redis 6中,cluster-announce-port是一个用于集群通信的可选参数。它指定了Redis节点在集群中进行通信时使用的端口号。

默认情况下,Redis节点使用的是6379端口,但是在某些情况下,你可能需要将集群通信端口设置为不同的值。例如,如果你在同一主机上运行多个Redis节点,并且每个节点都使用相同的IP地址但不同的端口号,那么你可以使用cluster-announce-port来设置不同的通信端口。

要在Redis配置文件(redis.conf)中设置cluster-announce-port参数,你可以按照以下格式进行设置:

cluster-announce-port <port>

其中,<port>是你要使用的端口号。

请注意,当更改cluster-announce-port的值时,你还需要相应地更新集群其他节点(包括主节点和从节点)的配置文件,以便它们能够识别并连接到更新后的端口。

在Redis 6中,通过使用cluster-announce-port参数可以很方便地配置集群节点之间的通信端口号。

cluster-announce-bus-port

在 Redis 6 中,cluster-announce-bus-port 是一个用来配置集群节点之间通信的端口参数。

当 Redis 集群启动时,它将使用 cluster-announce-bus-port 参数指定的端口来进行集群节点之间的通信。这个端口用于 Redis 集群节点之间的Gossip协议通信,Gossip协议用于发现和更新集群拓扑。

以下是 cluster-announce-bus-port 的一些关键信息:

  • 类型:整数

  • 默认值:0

  • 可配置范围:1024-65535

  • 作用:指定 Redis 集群节点之间通信的端口

一般情况下,用户无需配置 cluster-announce-bus-port 参数,因为 Redis 会自动选择一个可用的端口进行通信。但如果用户希望手动配置端口,可以通过在配置文件中设置该参数来完成。

cluster-announce-bus-port 12345

需要注意的是,为了确保集群正常运行,cluster-announce-bus-port 参数必须在所有节点的配置文件中保持一致。一旦设置了这个参数,建议不要更改它,除非有特殊的需求。

[ slow log ]

slowlog-log-slower-than

在Redis 6及以上版本中,slowlog-log-slower-than参数用于设置慢查询日志的阈值。慢查询是指执行时间超过指定阈值的Redis查询。

该参数的默认值为0,表示不启用慢查询日志。可以通过将该参数设置为一个非负整数值来开启慢查询日志,并指定执行时间的阈值。单位为微秒(μs)。

例如,设置 slowlog-log-slower-than 参数为10000,表示执行时间超过10毫秒的查询将被记录到慢查询日志中。

可以使用CONFIG SET命令来设置该参数的值,如下所示:

CONFIG SET slowlog-log-slower-than 10000

需要注意的是,较小的阈值会记录更多的查询到慢查询日志中,可能会导致日志文件变得非常大。因此,在设置该参数时需要权衡查询的执行时间和系统性能。

slowlog-max-len

是用来设置慢查询日志列表的最大长度的参数。慢查询日志记录了执行时间超过指定阈值的命令,可以用来分析性能瓶颈。

在Redis 6及以后的版本中,默认值为128,最小值为0(表示禁用慢查询日志),最大值为2^32-1

可以通过修改redis.conf配置文件或者在运行时使用CONFIG SET命令来设置该参数。

例如,要将慢查询日志列表的最大长度设置为1000,可以执行以下命令:

CONFIG SET slowlog-max-len 1000

[ latency monitor ]

latency-monitor-threshold

在Redis 6中,latency-monitor-threshold是一个用于配置Redis监视延迟命令的参数。

该参数用于设置Redis监视系统的阈值,用于判定某个命令是否被认为是延迟命令。默认情况下,该参数的值为0,表示禁用延迟监视。

latency-monitor-threshold参数的值大于0时,Redis会监视每个命令的执行时间,并将执行时间超过阈值的命令视为延迟命令。延迟命令将被记录在慢查询日志中。

可以通过Redis的配置文件或者动态修改配置来设置latency-monitor-threshold参数的值。

例如,要将latency-monitor-threshold参数设置为100毫秒,可以在Redis启动时修改配置文件:

conf latency-monitor-threshold 100

或者通过Redis的CONFIG SET命令动态修改:

CONFIG SET latency-monitor-threshold 100

请注意,较低的阈值会增加慢查询日志的大小和IO开销。因此,建议根据应用程序的需求和实际情况,谨慎设置latency-monitor-threshold参数的值。

[ event notification ]

notify-keyspace-events

在Redis 6中,notify-keyspace-events参数用于配置触发键空间通知的事件类型。该参数的默认值为空字符串,表示不触发任何键空间通知。

notify-keyspace-events参数可以包含以下几种事件类型:

  • K表示触发所有keyspace事件。
  • E表示触发所有键事件。
  • g表示触发DELEXPIRERENAMEEXPIREATUNLINK等常规键事件。
  • $表示触发字符串类型键事件。
  • l表示触发列表类型键事件。
  • s表示触发集合类型键事件。
  • h表示触发哈希类型键事件。
  • z表示触发有序集合类型键事件。
  • x表示触发过期事件(设置了过期时间的键的事件)。
  • e表示触发过期事件(键已过期的事件)。
  • A表示触发DELEXPIRERENAMEEXPIREATUNLINK等常规键事件的通用别名。
  • lshz表示触发列表、集合、哈希和有序集合类型键事件的通用别名。
  • all表示触发所有事件的通用别名。

可以通过将多个事件类型连接在一起来组合多个事件类型。例如,"KE"表示触发所有键和所有键空间事件。

可以使用CONFIG SET命令来设置notify-keyspace-events参数的值。例如,要设置notify-keyspace-events参数为K$e,可以执行以下命令:

CONFIG SET notify-keyspace-events K$e

[ gopher server ]

gopher-enabled

在 Redis 6 中,Gopher 是 Redis 的一个新特性,它是一种用于检查 Redis 内部状态的方便工具。Gopher 具有以下参数:

  • gopher-enabled:默认值为 no。设置为 yes后启用 Gopher 特性。 使用 Gopher 特性可以在连接到 Redis 服务器上时发送特殊的命令来检查内部状态。例如,可以使用 "PING" 命令以及扩展的命令(以 "_" 开头)来获得不同类型的信息,如内部线程状态、内存分配状态等。

以下是一些使用 Gopher 检查内部状态的示例命令:

PING
_GREAD hello
_GC

要使用 Redis 6 的 Gopher 特性,首先需要启用 gopher-enabled 参数。在 redis.conf 配置文件中将该参数设置为 "yes",然后重启 Redis 服务器。

除了启用 gopher-enabled 参数,还需要在连接 Redis 客户端是使用的客户端库中添加 Gopher 特性的支持。具体的实现和用法可以参考相关的 Redis 客户端库文档。

[ advanced config ]

hash-max-ziplist-entries

hash-max-ziplist-entries参数是Redis中用于配置哈希表数据结构的压缩列表编码的最大元素数量。压缩列表编码是一种紧凑的、高效的编码方式,可以用来存储一个哈希表。当哈希表中的元素数量小于或等于hash-max-ziplist-entries时,Redis使用压缩列表编码来存储哈希表。

hash-max-ziplist-entries的默认值为512。可以根据系统的需求调整该参数的值。较小的值可以节省内存,但可能会增加CPU的开销,因为需要更频繁地进行内存分配和释放。较大的值可以提高读取哈希表的性能,但会增加内存的消耗。

要设置hash-max-ziplist-entries的值,可以在Redis的配置文件(redis.conf)中添加或修改以下行: hash-max-ziplist-entries 1000

上述示例将hash-max-ziplist-entries的值设置为1000。设置完成后,需要重启Redis服务器才能使该修改生效。

除了hash-max-ziplist-entries,还有其他一些与哈希表数据结构的压缩列表编码相关的参数,如hash-max-ziplist-value,可以用于进一步优化哈希表的存储和性能。

hash-max-ziplist-value

在Redis 6中,hash-max-ziplist-value参数用于设置zipped encoding方式存储的哈希表中,值的最大长度。该参数的默认值是64,表示如果哈希表中的值的长度超过64字节,则会使用非zipped encoding方式存储。

如果将hash-max-ziplist-value参数设置为0,则表示禁用zipped encoding方式,所有的哈希表值都会使用非zipped encoding方式存储。

通过调整hash-max-ziplist-value参数,可以在减少内存使用和提高CPU效率之间找到一个平衡点。较小的值可以减少内存使用,但会增加CPU消耗来解压缩值;较大的值可以提高CPU效率,但会增加内存使用。

可以通过CONFIG SET命令来动态地修改hash-max-ziplist-value参数的值。例如,要将hash-max-ziplist-value参数的值设置为128,可以使用以下命令:

CONFIG SET hash-max-ziplist-value 128

list-max-ziplist-size

在Redis 6中,list-max-ziplist-size参数用于设置ziplist编码方式下,列表(list)数据结构的最大长度。ziplist是一种紧凑且高效的列表编码方式,它将列表中的每个元素连续存储在一块内存中,可以使得列表数据结构在占用更少的内存空间的同时提供较好的读写性能。

list-max-ziplist-size参数的默认值为8192,表示当列表长度大于等于8192个元素时,将自动使用一种更适合大列表的编码方式。可以通过修改参数值来调整列表编码方式的阈值。

需要注意的是,修改list-max-ziplist-size参数的值可能会影响到Redis的内存使用和性能。较小的值将导致更多的内存使用,但可能提升读写性能;较大的值将减少内存使用,但可能降低读写性能。

可以通过在Redis配置文件(redis.conf)或使用CONFIG SET命令来修改list-max-ziplist-size参数的值。例如,以下命令将list-max-ziplist-size参数设置为16384:

CONFIG SET list-max-ziplist-size 16384

list-compress-depth

Redis 6引入了一个新的配置参数list-compress-depth,用于控制在列表数据结构中进行压缩的深度。

列表数据结构在Redis内部是使用链表实现的,并且可以通过压缩来节省内存。在默认情况下,Redis会尝试对列表进行压缩,以减少连续存储相同元素的空间占用。当列表中连续的元素大于list-compress-depth时,Redis会执行压缩。

list-compress-depth的默认值为0,表示禁用压缩。如果将其设置为正数n,则Redis将尝试在链表中的每n个连续元素之后进行压缩。较大的值会导致更高的压缩率,但也会增加空间处理的开销。较小的值会减少开销,但可能无法达到较高的压缩率。

可以通过配置文件或通过CONFIG SET命令来设置list-compress-depth参数的值。以下示例将list-compress-depth设置为3:

CONFIG SET list-compress-depth 3

需要注意的是,list-compress-depth参数只适用于新创建的列表。对于已经存在的列表,需要将其转换为压缩格式,可以使用DEBUG RESEQUENCE <key>命令。

DEBUG RESEQUENCE mylist

上述命令将列表mylist转换为压缩格式,并启用压缩。

set-max-intset-entries

在Redis 6.0版本中,set-max-intset-entries参数用于配置在集合(set)数据类型中切换底层数据结构的阈值。在默认情况下,Redis会使用整数集合(intset)作为集合的底层数据结构,这是一种紧凑且高效的数据结构。

当集合中的元素数量超过set-max-intset-entries的值时,Redis会自动将底层数据结构切换为哈希表(hash table),以支持更大数量的元素。哈希表的缺点是占用更多的内存空间和执行时间。

set-max-intset-entries的默认值为512,意味着当集合中的元素数量超过512时,底层数据结构将从整数集合切换为哈希表。

你可以通过修改Redis配置文件中的set-max-intset-entries参数的值来调整阈值。例如,将它的值设置为1024,表示集合中的元素数量超过1024时切换为哈希表。

需要注意的是,当集合切换到哈希表时,Redis可能会分配更多的内存,因此需要在内存使用和性能之间权衡选择。

zset-max-ziplist-entries

在Redis 6中,zset-max-ziplist-entries是一个用于配置有序集合(ZSET)的参数,它用于控制有序集合在使用压缩列表(ziplist)编码时的最大条目数量。

压缩列表是一种特殊的数据结构,可以用于在存储有序集合时减少内存使用。当有序集合中的条目数量较少时,Redis可以选择使用压缩列表编码来节省内存。zset-max-ziplist-entries参数用于控制当有序集合的条目数量超过该阈值时,Redis将自动将压缩列表转换为普通的跳跃表数据结构,以便更好地支持高效的操作。

默认情况下,zset-max-ziplist-entries参数的值为128。这意味着在有序集合中最多可以容纳128个条目,超过这个数量的话,Redis将自动将压缩列表转换为跳跃表。

你可以使用CONFIG SET命令来修改zset-max-ziplist-entries参数的值。例如,要将其设置为256,可以执行以下命令:

CONFIG SET zset-max-ziplist-entries 256

请注意,如果你将zset-max-ziplist-entries设置为较高的值,将使用更多的内存来存储有序集合,但可能会改善性能。在调整此参数时,你需要权衡内存使用和性能之间的关系。

zset-max-ziplist-value

在Redis 6版本中,zset-max-ziplist-value参数用于配置有序集合(ZSET)使用压缩列表作为内部数据结构时,压缩列表的最大值。压缩列表是一种用于节约内存的数据结构,当有序集合中的元素数量较少或元素的值较小时,Redis会使用压缩列表来存储有序集合,而不是使用更常见的跳跃表和哈希表结构。

zset-max-ziplist-value参数的默认值为64,表示当存储在压缩列表中的有序集合的元素值的大小(包括分值和成员值)小于等于64字节时,会使用压缩列表作为内部数据结构。如果有序集合的元素值的大小超过了64字节,则Redis会自动转换为使用跳跃表和哈希表结构来存储有序集合。

你可以使用CONFIG SET命令来修改zset-max-ziplist-value参数的值。例如,将其设置为128字节:

CONFIG SET zset-max-ziplist-value 128

需要注意的是,修改该参数后,对已经存在的有序集合不会生效,只会对后续创建的有序集合起作用。另外,将zset-max-ziplist-value设置为0表示永远不使用压缩列表作为有序集合的内部数据结构,总是使用跳跃表和哈希表结构。

hll-sparse-max-bytes

在Redis 6中,新增了一个名为hll-sparse-max-bytes的参数,用来控制稀疏HyperLogLog结构的最大保存字节数。HyperLogLog是一种用于进行基数估计的数据结构,通过牺牲一定的精确度来减小占用的内存空间。

默认情况下,Redis会使用密集型的HyperLogLog结构来保存和计算基数估计。但是,当基数估计值较小时,使用密集型结构可能会浪费大量的内存。为了解决这个问题,Redis 6引入了稀疏HyperLogLog结构,并通过hll-sparse-max-bytes参数来控制其最大保存字节数。

当稀疏HyperLogLog结构占用的字节数超过hll-sparse-max-bytes时,Redis会自动将其转换为密集型结构,以提高精确度。这个参数的默认值是1KB,可以根据实际需要进行调整。

需要注意的是,当稀疏HyperLogLog结构被转换为密集型结构时,Redis需要使用更多的内存来保存数据,因此可能会导致内存占用的增加。因此,在设置hll-sparse-max-bytes参数时,需要综合考虑基数估计的精确度和内存占用之间的平衡。

可以通过以下命令来查看和设置hll-sparse-max-bytes参数的值:

CONFIG GET hll-sparse-max-bytes
CONFIG SET hll-sparse-max-bytes <value>

stream-node-max-bytes

redis 6中的stream-node-max-bytes参数用于设置stream节点的最大字节数。每个stream节点都是由多个消息组成的,并且每个消息都有一定的字节数。该参数用于限制stream节点的最大字节数,以避免节点过大而导致内存占用过多的问题。

该参数的默认值为4096字节,可以在redis.conf配置文件中进行设置。例如,可以使用以下命令将stream-node-max-bytes设置为8192字节:

plaintext stream-node-max-bytes 8192

需要注意的是,修改此参数可能会影响到性能和内存使用情况。较大的数值会允许更多的消息被包含在一个stream节点中,但是会占用更多的内存空间。较小的数值可能会导致stream节点过于频繁地被切分,从而增加了处理的复杂性。

因此,在设置stream-node-max-bytes时,需要根据实际情况进行权衡,以平衡性能和内存使用的需求。

stream-node-max-entries

在Redis 6.0及更高版本中,stream-node-max-entries参数用于限制一个stream节点(即一个stream所包含的数据的单位)中的最大条目数。默认值为100。当节点中的条目数量达到该限制时,Redis会自动将节点拆分为更小的节点,并创建新的节点来存储后续的条目。

可以通过以下方式配置stream-node-max-entries参数:

CONFIG SET stream-node-max-entries <value>

其中,<value>为所需的最大条目数量。

需要注意的是,修改stream-node-max-entries参数可能会导致stream的重新分片和重新分布。因此,在修改该参数之前,请确保对数据的重分布有足够的可接受性和容忍度。

activerehashing

在Redis 6中,active rehashing(主动重哈希)是通过设置activerehashing参数来启用的。active rehashing参数可以在redis.conf配置文件中或者通过CONFIG SET命令在运行时设置。

默认情况下,active rehashing是启用的。设置activerehashing参数为yes可以启用active rehashing,设置为no可以禁用active rehashing。

active rehashing是一种动态将哈希槽从一个节点转移到另一个节点的机制。在Redis集群中,哈希槽被分配给不同的节点来存储数据。当节点的负载不均衡时,active rehashing可以将一部分哈希槽从负载较高的节点移动到负载较低的节点,以实现负载均衡。这个过程是在运行时进行的,并且是自动执行的。

虽然默认情况下active rehashing是启用的,但是在某些场景下,禁用active rehashing可能是有意义的。例如,当Redis作为缓存服务器使用时,禁用active rehashing可以避免在缓存热点发生变化时触发大量的数据迁移操作,从而降低延迟和增加吞吐量。

注意:在Redis 6中,active rehashing已被Lazy Rehashing(惰性重哈希)所取代,但是为了兼容性,仍然可以使用activerehashing参数来启用或禁用惰性重哈希。

client-output-buffer-limit

Redis的client-output-buffer-limit参数是用来限制客户端输出缓冲区的大小的。

该参数可以在redis.conf配置文件中进行设置,也可以通过CONFIG SET命令动态设置。

参数的格式为:

client-output-buffer-limit <class> <hard-limit> <soft-limit> <soft-limit-duration> 

其中,<class>指定了要限制的客户端类型,包括normalslavepubsubreplica

<hard-limit>表示客户端输出缓冲区的硬限制大小,单位为字节。当输出缓冲区大小超过这个限制时,客户端将被立即关闭。

<soft-limit>表示客户端输出缓冲区的软限制大小,单位为字节。当输出缓冲区大小超过这个限制时,Redis将开始主动丢弃一部分缓冲区中的数据,以避免缓冲区溢出。

<soft-limit-duration>表示在达到软限制后,Redis将开始丢弃缓冲区数据的持续时间。以毫秒为单位进行设置。

以下是一个示例配置:

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
client-output-buffer-limit replica 0 0 0

这个配置表示限制了不同类型的客户端的输出缓冲区大小。对于普通客户端,没有硬限制和软限制;对于从节点(slave)和复制节点(replica),没有缓冲区限制;对于发布订阅客户端(pubsub),输出缓冲区大小的硬限制为32mb,软限制为8mb,达到软限制后,Redis将在60毫秒内开始丢弃缓冲区数据。

client-query-buffer-limit

在Redis 6中,client-query-buffer-limit是一个关键参数,用于控制客户端查询缓冲区的大小。这个参数可以用来限制单个客户端的查询缓冲区大小,以防止客户端发送大量查询并占用过多的内存。

它的语法是:

CONFIG SET client-query-buffer-limit <client-query-buffer-limit>

其中,<client-query-buffer-limit>表示设置的缓冲区限制大小,单位为字节。默认值为0,表示不限制客户端查询缓冲区的大小。

注意,在Redis中,每个客户端都会有一个独立的查询缓冲区,用于存储待处理的查询命令。当客户端发送一条命令时,命令会被存储在查询缓冲区中,并在服务器空闲时进行处理。如果缓冲区已满,新的命令将被拒绝执行。

通过设置client-query-buffer-limit,您可以控制每个客户端的查询缓冲区大小,从而限制其占用的内存。根据您的需求和系统资源,您可以设置适当的值,以确保客户端不会发送过多的查询并导致内存问题。

proto-max-bulk-len

在Redis 6中,proto-max-bulk-len参数用于设置客户端能够发送的最大批量字符串长度。默认值为512MB。这个参数适用于inline协议的客户端,该协议允许在一次请求中发送多个命令。

通过设置proto-max-bulk-len参数,可以限制某个客户端发送的批量字符串的长度,以避免由于服务端对大量数据的处理而导致的性能下降或内存溢出问题。

可以通过修改Redis配置文件中的proto-max-bulk-len参数来设置其值,或者使用CONFIG SET命令在运行时进行修改。例如:

CONFIG SET proto-max-bulk-len 1000000

这将将proto-max-bulk-len参数的值设置为1MB。请注意,将该参数值设置为较低的值可能会导致某些命令无法正常执行,因为它们需要发送较大的批量字符串。

hz

在Redis 6及以上版本中,默认的HZ值为10,表示每秒进行10次的定时任务检查。这个值决定了Redis服务器中执行定时任务的频率,包括过期键的删除和主动周期性地删除内存回收等操作。

在旧版本的Redis中,可以通过设置HZ来调整定时任务的频率,以平衡性能和CPU消耗。较低的HZ值可以减少Redis的CPU使用率,但同时也会降低定时任务的触发频率,从而可能导致过期键的删除和内存回收等操作出现延迟。相反,较高的HZ值可以提高定时任务的触发频率,但会增加CPU负载。

然而,在新版本的Redis中,已经引入了更加先进的定时任务调度器,它使用了更精确的时间事件处理机制,不再需要通过设置HZ来调整频率。因此,建议不要再手动调整HZ参数,而是使用默认值10。如果确实需要调整定时任务的频率,可以使用更高级的配置选项,如maxmemory-sampleslazyfree-lazy-evictionactive-expire等。

dynamic-hz

在Redis 6中,dynamic-hz是一个新的参数,用于控制Redis是否动态调整服务器的心跳频率。

心跳频率是Redis服务器在非阻塞状态下执行任务的速率。在每次循环中,服务器都会操纵定时器(用于计算心跳)。

dynamic-hz参数允许Redis根据服务器的负载动态地调整心跳频率。如果dynamic-hz被设置为yes,Redis将根据服务器的负载情况自动调整心跳频率。具体来说,如果服务器忙碌并且使用率较高,Redis会增加心跳频率以提高响应速度。相反,如果服务器处于空闲状态,Redis会降低心跳频率以节省资源。

但是,如果dynamic-hz被设置为no,Redis将始终使用配置文件中指定的hz参数作为心跳频率,而不会根据服务器的负载情况进行调整。 需要注意的是,如果dynamic-hz参数被设置为yeshz参数会变得无效。

以下是在Redis配置文件中设置dynamic-hz的示例:

dynamic-hz yes

默认情况下,dynamic-hz的值为no

aof-rewrite-incremental-fsync

aof-rewrite-incremental-fsync是一个Redis 6中引入的可选参数,用于控制AOF重写期间自动fsync的频率。

在Redis中,AOF(Append Only File)是一种持久化方式,它将每个写操作以追加的方式写入到磁盘上的AOF文件中。AOF文件可以用于在Redis重启后恢复数据。

AOF重写是为了优化AOF文件的体积而进行的操作。当AOF文件变得太大,影响性能时,Redis会自动启动一个AOF重写过程,它会创建一个新的AOF文件,并将之前AOF文件中的命令进行合并,以减小文件的体积。

在AOF重写期间,Redis使用一个后台进程来执行重写操作。aof-rewrite-incremental-fsync参数用于控制重写过程中自动执行fsync的频率。fsync是一个用于将数据写入磁盘的系统调用,它确保数据写入磁盘后才返回。然而,频繁的执行fsync操作会导致性能下降。

aof-rewrite-incremental-fsync参数接受以下值:

  • yes:表示在AOF重写期间会自动执行fsync操作。这是默认值,可以确保AOF文件的安全性,但可能会影响性能。

  • no:表示在AOF重写期间不执行fsync操作。这样可以提高性能,但可能会增加数据丢失的风险。

请注意,即使aof-rewrite-incremental-fsync参数被设置为no,Redis在AOF重写完成后仍然会进行一次fsync操作,以确保数据的可持久性。

要使用aof-rewrite-incremental-fsync参数,需要在Redis的配置文件中设置。在启动Redis时,根据配置文件中的设置加载参数。修改配置文件后,需要重启Redis才能使参数生效。

rdb-save-incremental-fsync

在Redis 6中,新增了一个名为rdb-save-incremental-fsync的参数,用于控制是否在进行RDB持久化时进行增量fsync操作。

RDB持久化是将Redis的内存数据以二进制格式写入磁盘文件,以保证数据在重启时的持久性。在默认情况下,Redis会在进行RDB持久化时执行一个完整的fsync操作,将数据强制刷写到磁盘上。

但是,完整的fsync操作可能会导致一定的性能损失,特别是在写入大量数据时。为了减轻这种性能损失,Redis 6引入了rdb-save-incremental-fsync参数。

默认情况下,rdb-save-incremental-fsync参数的值为yes,表示在进行RDB持久化时进行增量fsync操作。增量fsync操作只会将数据写入磁盘的文件系统缓存中,并不会马上将数据刷写到磁盘上。这种方式可以提高性能,但是可能会增加数据丢失的风险,在发生宕机的情况下可能会有一定的数据丢失。

如果将rdb-save-incremental-fsync参数的值设置为no,则表示在进行RDB持久化时执行完整的fsync操作,确保数据被直接写入磁盘上。这样可以确保数据的完整性,但可能会对性能产生一定的影响。

需要注意的是,增量fsync操作只适用于Linux和macOS操作系统,并且需要文件系统支持。在其他平台上或者不支持的文件系统上,rdb-save-incremental-fsync参数将被忽略。

lfu-log-factor

在Redis 6中,lfu-log-factor是一个用于配置Least Frequently Used (LFU)算法的参数。它定义了LFU算法中用于计算访问记录次数的对数因子。LFU算法根据记录被访问的次数来决定将哪个记录放在内存中。

默认情况下,lfu-log-factor的值为10。这意味着每个记录的访问次数通过log(factor * current_count)进行计算。因此,lfu-log-factor的值越大,计算得到的值就越小,记录需要被访问更多次才会被保存在内存中。

通过调整lfu-log-factor参数,可以根据实际应用的访问模式来优化LFU算法的性能。根据应用程序的特点,可以尝试不同的值来找到最佳的配置。

可以使用以下命令在Redis中设置lfu-log-factor参数的值:

CONFIG SET lfu-log-factor <value>

其中,<value>是你想要设置的整数值。

请注意,只有在Redis 6及更高版本中才能使用lfu-log-factor参数。

lfu-decay-time

在Redis 6中,新增了lfu-decay-time参数。lfu-decay-time参数用于设置LFU算法的冷却时间,单位为秒。LFU算法(Least Frequently Used)用于在Redis中设置缓存的优先级。在默认情况下,当一个键被访问时,其优先级会立即增加。lfu-decay-time参数可用于设置在该键不再被访问时,其优先级逐渐降低的时间段。这样可以避免键在短时间内被频繁访问而无法被淘汰的问题。通过设置lfu-decay-time参数,Redis可以自动降低键的优先级,以适应实际的访问模式。

[ active defragmentation ]

activedefrag

在Redis 6中,引入了一个新的参数activedefrag,用于活跃内存碎片整理(active defragmentation)。该参数可以在配置文件中进行配置,也可以在运行时使用CONFIG SET命令动态设置。

activedefrag参数的值可以是以下三个选项之一:

  • yes:启用活跃内存碎片整理。这是Redis 6的默认设置。
  • no:禁用活跃内存碎片整理。
  • yes-always:始终启用活跃内存碎片整理,即使Redis实例拥有非常低的CPU使用率。 活跃内存碎片整理是一种自动整理Redis内存碎片的机制,可以避免潜在的内存碎片问题。碎片化的内存可能导致Redis性能下降,并可能导致更多的内存分配和页面置换。活跃整理会周期性地将活跃数据从内存碎片中移动,并重组内存布局,以减少碎片化。

如果您的Redis实例在运行时遇到内存碎片问题,您可以尝试启用活跃内存碎片整理,并根据实际情况调整activedefrag参数的值。

active-defrag-ignore-bytes

redis 6的active-defrag-ignore-bytes参数是用于指定内存碎片整理时,忽略的字节数。当Redis进行内存碎片整理时,它会将已分配但当前未使用的内存块进行整理,以减少内存碎片。通过设置active-defrag-ignore-bytes参数,可以指定一个阈值,在整理过程中,如果某个内存块的未使用字节数低于该阈值,则不会被整理,从而提高性能。

该参数的默认值为4096字节(4KB)。可以通过修改redis.conf文件中的active-defrag-ignore-bytes参数来更改它的值。

请注意,内存碎片整理是一个比较耗费CPU资源的操作,因此在选择使用这个参数时需要权衡性能和内存碎片问题的重要性。

active-defrag-threshold-lower

活动碎片整理阈值下限(active-defrag-threshold-lower)是Redis版本6中的一个参数。这个参数用于设置当Redis数据结构的内存碎片比率超过阈值下限时,是否开启活动碎片整理。

活动碎片整理是Redis的一个特性,可以在后台线程中定期对内存碎片进行整理,从而减少内存的碎片化,提高内存的利用率。活动碎片整理通过重新排列和合并内存碎片,使得Redis能够更好地利用可用内存。

active-defrag-threshold-lower参数的默认值为10,表示当Redis内存碎片比率超过10%时,开启活动碎片整理。可以通过修改该参数来调整活动碎片整理的触发阈值。

需要注意的是,活动碎片整理可能会对Redis的性能产生一定的影响,因为它需要占用一部分CPU和内存资源。因此,在调整这个参数时,需要综合考虑系统的CPU和内存压力,以及对性能的要求。

active-defrag-threshold-upper

在Redis 6中,active-defrag-threshold-upper参数的作用是指定主动碎片整理操作的阈值上限。

当Redis进行主动碎片整理时,它会检查每个已经分配的内存页是否有足够的碎片空闲。如果发现有足够的空闲碎片,Redis将会重新分配内存并将数据复制到新分配的内存中,从而减少碎片。

active-defrag-threshold-upper参数定义了一个阈值,当内存页的碎片率超过这个阈值时,Redis会触发主动碎片整理操作。默认值为100,表示当内存页的碎片率达到100时,将进行主动碎片整理。

通过调整active-defrag-threshold-upper参数,您可以控制主动碎片整理操作的触发频率。较低的阈值值可以更频繁地触发碎片整理,但可能会影响性能。较高的阈值可以减少碎片整理的次数,但可能会导致更大的内存碎片。

要将active-defrag-threshold-upper参数设置为其他值,您可以在Redis配置文件中添加以下行:

active-defrag-threshold-upper <value>

请注意,这个参数是在Redis 6中引入的,如果您使用的是较旧版本的Redis,则可能不支持该参数。

active-defrag-cycle-min

在Redis 6中,active-defrag-cycle-min是一个配置参数,用于指定两次主动碎片整理之间的最小时间间隔(以秒为单位)。默认值为0,表示Redis将尽可能频繁地执行主动碎片整理。

活跃碎片整理是一种用于减少内存碎片化的功能。当Redis执行写操作时,已经分配的内存块可能会被释放,导致碎片化。活跃碎片整理会定期将这些被释放的内存块重新组合,以减少碎片化并提高内存使用效率。

活跃碎片整理周期的默认值为0表示Redis将尽可能频繁地执行碎片整理。但是,如果您的Redis实例负载很高或者有其他性能要求,则可以适当调整此参数,以减少活跃碎片整理的频率。

请注意,将active-defrag-cycle-min设置为一个较大的值可能会导致更多的内存碎片化,因为已经释放的内存块不能及时整理。因此,在修改此参数时,请根据您的具体需求进行权衡。

active-defrag-cycle-max

在Redis 6版本中,active-defrag-cycle-max是一个与主动碎片整理相关的参数。它指定了在一个主动碎片整理周期中,最多处理多少个已使用的内存页。

默认值为 25,表示在一个主动碎片整理周期中最多处理 25 个已使用内存页。你可以根据实际情况,调整这个参数的数值。较大的数值可能会导致碎片整理过多的内存页,从而增加CPU和内存的负载。较小的数值可能会导致无法充分整理内存碎片。

可以使用CONFIG SET命令来修改active-defrag-cycle-max参数的值。例如,以下命令将active-defrag-cycle-max设置为50:

CONFIG SET active-defrag-cycle-max 50

需要注意的是,active-defrag-cycle-max只在Redis的后台线程中生效,而不是在常规的命令请求中。它会周期性地检查已使用的内存页,并在需要时进行碎片整理。这样可以减少碎片并提高Redis的性能。

active-defrag-max-scan-fields

在Redis 6中,active-defrag-max-scan-fields是一个用于配置主动碎片整理(Active Defragmentation)的参数。主动碎片整理是一种内存优化机制,它会在Redis闲置时对内存片段进行重排,以减少碎片化并提高内存利用率。

active-defrag-max-scan-fields参数控制一次主动碎片整理中扫描的最大字段数。较大的值会使碎片整理的效果更好,但也会增加整理所需的时间。默认值为100。

可以通过修改redis.conf配置文件中的active-defrag-max-scan-fields参数的值,然后重启Redis服务器来更改它的设置。另外,也可以在启动Redis时通过传递--active-defrag-max-scan-fields <value>参数来覆盖默认值。

jemalloc-bg-thread

在 Redis 6 中,jemalloc-bg-thread 参数是一个用于控制 jemalloc 后台线程行为的选项。

jemalloc 是一个用于 Redis 内存分配的开源库,它的主要特点是支持多线程内存分配,可以提高 Redis 的并发性能。

jemalloc-bg-thread 参数的默认值是 yes,它表示启用 jemalloc 后台线程。这个后台线程主要用于处理 jemalloc 的内存处理任务,例如内存碎片整理、内存归还等,它可以在后台异步地执行这些任务,避免阻塞 Redis 的主线程。

当发生写入删除操作时,jemalloc 可能会产生一些内存碎片。这些内存碎片会导致 Redis 的内存使用效率下降。启用 jemalloc-bg-thread 可以定期对这些内存碎片进行整理,提高 Redis 的内存使用效率。

但是,jemalloc-bg-thread 参数也存在一些注意事项。当 Redis 在高负载的情况下运行时,jemalloc-bg-thread 可能会增加内存分配的延迟,导致 Redis 的请求响应时间变长。因此,如果你的应用对于响应时间要求较高,可以考虑将 jemalloc-bg-thread 设置为 no,禁用 jemalloc 的后台线程。

jemalloc-bg-thread 参数可以通过配置文件 redis.conf 或者动态配置命令 CONFIG SET 来修改。修改后需要重启 Redis 才能生效。

server_cpulist

redis 6 的 server_cpulist 参数是用于设置 Redis 服务器绑定的 CPU 列表。

在 Redis 6 中,可以通过 server_cpulist 参数来指定 Redis 服务器绑定的 CPU 列表。该参数的默认值为 0-3,表示将 Redis 服务器绑定在 CPU 0、1、2、3 上,即绑定到 CPU 核心 0 到 CPU 核心 3。

如果需要将 Redis 服务器绑定到其他 CPU 列表,可以通过修改 redis.conf 文件中的 server_cpulist 参数来实现。例如,将 Redis 服务器绑定到 CPU 4-7,可以将 server_cpulist 设置为 4-7

绑定 Redis 服务器到特定的 CPU 列表可以提高 Redis 服务器的性能,特别是在多核系统上。通过将 Redis 服务器绑定到特定的 CPU 核心,可以避免不同进程的竞争,提高服务器的响应性能和吞吐量。

需要注意的是,server_cpulist 参数只在 Linux 平台上有效,Windows 平台上无效。

bio_cpulist

在 Redis 6 中,bio_cpulist 参数用于指定在一个 I/O 线程内指定的 CPU 核心。它是一个可选参数,通常用于优化 Redis 在高负载情况下的 I/O 性能。

bio_cpulist 参数的使用方法如下:

redis-server --bio_cpulist <cpu_id>

其中,<cpu_id> 是一个整数或以逗号分隔的整数列表表示的 CPU 核心的标识。如果使用了多个 CPU 核心的标识,Redis 会自动将 I/O 操作分配给其中一个核心,并在需要时进行负载均衡。

例如,以下的命令将启动 Redis 服务器,并将 I/O 操作分配给 CPU0 和 CPU1 两个核心:

redis-server --bio_cpulist 0,1

请注意,使用 bio_cpulist 参数必须具备以下条件:

  • Redis 服务器必须是在一个 NUMA 架构的机器上运行。

  • Linux 内核的版本必须在 5.0 以上,以便支持该参数。

使用 bio_cpulist 参数可以提高 Redis 在高负载情况下的 I/O 性能,并减少由于 I/O 过载引起的延迟。

aof_rewrite_cpulist

在Redis中,aof_rewrite_cpulist参数是用于控制AOF重写操作的CPU亲和性。它指定了AOF重写进程应该绑定的CPU核心,以便在执行重写操作时能够最大程度地利用特定的CPU资源。

该参数的值可以是一个或多个CPU核心的编号,编号之间用逗号分隔。例如,aof_rewrite_cpulist 0,1,2将把AOF重写进程绑定到CPU核心0、1和2上。

通常情况下,Redis会自动选择一个可用的CPU核心来执行AOF重写操作,但在某些情况下,手动指定一个或多个CPU核心可能会更加有效。这在拥有多个CPU核心的机器上特别有用,通过将AOF重写进程绑定到特定的核心上,可以避免和其他进程竞争CPU资源,提高AOF重写的性能和效率。

需要注意的是,aof_rewrite_cpulist参数只在Redis服务器启动时生效,如果想要更改其值,需要重启Redis服务器。

bgsave_cpulist

在Redis 6的bgsave_cpulist参数用于设置后台保存进程(bgsave)的CPU亲和性(affinity)。CPU亲和性是指将一个特定的进程绑定到特定的CPU核心,这样可以提高性能,减少上下文切换的开销。 bgsave_cpulist参数的值是一个逗号分隔的CPU核心列表。示例值可以是"0,2,4",表示将bgsave进程绑定到CPU核心0、2和4上。

该参数的默认值是空字符串,表示bgsave进程可以在所有可用的CPU核心上执行。 要注意的是,bgsave_cpulist参数只在后台进行持久化操作(bgsave)时生效。对于前台进行持久化操作(如SAVE和BGSAVE命令),不会使用bgsave_cpulist参数。

ignore-warnings

Redis 6版本中的ignore-warnings参数,用于控制是否忽略一些警告消息。当忽略警告消息时,Redis将打印警告消息但不会中断操作。

具体用法如下:

  1. 启动Redis时,使用命令行参数--ignore-warnings。例如:
redis-server --ignore-warnings yes

这将启动Redis并忽略警告消息。

  1. 在redis.conf配置文件中,设置ignore-warnings参数。例如:
ignore-warnings yes

当Redis启动时,将读取配置文件中的此参数并相应处理。

值得注意的是,ignore-warnings参数仅在Redis 6版本中引入,并在之前的版本中不可用。使用此参数的目的是为了使Redis更加灵活,可以通过忽略警告消息来避免中断操作。然而,忽略警告消息可能会导致一些潜在问题被忽略,因此在使用时需要谨慎权衡。

posted @ 2023-09-05 09:03  指弹小能手  阅读(229)  评论(0编辑  收藏  举报

关于作者:专注数据库、Python 开发、ROS、深度学习,请多多赐教!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(iamkuboy@163.com)咨询.