Redis cluster 6.2.5 全量配置说明
# Redis 配置文件示例。 # # 请注意,为了读取配置文件,Redis 必须 # 以文件路径作为第一个参数启动: # # ./redis-server /path/to/redis.conf # 注意单位:何时需要内存大小, 可以指定 # 它以通常的形式 1k 5GB 4M 等等: # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes #1mb => 1024*1024 bytes # 1g = > 1000000000 bytes # 1gb => 1024*1024*1024 bytes # # 单位不区分大小写,所以 1GB 1Gb 1gB 都是一样的。################################# 包括############### ##################### 在此处包含一个或多个其他配置文件。如果您 有一个标准模板可以访问所有 Redis 服务器,但还需要 自定义一些每个服务器的设置,这将非常有用。包含文件可以包含 # 个其他文件,因此请明智地使用它。 # # 注意选项 "include" 不会被 来自管理员或 Redis Sentinel 的命令 "CONFIG REWRITE" # 重写。由于 Redis 始终使用最后处理的 # 行作为配置指令的值,因此您最好将 include # 放在该文件的开头以避免在运行时覆盖配置更改。 # # 如果您有兴趣使用包含来覆盖配置 # 选项,最好使用包含作为最后一行。 # 包含 /path/to/local.conf # 包含 /path/to/other.conf ############################# #### MODULES #################################### # 在启动时加载模块。如果服务器无法加载模块 # 它将中止。可以使用多个 loadmodule 指令。 # # loadmodule /path/to/my_module.so # loadmodule /path/to/other_module.so ############################ ##### NETWORK #################################### # 默认情况下,如果没有 "绑定”配置指令,Redis 侦听 来自主机上所有可用网络接口的连接。 # 可以使用监听一个或多个选定的接口 # "bind" 配置指令,后跟一个或多个 IP 地址。 # 每个地址都可以加上“-”前缀,表示如果地址不可用 ,redis 不会启动失败。不可用仅指 与任何网络接口不对应的#地址。# 已经在使用的地址 总是会失败,不受支持的协议总是会被 # 默默地跳过。 # # 示例: # # bind 192.168.1.100 10.0.0.1 # 监听两个特定的 IPv4 地址 # bind 127.0.0.1 ::1 # 监听环回 IPv4 和 IPv6 # bind * -::* # 和默认一样,所有可用的接口 # #~~~警告~~~如果运行Redis的计算机直接暴露在#internet上 ,绑定到所有接口是危险的,并且会将#instance暴露 给internet上的每个人。因此,默认情况下,我们取消注释 # 以下绑定指令,这将强制 Redis 仅侦听 # IPv4 和 IPv6(如果可用)环回接口地址(这意味着 Redis # 将只能接受来自与它相同的主机的客户端连接#正在 运行)。 # # 如果您确定希望您的实例收听所有接口 # 只需注释掉以下行。 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~ 绑定127.0.0.1 -::1# 保护模式是一层安全保护,为了避免 #Redis 实例在互联网上保持打开状态被访问和利用。 # # 当保护模式开启并且如果: # # 1) 服务器没有使用 # "bind" 指令显式绑定到一组地址。 # 2) 没有配置密码。 # # 服务器只接受来自 #IPv4 和 IPv6 环回地址 127.0.0.1 和 ::1 以及来自 Unix 域 # 套接字的客户端的连接。 # # 默认情况下启用保护模式。 仅当您确定希望其他主机的客户端连接到 Redis时才应禁用它 # 即使没有配置身份验证,也没有 使用“绑定”指令明确列出一组特定的接口。 protected-mode yes # 接受指定端口上的连接,默认为 6379 (IANA #815344)。 # 如果指定端口 0,Redis 将不会监听 TCP 套接字。 端口 6379 # TCP 侦听()积压。 # # 在每秒请求数较高的环境中,您需要大量积压以 # 以避免客户端连接速度慢的问题。请注意,Linux 内核 # 会默默地将其截断为 /proc/sys/net/core/somaxconn 的值,因此 # 确保提高 somaxconn 和 tcp_max_syn_backlog 的值 # 以获得所需的效果。 tcp 积压 511# Unix 套接字。 # # 指定用于侦听 # 传入连接的 Unix 套接字的路径。没有默认值,因此 Redis 在未指定时不会在 unix 套接字上侦听 #。 # # unixsocket /run/redis.sock # unixsocketperm 700 # 在客户端空闲 N 秒后关闭连接(0 表示禁用) timeout 0 # TCP keepalive。 # # 如果非零,在没有 通信的情况下使用 SO_KEEPALIVE 向客户端发送 TCP ACK。这很有用,原因有两个: # # 1) 检测死节点。 # 2) 强制中间的网络设备认为连接是 #活着的。 # # 在 Linux 上,指定的值(以秒为单位)是用于发送 ACK 的周期。 # 注意关闭连接需要双倍的时间。 # 在其他内核上,周期取决于内核配置。 # # 此选项的合理值是 300 秒,这是 从 Redis 3.2.1 开始的新 #Redis 默认值。 tcp-keepalive 300 ################################ TLS/SSL ########## ###########################默认情况下,禁用 TLS/SSL。要启用它,“tls-port”配置 # 指令可用于定义 TLS 侦听端口。 要在# 默认端口上启用 TLS ,请使用: # # port 0 # tls-port 6379# 配置 X.509 证书和私钥,用于 向连接的客户端、主服务器或集群对等方验证服务器。这些文件应该是 #PEM 格式。 # # tls-cert-file redis.crt # tls-key-file redis.key # # 如果密钥文件是使用密码加密的,它也可以包含在此处 # 。 ## tls-key-file-pass secret # 通常 Redis 对服务器功能(接受 # 个连接)和客户端功能(从 master 复制、建立 # 个集群总线连接等)使用相同的证书。 # # 有时颁发的证书带有将它们指定为的属性 # 仅客户端或仅服务器证书。在这种情况下,可能需要为传入(服务器)和传出(客户端) # 连接使用 不同的证书。为此,请使用以下指令: # # tls-client-cert-file client.crt # tls-client-key-file client.key # # 如果密钥文件使用密码加密,则可以包含在此处 #也是。 # # tls-client-key-file-pass secret # 配置 DH 参数文件以启用 Diffie-Hellman (DH) 密钥交换: # # tls-dh-params-file redis.dh # 配置 CA 证书包或目录来验证 TLS/SSL # 客户和同行。Redis 需要至少其中一个的显式配置 ,并且不会隐式使用系统范围的配置。 # # tls-ca-cert-file ca.crt # tls-ca-cert-dir /etc/ssl/certs # 默认情况下,需要 TLS 端口上的客户端(包括副本服务器) # 使用有效的客户端证书进行身份验证. # # 如果指定“否”,则不需要客户端证书,也不接受。 # 如果指定了“可选”,则接受客户端证书,如果提供,则必须 # 有效,但不是必需的。 # # tls-auth-clients no # tls-auth-clients 可选# 默认情况下,Redis 副本不会尝试 与其主服务器建立 TLS 连接。 # # 使用以下指令在复制链接上启用 TLS。 # # tls-replication yes # 默认情况下,Redis 集群总线使用纯 TCP 连接。要为总线协议启用 # TLS,请使用以下指令: # # tls-cluster yes # 默认情况下,仅启用 TLSv1.2 和 TLSv1.3,强烈建议 保持禁用旧的正式弃用版本以减少攻击面。 # 您可以明确指定要支持的 TLS 版本。 # 允许的值不区分大小写,包括“TLSv1”、“TLSv1.1”、“TLSv1.2”、 # "TLSv1.3" (OpenSSL >= 1.1.1) 或任何组合。 # 要仅启用 TLSv1.2 和 TLSv1.3,请使用: # # tls-protocols "TLSv1.2 TLSv1.3" # 配置允许的密码。 有关此字符串语法的更多信息,请参见 ciphers(1ssl) 手册页。 # # 注意:此配置仅适用于 <= TLSv1.2。 # # tls-ciphers DEFAULT:!MEDIUM # 配置允许的 TLSv1.3 密码套件。请参阅 ciphers(1ssl) 手册页以 获取有关此字符串语法的更多信息,特别是 TLSv1.3 #ciphersuites 。 # # tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256 # 选择密码时,使用服务器的首选项而不是客户端 # 偏爱。默认情况下,服务器遵循客户端的偏好。 # # tls-prefer-server-ciphers yes # 默认情况下,启用 TLS 会话缓存以允许 支持它的客户端更快、更便宜地重新连接。使用以下指令禁用 # 缓存。 # # tls-session-caching no # 更改缓存的默认 TLS 会话数。零值将缓存 # 设置为无限大小。默认大小为 20480。 # # tls-session-cache-size 5000 # 更改缓存 TLS 会话的默认超时时间。默认超时为 300 # 秒。 # # tls-session-cache-timeout 60################################# 一般的 ################ #####################默认情况下,Redis 不作为守护进程运行。如果需要,请使用“是”。 # 注意Redis在守护进程时会在/var/run/redis.pid中写入一个pid文件。 # Redis 由 upstart 或 systemd 监督时,此参数没有影响。 daemonize no # 如果你从 upstart 或 systemd 运行 Redis,Redis 可以与你的 监督树交互。选项: # 监督 no - 没有监督交互 # 监督 upstart - 通过将 Redis 置于 SIGSTOP 模式来发出信号新贵 # 需要在你的新贵作业配置中“预期停止” # 监督 systemd - 通过将 READY=1 写入 $NOTIFY_SOCKET 来发出 systemd 信号 # 在启动时,并定期更新 Redis 状态 。 # 监督自动 - 根据 UPSTART_JOB 或 NOTIFY_SOCKET 环境变量检测 upstart 或 systemd 方法 # 注意:这些监督方法仅表示“进程已准备好”。 # 它们不会启用连续 ping 回您的主管。 # # 默认为“否”。要在 upstart/systemd 下运行,您可以简单地取消注释 # 下面的行: # # supervised auto # 如果指定了 pid 文件,Redis 在启动时将其写入指定的位置 # 并在退出时将其删除。 # # 当服务器运行非守护程序时,如果没有 在配置中指定,则不会创建 pid 文件。 当服务器被守护时,即使没有指定pid文件#也会使用,默认为“/var/run/redis.pid”。 # # 创建一个 pid 文件是最好的努力:如果 Redis 无法创建它 # 没有任何不好的事情发生,服务器将正常启动并运行。 # # 请注意,在现代 Linux 系统上,“/run/redis.pid”更符合要求 # 应改为使用。 pidfile /var/run/redis_6379.pid # 指定服务器详细级别。 # 这可以是以下之一: # 调试(大量信息,对开发/测试有用) #详细(许多 很少 有用的信息,但不像调试级别那样 乱七八糟 ). 此外,空字符串可用于强制 #Redis 登录标准输出。请注意,如果您使用标准 输出进行日志记录但守护进程,日志将被发送到 /dev/null logfile "" # 要启用对系统记录器的日志记录,只需将 'syslog-enabled' 设置为 yes, # 并可选择更新其他syslog 参数以满足您的需求。 # syslog-enabled no # 指定系统日志标识。 # syslog-ident redis# 指定系统日志设施。必须是 USER 或介于 LOCAL0-LOCAL7 之间。 # syslog-facility local0 # 要禁用内置的崩溃日志,这可能会 在需要时产生更清晰的核心 # 转储,请取消注释以下内容: # # crash-log-enabled no # 禁用作为一部分运行的快速内存检查 # 可能会让redis 更快终止的崩溃日志,取消注释以下内容: # # crash-memcheck-enabled no # 设置数据库的数量。默认数据库是 DB 0,您可以 使用 SELECT <dbid> 在每个连接的基础上选择一个不同的数据库,其中 # dbid 是介于 0 和 'databases'-1 数据库 16之间的数字# 默认情况下,Redis 仅在开始记录到 # 标准输出并且标准输出是 TTY 并且 syslog 记录被 禁用时才会显示 ASCII 艺术徽标。基本上,这意味着通常徽标仅在 # 交互会话中显示。 # # 但是, 通过将以下选项设置为 yes,可以强制执行 4.0 之前的行为并始终在启动日志中显示 # ASCII 艺术徽标。 always-show-logo no # 默认情况下,Redis 会修改进程标题(如 'top' 和 'ps' 所示)以 # 提供一些运行时信息。可以通过将以下设置为 no 来禁用此功能并将 # 进程名称保留为已执行。 设置过程标题是# 更改进程标题时,Redis 使用如下模板构造 # 修改后的标题。 # # 模板变量在大括号中指定。 # 支持以下变量: # # {title} 父进程执行的进程名称,或子进程的类型。 # {listen-addr} 绑定地址或 '*' 后跟 TCP 或 TLS 端口侦听,或 # Unix 套接字(如果只有它可用)。 # {server-mode} 特殊模式,即“[sentinel]”或“[cluster]”。 # {port} TCP 端口监听,或 0。 # {tls-port} TLS 端口监听,或 0。 # {unixsocket} Unix 域套接字监听,或“”。 # {config-file} 使用的配置文件的名称。 # proc-title-template "{title} {listen-addr} {server-mode}" ############################ ### SNAPSHOTTING ############################### # 将数据库保存到磁盘。 # # save <seconds> <changes> # # 如果给定的秒数和给定的 # 对 DB 的写入操作数都发生,Redis 将保存 DB。 # # 可以使用单个空字符串参数完全禁用快照 # 如下例所示: # # save "" # # 除非另有说明,否则默认情况下 Redis 将保存 DB: # * 如果至少有 100 个键更改了 300 秒(5 分钟) 后 # * 如果至少有 10000 个键更改了 60 秒后 # # 您可以通过取消注释以下三行来明确设置这些。 # # save 3600 1 # save 300 100 # save 60 10000 # 默认情况下,如果启用 RDB 快照,Redis 将停止接受写入 #(至少一个保存点)并且最近的后台保存失败。 # 这将使用户意识到(以一种艰难的方式)数据没有 正确地保存在磁盘上,否则很可能没有人会注意到并且 会发生一些灾难。 # # 如果后台保存进程将重新开始工作,Redis 将 # 自动允许再次写入。 # # 但是,如果您已经设置了对 Redis 服务器的正确监控 # 和持久性,您可能希望禁用此功能,以便 Redis 将 # 继续照常工作,即使存在磁盘、 权限等问题。 stop-writes-on-bgsave-error yes # 转储 .rdb 数据库时使用 LZF 压缩字符串对象? # 默认情况下压缩是启用的,因为它几乎总是一个胜利。 # 如果你想在保存子节点中节省一些 CPU,请将其设置为 'no' 但是 # 如果你有可压缩的值或键,数据集可能会更大。 rdbcompression yes # 由于 RDB 的第 5 版,CRC64 校验和被放置在文件的末尾。 # 这使得格式更能抵抗损坏,但 在保存和加载 RDB 文件时会产生性能损失(大约 10%),因此您可以禁用它 # 以获得最佳性能。 # # 禁用校验和创建的 RDB 文件的校验和为零,这将 # 告诉加载代码跳过检查。 rdbchecksum yes # 在 加载 RDB 或 RESTORE 有效负载时启用或禁用对 ziplist 和 listpack 等的完整卫生检查。这减少了 稍后在处理命令时发生断言或 # 崩溃的机会。 # 选项: # 否 - 永远不要执行全面卫生 # 是 - 始终执行全面卫生 # 客户端 - 仅对用户连接执行全面清理。 # 排除:RDB 文件、从主连接接收到的 RESTORE 命令以及具有 #skip-sanitize-payload ACL 标志 的客户端连接。 # 默认应该是“clients”,但由于它目前影响集群 # 通过 MIGRATE 重新分片,默认情况下暂时设置为“no”。 # # sanitize-dump-payload no # 转储数据库的文件名 dbfilename dump.rdb # 在没有持久性的情况下删除复制使用的 RDB 文件 # 已启用。默认情况下,此选项被禁用,但是有些环境# 出于法规或其他安全考虑,RDB 文件 由 master 保存在 # 磁盘上以提供副本,或由副本存储在磁盘上 # 为了加载它们以进行初始同步,应尽快删除 # 。请注意,此选项仅适用于同时禁用 AOF # 和 RDB 持久性的实例,否则将被完全忽略。 # # 获得相同效果的另一种(有时是更好的)方法是 # 在主实例和副本实例上使用无盘复制。然而 # 在副本的情况下,无盘并不总是一种选择。 rdb-del-sync-files no # 工作目录。 # # DB 将被写入此目录中,并 使用上面指定的文件名 'dbfilename' 配置指令。 # # Append Only File 也将在此目录中创建。 # # 注意这里必须指定目录,而不是文件名。 目录 ./ ################################ 复制############# #####################主副本复制。使用replicaof 使Redis 实例成为 另一个Redis 服务器的副本。关于 Redis 复制的一些事情要尽快理解。 # # +-----------------+ +----------------+ # | 硕士 | ---> | 复制品 | # | (接收写入)| | (精确副本)| # +------------------+ +----------------+ # # 1) Redis 复制是异步的,但是你可以如果 master 似乎没有与至少 给定数量的副本连接,则将master 配置为# 停止接受写入。 # 2)如果复制链接在相对较少的时间内丢失 # 时间 ,Redis 副本能够与 # master 执行部分重新同步。您可能希望 根据您的需要使用合理的值配置复制积压大小(请参阅此文件的下 # 部分)。 # 3) 复制是自动的,不需要用户干预。在 # 网络分区副本后自动尝试重新连接到主服务器 # 并与他们重新同步。 # #replicaof <masterip> <masterport> # 如果主服务器受密码保护(使用 下面的“requirepass”配置 # 指令),可以在开始复制同步过程之前告诉副本进行身份验证 ,否则主服务器将 # 拒绝副本请求。 # # masterauth <master-password> # # 但是,如果您使用 Redis ACL(对于 Redis 版本 # 6 或更高版本),并且默认用户无法运行 PSYNC # 命令和/或其他所需命令,这还不够用于复制。在这种情况下, 最好配置一个特殊用户来使用复制, # masteruser 配置如下: # # masteruser <username> # # 当指定 masteruser 时,副本将使用新的 AUTH 形式对其 # master 进行身份验证:AUTH <username> <password>。# 当副本失去与主服务器的连接时,或者当复制 仍在进行中时,副本可以以两种不同的方式进行操作: # # 1)如果副本服务陈旧数据设置为“是”(默认)副本将 # 仍会回复客户端请求,可能包含过期数据,或者 如果这是第一次同步,则 # 数据集可能只是空的。 # # 2) 如果replica-serve-stale-data 设置为'no',replica 会回复 # 一个错误 "SYNC with master in progress" 除了: # INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, # UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, #主机和延迟。 # replica-serve-stale-data yes # 你可以配置一个副本实例接受或不接受写入。写 一个副本实例可能有助于存储一些临时数据(因为 写在副本上的数据在与主副本重新同步后很容易被删除)但是 如果客户端由于配置错误而写入它也可能会导致问题 。 # # 由于 Redis 2.6 默认副本是只读的。 # # 注意:只读副本不设计为暴露给 互联网上不受信任的客户端。它只是防止滥用实例的保护层。 # 仍然是只读副本,默认情况下会导出所有管理命令 # 例如 CONFIG、DEBUG 等。在有限的范围内,您可以使用“重命名命令”来隐藏所有 # 管理/危险命令,从而提高 只读副本的 # 安全性。 replica-read-only yes # 复制同步策略:磁盘或套接字。 # # 新副本和重新连接副本无法继续 # 复制过程只是接收差异,需要做所谓的#“完全同步”。一个 RDB 文件从主服务器传输到 # 个副本。 # # 传输可以通过两种不同的方式发生: # # 1) 磁盘支持:Redis 主服务器创建一个新进程,将 RDB # 文件写入磁盘。稍后,父 进程将文件以增量方式传输到副本。 # 2) 无盘:Redis master 创建一个新进程,直接将 #RDB 文件写入replica sockets,完全不接触磁盘。 # # 使用磁盘支持的复制,当生成 RDB 文件时,更多的副本 # 可以排队并与 RDB 文件一起为当前子文件提供服务 # 生成 RDB 文件完成它的工作。使用无盘复制代替 # 一旦传输开始,到达的新副本将排队, 当当前副本终止时,将开始新的 # 传输。 # # 当使用无盘复制时,master 在开始传输之前等待一个可配置的时间(以秒为单位),希望多个 # 副本到达并且传输可以并行化。 # # 使用慢速磁盘和快速(大带宽)网络,无盘复制 # 效果更好。 repl-diskless-sync no # 开启无盘复制时,可以配置延迟 # 服务器等待以生成通过套接字将 RDB 传输 到副本的子节点。 # # 这很重要,因为一旦传输开始,就不可能为 到达的新副本提供服务,这些新副本将排队等待下一次 RDB 传输,因此 # 服务器等待延迟以让更多副本到达。 # # 延迟以秒为单位,默认为5秒。要完全禁用 # 它只需将其设置为 0 秒,传输将尽快开始。 repl-diskless-sync-delay 5 # ----------------------------------------- ------------------------------------------------ # WARNING: RDB 无盘负载是实验性的。由于在此设置中,副本 # 不会立即将 RDB 存储在磁盘上,它可能会在 # 故障转移期间导致数据丢失。RDB 无盘加载 + Redis 模块不处理 I/O 读取也可能 导致 Redis 在 与主服务器的初始同步阶段发生 I/O 错误时中止。仅当您知道自己在做什么时才使用。 #------------------------------------------------ ---------------------------- # # Replica可以直接从#socket加载它从replication link读取的RDB ,或者存储RDB 到一个文件并在它完全 从主服务器接收到该文件后读取该文件。 # # 很多情况下磁盘比网络慢,存储和加载 # RDB 文件可能会增加复制时间(甚至会增加master 的 #Copy on Write memory 和salve buffers)。 # 但是,直接从套接字解析 RDB 文件可能意味着我们必须 # 在接收到完整的 rdb 之前刷新当前数据库的内容 。出于这个原因,我们有以下选项: # # "disabled" - 不要使用无盘加载(先将 rdb 文件存储到磁盘) # "on-empty-db" - 只有在完全安全时才使用无盘加载。 # "swapdb" - 在 直接从套接字解析数据时,将当前数据库内容的副本保存在 RAM 中。请注意,这需要 # 足够的内存,如果你没有它,你就有被 OOM 杀死的风险。 repl-diskless-load disabled # 副本以预定义的时间间隔向服务器发送 PING。#可以 使用 repl_ping_replica_period 选项更改此间隔。默认 # 值为 10 秒。 # # repl-ping-replica-period 10 # 以下选项设置复制超时: # # 1) 从副本的角度来看,SYNC 期间的批量传输 I/O。 # 2) 从副本(数据、pings)的角度来看,master 超时。 # 3) 从主节点的角度来看副本超时(REPLCONF ACK pings)。 # # 重要的是要确保这个值大于该值 # 为 repl-ping-replica-period 指定,否则将检测到超时 # 每次主服务器和副本之间的流量较低时。默认 # 值为 60 秒。 # # repl-timeout 60 # 在 SYNC 后禁用副本套接字上的 TCP_NODELAY? # # 如果选择“是”,Redis 将使用较少数量的 TCP 数据包和 # 较少的带宽将数据发送到副本。但这可能会增加 # 数据出现在副本端的延迟, 使用默认配置的 Linux 内核最多会延迟 40 毫秒。 # # 如果您选择“否”,则数据出现在副本端的延迟将 # 减少,但将使用更多带宽进行复制。 # # 默认情况下,我们会针对低延迟进行优化,但在流量非常大的情况下 # 或者当主节点和副本节点相距很多跳时,将其设置为“是”可能 是个好主意。 repl-disable-tcp-nodelay no # 设置复制积压大小。backlog是一个缓冲区, 当replica断开一段时间后,会累积#replicas数据,这样当 #replica想要重新连接时,通常不需要full resync,但是 #partial resync就足够了,只需传递一部分数据副本 #在断开连接时丢失。 # # 复制积压越大,副本可以承受的时间越长 # 断开连接,以后能够执行部分重新同步。 # # 只有至少有一个副本连接时才会分配积压。 # # repl-backlog-size 1mb # 在master一段时间没有连接副本后,积压将被 释放。以下选项配置 # 需要经过的秒数,从最后一个副本断开连接的时间开始,以便 释放积压 # 缓冲区。 # # 请注意,副本永远不会因超时而释放积压,因为它们可能会在 以后 # 提升为主服务器,并且应该能够正确地 与其他副本“部分地重新同步”:因此它们应该总是累积积压。 # # 值为 0 表示从不释放积压。 # # repl-backlog-ttl 3600 # 副本优先级是 Redis 在 INFO # 输出中发布的整数。 如果主服务器不再正常工作,Redis Sentinel 使用它来选择一个副本以将 # 提升为主服务器。 # # 优先级较低的副本被认为更适合提升,因此 # 例如,如果有三个副本的优先级为 10、100、25 Sentinel # 将选择优先级为 10 的副本,即最低的副本。 # # 然而,特殊优先级 0 将副本标记为无法执行 # 主控角色,因此 #Redis Sentinel 永远不会选择优先级为 0 的副本 进行升级。 # # 默认优先级为 100。replica-priority 100 # ------------------------- ---------------------------------------- # 默认情况下,Redis Sentinel 包含所有副本其报告。副本 # 可以从 Redis Sentinel 的公告中排除。'sentinel replicas <master>' 命令将忽略未宣布的副本 # 并且不会 # 暴露给 Redis Sentinel 的客户端。 # # 这个选项不会改变replica-priority的行为。即使将 #replica-announced 设置为 'no',副本也可以提升为 master。为了 #防止这种行为,设置replica-priority为0 。## replica-announced yes# 如果 连接的副本少于 # N 个,并且延迟小于或等于 M 秒,则 master 可能会停止接受写入。 # # N 个副本需要处于“在线”状态。 # # 以秒为单位的延迟,必须 <= 指定值,是从 # 从副本接收到的最后一次 ping 计算的,通常每秒发送一次。 # # 此选项不保证 N 个副本将接受写入,但 # 将在没有足够的副本 可用的情况下将丢失写入的暴露窗口限制为指定的秒数。 # # 例如,如果需要至少 3 个延迟 <= 10 秒的副本,请使用: # # min-replicas-to-write 3 # min-replicas-max-lag 10 # # 将其中一个或另一个设置为 0 会禁用该功能。 # # 默认情况下,min-replicas-to-write 设置为 0(禁用功能), # min-replicas-max-lag 设置为 10。# Redis master 能够列出附加的 副本的地址和端口以不同的方式。例如,“INFO 复制”部分 # 提供此信息,除其他工具外, #Redis Sentinel 使用这些信息来发现副本实例。 # 此信息可用的另一个地方是在 主控的 # "ROLE" 命令的输出中。 # # 一个副本通常报告的列出的IP地址和端口是 # 通过以下方式获得: # # IP:地址是通过检查 replica与master连接的socket 的peer地址来自动检测的。 # # 端口:该端口在复制期间由副本通信 # 握手,通常是副本用于 # 侦听连接的端口。 # # 但是,当使用端口转发或网络地址转换 (NAT) 时,副本实际上可能可以通过不同的 IP 和端口 # 对访问。副本可以使用以下两个选项,以便 # 向其主控报告一组特定的 IP 和端口,以便 INFO # 和 ROLE 都将报告这些值。 # # 如果您只需要覆盖 端口或 IP 地址, 则无需同时使用这两个选项。 ## replica-announce-ip 5.5.5.5 #replica-announce-port 1234 ############################# KEYS TRACKING ################################# Redis 实现了对客户端缓存值的服务器辅助支持。 # 这是使用一个失效表来实现的,该表使用 # 一个由键名索引的基数键,哪些客户端有哪些键。反过来 # 这用于向客户端发送无效消息。请 # 检查此页面以了解有关该功能的更多信息: # # https://redis.io/topics/client-side-caching ## 当为客户端启用跟踪时,所有只读查询都假定 # 被缓存:这将强制 Redis 将信息存储在失效 表中。当密钥被修改时,这些信息被清除掉,并且 #失效消息被发送到客户端。但是,如果工作负载 主要由读取主导,Redis 可能会使用越来越多的内存 来跟踪许多客户端获取的键。 # # 为此,可以为 # 失效表配置最大填充值。默认设置为 1M 的键,一旦 达到这个限制 #,Redis 将开始驱逐失效表中的键 # 即使它们没有被修改,只是为了回收内存:这反过来会 强制客户端使缓存值无效。基本上,表# 最大大小是您想要在服务器 端跟踪有关谁缓存了什么信息的内存与客户端 # 将缓存对象保留在内存中的能力 之间的权衡。 # # 如果将值设置为 0,则表示没有限制,Redis 将 # 在失效表中保留所需数量的键。 # 在“stats”INFO 部分中,您可以找到有关 在每个给定时刻失效表中# 键的数量的信息。 ## 注意:在广播模式下使用key tracking时,不使用内存 # 在服务器端所以这个设置是没用的。 ## tracking-table-max-keys 1000000 ################################# 安全性##### #############################警告:由于 Redis 非常快,外部用户最多可以尝试 # 100 万个密码每秒对一个现代盒子。这意味着您 # 应该使用非常强大的密码,否则它们将很容易被破解。 # 请注意,因为密码实际上是客户端 和服务器之间的共享机密,并且不应被任何人记住,所以密码 # 可以很容易地是来自 /dev/urandom 或其他任何内容的长字符串,因此使用 #长且不可猜测的密码不会进行暴力攻击。# Redis ACL 用户的定义格式如下: # # user <username> ... acl rules ... # # 例如: # # user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 # # The特殊用户名“default”用于新连接。如果此用户 # 具有“nopass”规则,则新连接将立即被验证 为“默认”用户,而无需通过 #AUTH 命令提供任何密码。否则,如果“默认”用户未标记为“nopass” # 连接将以未验证状态开始, # # 描述用户可以做什么的 ACL 规则如下: # # on 启用用户:可以作为该用户进行身份验证。 # off 禁用用户:不再可能对 这个用户进行身份验证,但是已经通过身份验证的连接 # 仍然可以工作。 # skip-sanitize-payload RESTORE dump-payload sanitation 被跳过。 # sanitize-payload RESTORE dump-payload 已清理(默认)。 # +<command> 允许执行该命令 # -<command> 禁止执行该命令 # +@<category> 允许执行该类别中的所有命令 # 有效类别如@admin、@set、@sortedset、... # 等等,请参阅 server.c 文件中的完整列表,其中 描述和定义了 Redis 命令表。 # 特殊类别@all 表示所有命令,但目前 # 存在于服务器中,并将在未来 通过模块加载。 # +<command>|subcommand 允许其他 # 禁用命令的特定子命令。请注意,这种形式不能 像 -DEBUG|SEGFAULT 那样 # 允许为负数,但 # 只能以“+”开头的加法。 # allcommands +@all 的别名。请注意,这意味着能够执行 # 所有通过模块系统加载的未来命令。 # nocommands -@all 的别名。 # ~<pattern> 添加可以作为 # 命令的一部分提及的键模式。例如 ~* 允许所有键。模式 # 是一种类似于 KEYS 的 glob 样式模式。 # 可以指定多个模式。 # allkeys ~* 的别名 #resetkeys 刷新允许的键模式列表。 # &<pattern> 添加用户可以访问 的全局样式的 Pub/Sub 频道模式。可以指定多个通道 # 模式。 # allchannels &* 的别名 #resetchannels 刷新允许的频道模式列表。 # ><password> 将此密码添加到用户的有效密码列表中。 # 例如 >mypass 会将“mypass”添加到列表中。 # 该指令清除“nopass”标志(见下文)。 # <<password> 从有效密码列表中删除此密码。 # nopass 用户设置的所有密码都被删除,并且用户 # 被标记为不需要密码:这意味着每个 # 密码都将对该用户起作用。如果此指令 # 用于默认用户, # 立即使用默认用户进行身份验证,而无需 # 任何明确的 AUTH 命令。请注意,“resetpass” # 指令将清除此条件。 # resetpass 刷新允许的密码列表。此外删除 #“nopass”状态。在“resetpass”之后,用户没有关联的 #密码,如果不添加 #一些密码(或稍后将其设置为“nopass”),就无法进行身份验证。 # reset 执行以下操作:resetpass、resetkeys、off、 # -@all。用户在创建后立即返回到它所具有的相同状态 。 # # ACL 规则可以按任何顺序指定:例如,您可以从 # 密码开始,然后是标志或密钥模式。但是请注意,加法 # 和减法规则将根据顺序改变含义。 # 例如看下面的例子: # # user alice on +@all -DEBUG ~* >somepassword # # 这将允许“alice”使用除 #DEBUG 命令之外的 所有命令,因为 +@all 添加了所有命令 #alice 可以使用的命令集的命令,后来 DEBUG 被删除。但是,如果我们颠倒 两个 ACL 规则的顺序,结果会有所不同: # # user alice on -DEBUG +@all ~* >somepassword # # 现在,当 alice 在允许的命令集中还没有命令时,DEBUG 被删除 ,稍后所有命令都被添加,因此用户将能够 # 执行所有操作。 # # 基本上 ACL 规则是从左到右处理的。 # # 有关 ACL 配置的更多信息,请参阅 # Redis 网站 https://redis.io/topics/acl # ACL LOG # # ACL 日志跟踪失败的命令和 与 ACL 关联的身份验证事件。ACL 日志对于排除 被 ACL 阻止的失败命令很有用。ACL 日志存储在内存中。 您可以使用# ACL LOG RESET回收内存。在下面定义 ACL 日志的最大条目长度。 acllog-max-len 128 # 使用外部 ACL 文件 # # 在此文件中不配置用户,可以使用 # 仅列出用户的独立文件。两种方法不能混用: # 如果你在这里配置用户,同时你激活外部的 ACL 文件,服务器会拒绝启动。 # # 外部ACL用户文件的 格式和redis.conf里面用来描述用户 的#格式完全一样。 # # aclfile /etc/redis/users.acl # 重要提示:从 Redis 6 开始,“requirepass”只是 新 ACL 系统之上的一个兼容性层。选项效果将只是设置# 默认用户的密码。客户端仍然会 像往常一样使用 # AUTH <password> 进行身份验证,或者更明确地使用 AUTH default <password> # 如果他们遵循新协议:两者都可以工作。 # # requirepass 与 aclfile 选项和 ACL LOAD # 命令不兼容,这些将导致 requirepass 被忽略。 # # requirepass foobared # 默认情况下,通过 此 ACL 规则 'off resetkeys -@all' 的等效项,使用限制性权限初始化新用户。从 Redis 6.2 开始,还 可以使用 ACL 规则管理对 Pub/Sub 通道的访问。# 默认 Pub/Sub 频道权限( 如果新用户由 # acl-pubsub-default 配置指令,它接受以下值之一: # # allchannels:授予对所有 Pub/Sub 频道 的访问权限 # resetchannels:撤销对所有 Pub/Sub 频道的访问权限 # # 确保在升级 Redis 6.0 时向后兼容, acl-pubsub-default # 默认为 'allchannels' 权限。 # # 未来兼容性说明:很可能在 Redis 的未来版本中 # 指令的默认值 'allchannels' 将更改为 'resetchannels' 以提供更好的开箱即用 Pub/Sub 安全性。因此, # 建议您为所有用户显式定义 Pub/Sub 权限 # 而不是依赖隐式默认值。为所有现有用户设置显式 #Pub/Sub 后,您应该取消注释以下行。 # # acl-pubsub-default resetchannels # 命令重命名(已弃用)。 ## ------------------------------------------------ ------------------------ # WARNING: 尽可能避免使用此选项。而是使用 ACL 从默认用户中删除 # 命令,并将它们仅放在您 为管理目的而创建的某些管理员用户中。 #------------------------------------------------ ----------------------- # # 可以更改共享中危险命令的名称 # 环境。例如,CONFIG 命令可能被重命名为 # 难以猜测的东西,以便它仍然可用于内部使用工具 # 但不适用于一般客户端。 # # 示例: # # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # # 也可以通过将命令重命名为 空字符串来完全终止命令: # # rename-command CONFIG "" # # 请注意,更改命令的名称登录到 #AOF 文件或传输到副本可能会导致问题。#################################客户############## ####################### 设置同时连接的最大客户端数。默认情况下 # 此限制设置为 10000 个客户端,但是如果 Redis 服务器无法 配置进程文件限制以允许指定限制 # 允许的最大客户端数量设置为当前文件限制 # 减 32 (因为 Redis 保留了一些文件描述符供内部使用)。 # # 一旦达到限制,Redis 将关闭所有新连接,发送 # 错误“达到最大客户端数”。 # # IMPORTANT: 使用 Redis Cluster 时,最大连接数也是 # 与集群总线共享:集群中的每个节点将使用两个 # 个连接,一个传入,另一个传出。 在非常大的集群的情况下,相应地调整 # 限制非常重要。 # # maxclients 10000 ############################# 内存管理############# ################## # 将内存使用限制设置为指定的字节数。 # 当达到内存限制时,Redis 将尝试删除键 # 根据选择的驱逐策略(参见 maxmemory-policy)。 # # 如果 Redis 不能根据策略删除键,或者如果策略 # 设置为 'noeviction',Redis 将开始以错误回复命令 # 会使用更多内存的命令,例如 SET、LPUSH 等, 并将继续 # 回复只读命令,如 GET。 # # 当使用 Redis 作为 LRU 或 LFU 缓存时,此选项通常很有用,或者 # 为实例设置硬内存限制(使用 'noeviction' 策略)。 # # 警告:如果您将副本附加到启用了 maxmemory 的实例,则 # 从已使用的内存计数 中减去提供副本所需的输出缓冲区的大小 ,因此网络问题/重新同步将 # 不会触发循环键被逐出,然后 副本的输出缓冲区已满,其中键的 DEL 被逐出触发删除 更多键,依此类推,直到数据库完全清空。 # # 简而言之...如果您附加了副本,建议您 为 maxmemory 设置一个较低的 # 限制,以便系统上有一些空闲 RAM 用于副本 # 输出缓冲区(但如果策略是 'noeviction,则不需要这样做')。 # # maxmemory <bytes> # MAXMEMORY POLICY:当达到 maxmemory # 时 Redis 将如何选择要删除 的内容。您可以从以下行为中选择一种: # # volatile-lru -> 使用近似 LRU 驱逐,仅具有过期集的键。 # allkeys-lru -> 使用近似的 LRU 驱逐任何密钥。 # volatile-lfu -> 使用近似 LFU 驱逐,只有设置了过期的键。 # allkeys-lfu -> 使用近似 LFU 驱逐任何密钥。 # volatile-random -> 移除一个设置了过期时间的随机密钥。 # allkeys-random -> 删除随机密钥,任意密钥。 # volatile-ttl -> 删除具有最近过期时间的密钥(次要 TTL) # noeviction -> 不驱逐任何东西,只在写操作时返回错误。 # # LRU 表示最近最少使用 # LFU 表示最少使用 # # LRU、LFU 和 volatile-ttl 都是使用近似的 # 随机算法实现的。 # # 注意:使用上述任何策略,当没有合适的键用于# eviction 时,Redis 将在需要 更多内存 的写入操作时返回错误。这些通常是创建新密钥、添加数据或 # 修改现有密钥。一些示例是:SET、INCR、HSET、LPUSH、SUNIONSTORE、 #SORT(由于 STORE 参数)和 EXEC(如果事务包括任何 需要内存的 # 命令)。 # # 默认为: # # maxmemory-policy noeviction # LRU、LFU 和最小 TTL 算法不是精确算法,而是近似 # 算法(为了节省内存),因此您可以调整它的速度或 # 准确性。默认情况下,Redis 将检查五个键并选择 # 最近最少使用的一个,您可以使用以下 # 配置指令更改样本大小。 # # 默认值 5 会产生足够好的结果。10 非常接近 # 真正的 LRU,但需要更多的 CPU。3更快但不是很准确。 # # maxmemory-samples 5 # 逐出处理被设计为在默认设置下运行良好。 # 如果写入流量异常大,这个值可能需要 增加。减小此值可能会降低延迟,但可能会降低 # eviction processing Effectiveness # 0 = 最小延迟,10 = 默认,100 = 不考虑延迟的进程 # # maxmemory-eviction-tenacity 10 # 从 Redis 5 开始,默认情况下副本将忽略它的 maxmemory 设置 #(除非它在故障转移后或手动提升为主)。它的意思是 # 键的逐出将仅由主服务器处理,将 # DEL 命令作为主服务器中的键逐出发送到副本。 # # 这种行为确保主服务器和副本保持一致,并且通常 是您想要的,但是如果您的副本是可写的,或者您希望副本 具有不同的内存设置,并且您确定所有执行的 写入副本是幂等的,那么您可以更改此默认值(但请确保 # 了解您在做什么)。 # # 请注意,由于默认情况下副本不会驱逐,它可能会使用 比通过 maxmemory 设置的内存更多的内存(某些缓冲区可能 # 在副本上更大,或者数据结构有时可能会占用更多内存 # 等等)。因此,请确保您监控您的副本并确保它们有足够的内存, 在 #master 达到配置的 maxmemory 设置 之前永远不会遇到真正的内存不足情况。 ## replica-ignore-maxmemory yes #Redis 以两种方式回收过期的密钥:在访问时 发现这些密钥已过期,以及在后台,在所谓的 #“活动过期密钥”中。密钥空间被缓慢且交互地扫描 # 寻找过期的密钥来回收,这样就可以释放内存 # 已过期并且在短时间内将永远不会再次访问的密钥。 ## 过期周期的默认努力将尝试避免超过 10% 的过期密钥仍在内存中,并将尝试避免消耗 # 超过 25% 的总内存并增加系统延迟。但是 ,可以将通常设置为 “1”的过期“努力”增加到更大的值,直到值“10”。# 系统在其最大值 时将使用更多的 CPU、更长的周期(从技术上讲可能会引入 更多的延迟),并且将容忍更少的已过期密钥仍然存在 于系统中。这是内存、CPU 和延迟之间的权衡。 ## active-expire-effort 1 ############################ LAZY FREEING ########### ########################## Redis 有两个删除键的原语。一种叫做DEL,是一种阻塞 #删除对象。这意味着服务器停止处理新命令 # 以便以同步的 方式回收与对象关联的所有内存。如果删除的键与一个小对象相关联,那么 执行 DEL 命令所需的时间非常短,与 Redis 中的大多数其他 #O(1) 或 O(log_N) 命令相当。但是,如果键与 包含数百万个元素的聚合值相关联,则服务器可以阻塞 很长时间(甚至几秒钟)以完成操作。 # # 由于上述原因,Redis 还提供了非阻塞删除原语 # 如 UNLINK(非阻塞 DEL)和 FLUSHALL 和 # FLUSHDB 命令的 ASYNC 选项,以便在后台回收内存。这些命令 # 在恒定时间内执行。 另一个线程将尽可能快地在后台逐步释放# 对象。 ## FLUSHALL 和 FLUSHDB 的 DEL、UNLINK 和 ASYNC 选项是用户控制的。 # 由应用程序的设计来理解何时 使用其中一个是个好主意。然而,Redis 服务器有时必须 # 删除键或刷新整个数据库,这是其他操作的副作用。 # 具体来说,Redis 在以下场景 中独立于用户调用删除对象: # # 1) 在逐出时,由于 maxmemory 和 maxmemory 策略配置, #为了为新数据腾出空间,而不会超过指定的 #memory 限制。 # 2) 因为过期:当一个键与一个相关的生存时间(见 #EXPIRE 命令)必须从内存中删除。 # 3) 因为在可能已经存在 的键上存储数据的命令的副作用。例如,RENAME 命令可能会在旧键 # 内容被另一个替换时删除它。同样 SUNIONSTORE # 或带有 STORE 选项的 SORT 可能会删除现有键。SET 命令 # 本身会删除指定键的任何旧内容,以便将 # 它替换为指定的字符串。 # 4) 在复制过程中,当一个副本与它的主服务器执行完全重新同步时 ,整个数据库的内容被删除,以便 # 加载刚刚传输的 RDB 文件。 # # 在上述所有情况下,默认是以阻塞方式删除对象, # 就像调用了 DEL 一样。 但是,您可以使用以下配置指令专门配置每种情况 # 以便以非阻塞方式释放内存,例如调用 UNLINK # 时。 lazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del no replica-lazy-flush no # 也是可以的,对于何时替换用户代码的情况 DEL调用# 使用 UNLINK 调用并不容易,修改 DEL 命令的默认行为以完全像 UNLINK 一样,使用以下配置 # 指令:lazyfree-lazy-user-del no # FLUSHDB、FLUSHALL 和 SCRIPT FLUSH 都支持异步和同步 # 删除,可以通过将 [SYNC|ASYNC] 标志传递到 # 命令来控制。当两个标志都没有传递时,该指令将用于确定 # 是否应该异步删除数据。lazyfree-lazy-user-flush no ############################### 线程 I/O ###### ########################## Redis 大多是单线程的,但也有一定的线程 # 诸如 UNLINK、慢 I/O 访问和其他 在侧线程上执行的操作。 # # 现在还可以 在不同的 I/O 线程中处理 Redis 客户端的套接字读取和写入。由于特别是写入速度如此之慢,通常 #Redis 用户使用流水线来加快每个 核心的 Redis 性能,并生成多个实例以进行更多扩展。使用 I/O # 线程可以轻松地将 Redis 加速两倍,而无需诉诸 流水线或实例分片。 # # 默认情况下线程是禁用的,我们建议仅在 具有至少 4 个或更多内核的机器上启用它,至少保留一个备用内核。 # 使用超过 8 个线程不太可能有太大帮助。我们还建议 仅在您确实遇到性能问题时才使用 # 线程 I/O,因为 Redis # 实例能够使用相当大比例的 CPU 时间,否则 # 使用此功能毫无意义。 # # 例如,如果你有一个四核盒子,尝试使用 2 或 3 个 I/O # 线程,如果你有 8 个内核,尝试使用 6 个线程。为了 # 启用 I/O 线程,请使用以下配置指令: # # io-threads 4 # # 将 io-threads 设置为 1 将照常使用主线程。 # 当启用 I/O 线程时,我们只使用线程进行写操作,即 # 线程化 write(2) 系统调用并将客户端缓冲区传输到 # 套接字。但是,也可以 使用以下配置指令启用读取线程和 # 协议解析,方法是将 #it 设置 为 yes: # # io-threads-do-reads no # # 通常线程读取没有多大帮助。 # # 注意 1:此配置指令不能在运行时通过 #CONFIG SET 更改。Aso 目前在启用 SSL 时无法使用此功能 。 # # 注意 2:如果你想使用 redis-benchmark 测试 Redis 加速, 请确保你也在线程模式下运行基准测试本身,使用 # --threads 选项来匹配 Redis 线程的数量,否则你将不会 # 能够注意到改进。###########################内核OOM控制################## ########### # 在 Linux 上,可以提示内核 OOM 杀手在 内存不足时应该首先杀死哪些进程。 # # 启用此功能使 Redis 主动控制其所有进程的 oom_score_adj 值 # 取决于它们的角色。默认分数将 # 尝试在所有其他进程之前杀死后台子进程,并 在主进程之前杀死 # 个副本。 # # Redis 支持三个选项: # # no:不更改 oom-score-adj(默认)。 # 是:“相对”的别名见下文。 # absolute: oom-score-adj-values 中的值按原样写入内核。 # relative:当服务器启动时,相对于 oom_score_adj 的初始值使用值, 然后将其限制在 -1000 到 1000 的范围内。 # 因为通常初始值为 0,所以它们通常会匹配 # 绝对值。 oom-score-adj no # 当使用 oom-score-adj 时,该指令控制 用于主、副本和后台子进程的特定值。值的范围是 -2000 到 #2000(越高意味着被杀死的可能性越大)。 # # 非特权进程(不是 root,并且没有 CAP_SYS_RESOURCE 功能) # 可以自由增加它们的值,但不能将其降低到初始 设置以下。这意味着将 oom-score-adj 设置为“相对”并将 # oom-score-adj-values 设置为正值将始终成功。 oom-score-adj-values 0 200 800 ################### 内核透明大页面控制 ############### ###### # 通常内核透明大页面控件默认设置为“madvise”或 #或“never”(/sys/kernel/mm/transparent_hugepage/enabled),在这种 情况下,此配置无效. 在将其设置为“始终”的系统上, #redis 将尝试专门为 redis 进程禁用它,以便 # 避免专门针对 fork(2) 和 CoW 的延迟问题。 # 如果出于某种原因您希望保持启用状态,您可以将此配置设置为 # "no" 并将内核全局设置为 "always"。disable-thp 是############################# 仅附加模式 ############# ##################默认情况下,Redis 将数据集异步转储到磁盘上。#这种模式 在许多应用程序中已经足够好了,但是 Redis 进程的问题或 # 断电可能会导致几分钟的写入丢失(取决于 # 配置的保存点)。 # # Append Only File 是另一种持久性模式,它提供 了更好的持久性。例如,使用默认数据 fsync 策略 #(请参阅配置文件的后面部分)Redis 可能会丢失一秒钟的写入 # 戏剧性的事件,如服务器断电,或者如果 Redis 进程本身发生错误,但操作系统 # 仍然运行正常,则发生单次写入。 ## AOF 和 RDB 持久化可以同时启用,没有问题。 # 如果在启动时启用了 AOF,Redis 将加载 AOF,即 具有更好持久性保证的文件。 # # 请查看 https://redis.io/topics/persistence 了解更多信息。appendonly no # 仅附加文件的名称(默认:“appendonly.aof”)appendfilename “appendonly.aof” # fsync() 调用告诉操作系统实际将数据写入磁盘 # 而不是在输出缓冲区中等待更多数据。有些操作系统会真正刷新 磁盘上的 # 数据,而其他一些操作系统只会尝试尽快完成。 # # Redis 支持三种不同的模式: # # no:不要fsync,只是让操作系统在需要的时候刷新数据。快点。 # always: 每次写入仅附加日志后 fsync。慢,最安全。 # everysec: 每秒只 fsync 一次。妥协。 # # 默认值为“everysec”,因为这通常是 # 速度和数据安全之间的正确折衷。是否可以将其放宽到 #"no" 由您自己决定,这将使操作系统在需要时刷新输出缓冲区 , # 一些数据丢失考虑默认的持久性模式,即快照), # 或者相反,使用“always”,它非常慢但比 #everysec 安全一点。 # # 更多详情请查看以下文章: # http://antirez.com/post/redis-persistence-demystified.html # # 如果不确定,请使用“everysec”。# appendfsync always appendfsync everysec # appendfsync no # 当 AOF fsync 策略设置为 always 或 everysec,并且 background # 保存进程(后台保存或 AOF 日志后台重写)是 # 对磁盘执行大量 I/O,在某些 Linux 配置中 # Redis 可能会在 fsync() 调用上阻塞太久。 # 这是目前,因为即使在不同的线程中执行 fsync 也会阻塞 # 我们的同步 write(2) 调用。 # # 为了缓解这个问题,可以使用以下选项 # 这将防止在 BGSAVE 或 BGREWRITEAOF 正在进行时在主进程中调用 fsync()。 # # 这意味着当另一个孩子正在保存时,Redis 的持久性是 # 与“appendfsync none”相同。实际上,这意味着在最坏的情况下(使用 默认 Linux 设置) 可能会丢失多达 30 秒的日志。 # # 如果您有延迟问题,请将此设置为“是”。否则将其保留为 # 从耐用性的角度来看,“否”是最安全的选择。no-appendfsync-on-rewrite no # 自动重写仅附加文件。 # Redis 能够 在 AOF 日志大小增长指定百分比时自动重写日志文件,隐式调用 #BGREWRITEAOF。 # # 是这样工作的:Redis 会记住 最近一次重写后 AOF 文件的大小(如果重启后没有发生重写, 则使用启动时 AOF 的大小)。 # # 此基本大小与当前大小进行比较。如果当前大小 #大于指定百分比,则触发重写。还 # 你需要为要重写的 AOF 文件指定一个最小大小,这个 # 对于避免重写 AOF 文件很有用,即使 达到百分比增加 # 但它仍然很小。 # # 指定零百分比以禁用自动 AOF # 重写功能。auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 在 Redis # 启动过程中,当 AOF 数据被加载回内存时,可能会发现一个 AOF 文件在最后被截断。 # 这可能在运行 Redis 的系统 崩溃时 发生 # 崩溃或中止,但操作系统仍然正常工作)。 # # Redis 可以在发生这种情况时退出并出现错误,或者加载尽可能多的 数据(现在的默认设置)并在找到 AOF 文件时启动 # 在末尾被截断。以下选项控制此行为。 # # 如果 aof-load-truncated 设置为 yes,则加载截断的 AOF 文件,并且 # Redis 服务器开始发出日志以通知用户该事件。 # 否则,如果该选项设置为 no,则服务器会因错误而中止 # 并拒绝启动。When the option is set to no, the user requires # to fix the AOF file using the "redis-check-aof" utility before to restart # the server. # # 注意,如果中间发现AOF文件损坏了 #服务器还是会报错退出。此选项仅适用于 # Redis 将尝试从 AOF 文件中读取更多数据但找不到足够的字节 # 时。 aof-load-truncated yes # 重写 AOF 文件时,Redis 能够在 # AOF 文件中使用 RDB 前导码,以便更快地重写和恢复。当这个选项打开 # 重写的 AOF 文件由两个不同的节组成: # # [RDB file][AOF tail] # # 加载时,Redis 识别 AOF 文件以“REDIS”开头 # 字符串并加载前缀 RDB 文件,然后继续加载 AOF #tail 。 aof-use-rdb-preamble 是############################### LUA 脚本 ######## ###################### # Lua 脚本的最大执行时间(以毫秒为单位)。 # # 如果达到最大执行时间,Redis 将记录脚本 # 在最大允许时间之后仍在执行,并将开始 # 回复错误的查询。 # # 当长时间运行的脚本超过最大执行时间时,只有 # SCRIPT KILL 和 SHUTDOWN NOSAVE 命令可用。第一个可以 # 用于停止尚未调用任何写入命令的脚本。第二个 # 是在写入命令的情况下关闭服务器的唯一方法 # 已经由脚本发出,但用户不想等待 脚本的自然终止。 # # 将其设置为 0 或负值以无限执行而不会发出警告。 lua-time-limit 5000 ############################### REDIS CLUSTER ########## #####################普通的Redis实例不能成为Redis集群的一部分;只有 # 作为集群节点启动的节点可以。为了将 Redis 实例作为 # 集群节点启动,请启用集群支持取消注释以下内容: # # cluster-enabled yes # 每个集群节点都有一个集群配置文件。#此文件不 适合手动编辑。它由 Redis 节点创建和更新。 # 每个 Redis 集群节点都需要不同的集群配置文件。 # 确保在同一系统中运行的实例没有 # 重叠的集群配置文件名。 # # cluster-config-file nodes-6379.conf # 集群节点超时是一个节点必须无法访问的毫秒 数,才能被认为处于故障状态。 # 大多数其他内部时间限制是节点超时的倍数。 # # cluster-node-timeout 15000 # 如果它的数据 看起来太旧,失败的 master 的副本将避免启动故障转移。 # # 没有简单的方法让一个副本实际上有一个精确的度量 # 它的“数据年龄”,因此执行以下两项检查: # # 1) 如果有多个副本能够进行故障转移,它们会交换消息 # 以便尝试为具有最佳 复制偏移量的副本提供优势 (来自主处理的更多数据)。 # 副本将尝试通过偏移量获得它们的排名,并 在故障转移的开始 # 应用与它们的排名成比例的延迟。 # # 2) 每一个副本都会计算最后一次与 它的主节点交互的时间。这可以是收到的最后一个 ping 或命令(如果 master # 仍处于“已连接”状态),或者自 # 与主服务器断开连接(如果复制链接当前已关闭)。 # 如果最后一次交互时间太长,则副本根本不会尝试故障转移 。 # # 点“2”可由用户调整。 具体来说,如果自上次与主服务器交互以来, 经过的时间大于: ## (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period ,则副本将不会执行故障转移 # # 例如,如果 node-timeout 是 30 秒,cluster-replica-validity-factor # 是 10,并且假设默认的 repl-ping-replica-period 为 10 秒, #replica 将不会尝试故障转移,如果它无法与主人交谈 # 超过 310 秒。 # # 一个大的 cluster-replica-validity-factor 可能允许具有太旧数据的副本进行故障转移 # 一个 master,而一个太小的值可能会阻止集群能够 # 选择一个副本。 # # 为了获得最大可用性,可以将 cluster-replica-validity-factor # 设置为值 0,这意味着 无论上次与主服务器交互的时间如何,副本都将始终尝试对主服务器进行故障转移。 # (但是他们总是会尝试应用与他们的 # 偏移等级成比例的延迟)。 # # 零是唯一能够保证所有分区都恢复的值 # 集群将始终能够继续。 # # cluster-replica-validity-factor 10 # 集群副本能够迁移到孤立的主服务器,即 没有工作副本的主服务器。这提高了集群 抵抗故障的能力,否则如果孤立的主服务器没有工作副本,则在发生故障时无法进行故障转移 。 # # 副本迁移到孤立的主节点,只有当 他们的旧主节点 仍然至少有# 给定数量的其他工作副本时。这个数字 #是“迁移障碍”。迁移屏障为 1 意味着副本 # 只有在其主副本至少有 1 个其他工作副本时才会迁移 #等等。 它通常反映了集群中每个 #master 所需的副本数。 # # 默认值为 1(仅当它们的主服务器保留至少 一个副本时,副本才会迁移)。要禁用迁移,只需将其设置为一个非常大的值或 # set cluster-allow-replica-migration to 'no'。 # 值 0 可以设置,但仅对调试有用, 在生产中很危险。 # # cluster-migration-barrier 1 # 关闭此选项允许使用较少的自动集群配置。 # 它既禁止迁移到孤立的主人,也禁止从主人的迁移 # 变成空的。 # # 默认为“是”(允许自动迁移)。 # # cluster-allow-replica-migration yes # 默认情况下,如果 Redis Cluster 节点检测到有查询,则停止接受查询 # 至少有一个哈希槽未被发现(没有可用的节点为其提供服务)。 # 这样,如果集群部分关闭(例如,一系列哈希槽 # 不再被覆盖),所有集群最终将变得不可用。 # 一旦再次覆盖所有插槽,它就会自动返回可用。 # # 但是,有时您希望集群的子集正在工作, # 继续接受对仍然 # 覆盖的部分密钥空间的查询。为此,只需将 cluster-require-full-coverage # 选项设置为 no。 # # cluster-require-full-coverage yes #这个选项,当设置为yes时,防止副本尝试 在主故障期间对其进行故障转移。 但是,如果强制执行,副本仍然可以执行# 手动故障转移。 # # 这在不同的场景中很有用,特别是在多个 # 数据中心操作的情况下,如果不是,我们希望一方永远不会被提升 # 在 DC 完全故障的情况下。 # # cluster-replica-no-failover no # 此选项设置为 yes 时,允许节点 在集群处于关闭状态时提供读取流量,只要它认为自己拥有插槽。 # # 这对两种情况很有用。第一种情况是应用程序 在节点故障或网络分区期间不需要数据一致性。 # 这方面的一个例子是缓存,只要节点有数据,它就 应该能够为它提供服务。 # # 第二个用例是用于不符合推荐的配置 # 三个分片但希望启用集群模式并稍后扩展的配置。1 或 2 个分片配置中的 # 主服务器中断会导致 整个集群的读/写中断,而没有设置此选项,设置它时只有写入中断。 # 如果没有法定人数的主人,槽的所有权不会自动改变。 ## cluster-allow-reads-when-down no# 为了设置您的集群,请务必阅读 https://redis.io 网站上提供的文档。######################### 集群 DOCKER/NAT 支持 ################## ##### # 在某些部署中,Redis Cluster 节点地址发现失败,因为 # 地址是 NAT-ted 或者是因为端口被转发(典型情况是 #Docker 和其他容器)。 # # 为了使 Redis 集群在这样的环境中工作,需要一个静态的 配置,每个节点都知道它的公共地址。#以下 四个选项用于此范围,它们是: # # * cluster-announce-ip # * cluster-announce-port # * cluster-announce-tls-port # * cluster-announce-bus-port # # 每个都向节点指示其地址、客户端端口(对于 没有和使用 TLS 的连接)和集群消息总线端口。然后将信息 #发布在总线数据包的标头中,以便其他节点能够 正确映射发布信息的节点的地址。 # # 如果 cluster-tls 设置为 yes 并且 cluster-announce-tls-port 被省略或设置 # 为零,则 cluster-announce-port 指的是 TLS 端口。另请注意, 如果 cluster-tls 设置为 no,# cluster-announce-tls-port 无效。 # # 如果不使用上述选项,将使用普通的 Redis Cluster auto-detection # 来代替。 # # 请注意,重新映射时,总线端口可能不在 #clients 端口 + 10000 的固定偏移量处,因此您可以根据重新映射的方式指定任何端口和总线端口 。如果未设置总线端口, 将照常使用#10000 的固定偏移量。 # # 示例: # # cluster-announce-ip 10.1.1.5 # cluster-announce-tls-port 6379 # cluster-announce-port 0 # cluster-announce-bus-port 6380 ########## ######################慢日志######################### ########## # Redis 慢日志是一个记录超过指定 执行时间的查询的系统。执行时间不包括 I/O 操作 # 像与客户端交谈,发送回复等等, # 但只是实际执行命令所需的时间(这是 命令执行的唯一 # 阶段,线程被阻塞并且不能同时服务 # 其他请求)。 # # 您可以使用两个参数配置慢日志:一个告诉 Redis # 要超过多少执行时间,以微秒为单位,以便 # 命令被记录,另一个参数是 # 慢日志的长度。 当记录新命令时,最旧的命令将从记录命令的 # 队列中删除。# 下面的时间用微秒表示,所以1000000是等价的 # 到一秒。请注意,负数会禁用慢速日志,而 # 零值会强制记录每个命令。 slowlog-log-slower-than 10000 # 这个长度没有限制。请注意,它会消耗内存。 # 你可以通过 SLOWLOG RESET 回收慢日志使用的内存。 slowlog-max-len 128 ############################### 延迟监视器########## #################### Redis 延迟监控子系统 在运行时对不同的操作进行采样,以便收集与 Redis 实例的延迟的可能来源相关的数据。 # # 通过 LATENCY 命令,此信息可供可以 # 打印图表和获取报告的用户使用。 # # 系统仅记录在等于或 # 大于通过 #latency-monitor-threshold 配置指令指定的毫秒数的时间内执行的操作。当其值设置为 # 为零时,延迟监视器将关闭。 # # 默认情况下延迟监控是禁用的,因为它几乎不需要 # 如果你没有延迟问题,并且收集数据有性能 # 影响,虽然非常小,但可以在大负载下测量。 如果需要,可以使用命令 #“CONFIG SET latency-monitor-threshold <milliseconds>” 在运行时轻松启用延迟# 监控。 延迟监控阈值 0############################ 事件通知################## ########### # Redis 可以通知 Pub/Sub 客户端有关密钥空间中发生的事件。 # 此功能记录在 https://redis.io/topics/notifications # # 例如,如果启用了键空间事件通知,并且客户端 # 对存储在数据库 0 中的键“foo”执行 DEL 操作,则有两条 # 消息将通过 Pub/Sub 发布: # # PUBLISH __keyspace@0__:foo del # PUBLISH __keyevent@0__:del foo # # 可以在一组 类 中选择 Redis 将通知的事件。每个类都由一个字符标识: # # K Keyspace 事件,以 __keyspace@<db>__ 前缀发布。 # E Keyevent 事件,以 __keyevent@<db>__ 前缀发布。 # g通用 命令 (非特定类型),例如 DEL、EXPIRE、 RENAME 、 ... a key expires) # e Evicted events (当一个 key 被驱逐到 maxmemory 时产生的事件) # t Stream commands # d Module key type events # m Key-miss events (注意:它不包括在'A'类中) # g$lshzxetd 的别名,因此“AKE”字符串表示所有事件 # (除了由于其 独特性质而从 'A' 中排除的 key-miss 事件)。 # # "notify-keyspace-events" 将由 零个或多个字符 组成的字符串作为参数。空字符串表示通知 # 已禁用。 # # 示例:启用列表和通用事件,从 # 事件名称 的角度来看,使用: # # notify-keyspace-events Elg # # 示例 2:获取订阅频道的过期键的流 # name __keyevent@0__:过期使用: # # notify-keyspace-events Ex # # 默认情况下所有通知都被禁用,因为大多数用户不需要 # 此功能并且该功能有一些开销。请注意,如果您不 指定 K 或 E 中的至少一个,则不会传递任何事件。 通知键空间事件“” ############################## GOPHER SERVER ########## ###################### Redis 包含 Gopher 协议的实现,如 RFC 1436 (https://www.ietf.org /rfc/rfc1436.txt)。 # # Gopher 协议在 90 年代后期非常流行。它是web的替代方案 ,服务端和客户端的实现都非常简单 # Redis 服务器只有 100 行代码来实现这个 # 支持。 # # 你现在用 Gopher 做什么?好吧,Gopher 从来没有*真正*死过,而且 # 最近有一个运动,以便让 Gopher 更有层次的内容 # 由纯文本文档组成,以便复活。#一些人想要一个更简单的 互联网,另一些人则认为主流互联网变得过于受 控制, # 为想要一点新鲜空气的人们创造一个替代空间很酷。 # # 不管怎样,为了 Redis 的 10 岁生日,我们给了它 Gopher 协议 # 作为礼物。 # # --- 它是如何工作的?--- # # Redis Gopher 支持使用 Redis 的内联协议,特别是 # 两种无论如何都是非法的内联请求:空请求 # 或任何以“/”开头的请求(没有 以这样的斜线 #开头的 Redis 命令)。正常的 RESP2/RESP3 请求完全不在 Gopher 协议实现的 # 路径之外,并且也照常处理。 # # 如果您在启用 Gopher 时打开到 Redis 的连接并发送它 # 一个类似“/foo”的字符串,如果有一个名为“/foo”的键,它通过 # Gopher 协议提供服务。 # # 为了创建一个真正的 Gopher“洞”(Gopher #talking 中的 Gopher 站点的名称 ),您可能需要如下脚本: # https://github.com/antirez/gopher2redis # # --- SECURITY WARNING --- # # 如果你打算将 Redis 放在 Internet 上的一个可公开访问的地址 # 到服务器 Gopher 页面,请确保设置一个密码实例。 # 一旦设置了密码: # # 1. Gopher 服务器(启用时,不是默认情况下)仍将 通过 Gopher 提供 # 内容。 # 2. 但是在客户端进行身份验证之前不能调用其他命令 。 # # 所以使用'requirepass'选项来保护你的实例。 # # 请注意,当启用 'io-threads-do-reads' # 时,当前不支持 Gopher。 # # 要启用 Gopher 支持,请取消注释以下行并将选项 # 从 no(默认值)设置为 yes。 ## gopher-enabled no ############################## ADVANCED CONFIG ########### #################### #当 条目数较少且最大条目不超过给定值时,哈希使用内存高效的数据结构进行编码临界点。可以使用以下指令配置这些阈值。 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # 列表也以特殊的方式编码,以节省大量空间。 # 可以指定每个内部列表节点允许的条目数# 作为固定的最大尺寸或最大元素数。 # 对于固定的最大大小,使用 -5 到 -1,意思是: # -5: max size: 64 Kb <-- 不推荐用于正常工作负载 # -4: max size: 32 Kb <-- 不推荐 # -3 : max size: 16 Kb <-- 可能不推荐 # -2: max size: 8 Kb <-- good # -1: max size: 4 Kb <-- good # 正数意味着存储最多_exactly_该数量的元素 # 每个列表节点。 # 性能最高的选项通常是 -2(8 Kb 大小)或 -1(4 Kb 大小), # 但如果您的用例独特,请根据需要调整设置。 list-max-ziplist-size -2 # 列表也可以被压缩。 # 压缩深度是从 # 列表的 *each* 边 到 *exclude* 压缩的 quicklist ziplist 节点的数量。 对于快速推送/弹出操作,列表的头部和尾部始终是未压缩的。设置为: # 0:禁用所有列表压缩 # 1:深度 1 表示“直到 1 个节点进入列表后才开始压缩, # 从头或尾开始” # 所以:[head]->node-> node->...->node->[tail] # [head], [tail] 会一直解压;内部节点将压缩。 # 2: [head]->[next]->node->node->...->node->[prev]->[tail] # 2 这里的意思是:不压缩head或者head->next or tail->prev or tail, # 但是压缩它们之间的所有节点。 # 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] # etc. list- compress-depth 0 # 集仅在一种情况下具有特殊编码:当一个集仅由字符串组成时 ,这些字符串恰好是 64 位有符号整数范围内的基数 10 中的整数。 # 以下配置设置设置了 # set 的大小限制,以便使用这种特殊的内存节省编码。 set-max-intset-entries 512 # 与哈希和列表类似,排序集也经过特殊编码 # 为了节省大量空间。此编码仅在 排序集的长度和# 元素低于以下限制时使用: zset-max-ziplist-entries 128 zset-max-ziplist-value 64 # HyperLogLog 稀疏表示字节数限制。该限制包括 #16 字节标头。当使用稀疏表示的 HyperLogLog 超过 此限制时,它会转换为密集表示。 # # 大于 16000 的值是完全没用的,因为此时 #dense 表示的内存效率更高。 # # 建议的值是 ~ 3000,以便具有 # 节省空间的编码的好处,而不会减慢太多的 PFADD, # 这是 O(N) 与稀疏编码。 当 CPU 不是问题,但空间是,数据集是时,该值可以提高到# ~ 10000 # 由许多 HyperLogLogs 组成,基数在 0 - 15000 范围内。 hll-sparse-max-bytes 3000 # 流宏节点最大大小/项。流数据结构是一个基数 # 树,其中包含对多个项目进行编码的大节点。使用此配置 # 可以配置单个节点的大小(以字节为单位),以及在 添加新流条目 时切换到新节点之前它可能包含的最大项目数。如果以下任何设置设置为 # 零,则忽略限制,例如,可以 通过将 max-bytes 设置为 0 并将 max-entries 设置为所需的 # 值来仅设置 # max entries 限制。 流节点最大字节 4096 流节点最大条目 100# 主动重新散列每 100 毫秒 CPU 时间使用 1 毫秒, 以帮助重新散列主 Redis 哈希表(将顶级 键映射到值的表)。Redis 使用的哈希表实现(参见 dict.c) # 执行惰性重新哈希:在重新哈希的哈希表中运行的操作越多 ,执行的重新哈希“步骤”越多,因此如果 服务器空闲,重新哈希永远不会完成,并且 哈希表会使用更多的内存。 # # 默认情况下每秒使用此毫秒 10 次,以便 # 主动重新散列主字典,尽可能释放内存。 # # 如果不确定: # 如果您有严格的延迟要求,请使用“activerehashing no”,并且 在您的环境中,Redis 可以不时回复 # 以 2 毫秒延迟的查询并不是一件好事。 # # 如果您没有这么严格的要求,但 希望尽快释放内存,请使用“activerehashing yes”。 activerehashing yes # 客户端输出缓冲区限制可用于强制断开客户端的连接 # 由于某种原因没有足够快地从服务器读取数据(一个 # 常见原因是 Pub/Sub 客户端无法像 # 出版商可以制作它们)。 # # 可以为三种不同类型的客户端设置不同的限制: # normal -> normal clients including MONITOR clients # replica -> replica clients # pubsub -> 订阅了至少一个 pubsub 通道或模式的客户端 # # 每个 client-output-buffer-limit 指令的语法如下: # # client -output-buffer-limit <class> <hard limit> <soft limit> <soft seconds> # # 一旦达到硬限制,客户端立即断开连接,或者如果 # 达到软限制并保持达到指定的次数 # 秒(连续)。 # 例如,如果硬限制是 32 兆字节,而软限制是 # 16 兆字节 / 10 秒,客户端将立即断开连接 # 如果输出缓冲区的大小达到 32 兆字节,但如果客户端达到 16 兆字节并连续 超过 10 秒的限制, 也会断开连接。 # # 默认情况下,普通客户端不受限制,因为它们不接收数据 # 不请求(以推送方式),而是在请求之后,所以只有异步客户端可能会创建一个请求数据 比它 更快的场景读。 # # 相反,发布订阅和副本客户端有一个默认限制,因为 # 订阅者和副本以推送方式接收数据。 # # 硬限制或软限制都可以通过将它们设置为零来禁用。 客户端输出缓冲区限制正常 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 客户端查询缓冲区累积新命令。默认情况下,它们被限制为固定的 # 数量,以避免协议去同步(对于 # 实例由于客户端中的错误)将导致 # 查询缓冲区中未绑定的内存使用。但是,如果您有非常特殊的 需求,例如我们巨大的多/执行请求等,您可以在此处配置它。 # # client-query-buffer-limit 1gb # 在 Redis 协议中,批量请求,即表示单个 # 字符串的元素,通常限制为 512 mb。但是,您可以在此处更改此限制 #,但必须为 1mb 或更大 # # proto-max-bulk-len 512mb # Redis 调用内部函数来执行许多后台任务,例如 # 在超时关闭客户端连接,清除 # 从未请求过的过期键等等。 # # 并非所有任务都以相同的频率执行,但 Redis 会根据指定的“hz”值检查要执行的 # 个任务。 # # 默认情况下“hz”设置为10。当Redis空闲时,提高该值会占用更多的CPU ,但同时当 有很多key同时过期时, Redis会更加响应,并且可能会超时 # 更精确地处理。 # # 范围在 1 到 500 之间,但通常不会超过 100 # 一个好主意。 大多数用户应该使用默认值 10,并且仅在需要非常低延迟的环境中将其提高到#100。 hz 10 # 通常有一个 与连接的客户端数成比例的 HZ 值很有用。这很有用,例如, #避免每次后台任务调用处理过多的客户端 #以避免延迟峰值。 # # 由于默认的默认 HZ 值保守地设置为 10,Redis # 提供并默认启用使用自适应 HZ 值的能力 # 当有许多连接的客户端时会暂时提高。 # # 启用动态 HZ 时,将使用实际配置的 HZ 作为基线,但是 一旦连接更多客户端,实际会根据需要使用配置的 HZ 值的倍数。通过这种方式,空闲的 实例将使用很少的 CPU 时间,而忙碌的实例将 # 响应更快。 dynamic-hz yes # 当孩子重写 AOF 文件时,如果启用以下选项 # 文件将每生成 32 MB 数据进行一次 fsync-ed。这很有用 # 为了更增量地将文件提交到磁盘并避免 # 大延迟峰值。 aof-rewrite-incremental-fsync yes #redis保存RDB文件时,如果启用了以下选项 # 每生成 32 MB 数据,文件将被 fsync-ed。这很有用 # 为了更增量地将文件提交到磁盘并避免 # 大延迟峰值。 rdb-save-incremental-fsync yes # Redis LFU eviction(见 maxmemory 设置)可以调整。然而, 从默认设置开始并仅在调查后更改它们是一个好主意 # 如何提高性能以及键 LFU 如何随时间变化, # 可以通过 OBJECT FREQ 命令检查。 # # Redis LFU 实现中有两个可调参数: # 计数器对数因子和计数器衰减时间。重要的是要 # 在更改它们之前了解这两个参数的含义。 # # LFU 计数器每个键只有 8 位,最大值为 255,因此 Redis # 使用对数行为的概率增量。给定旧计数器的值 #,当一个键被访问时,计数器以 这种方式递增#: ## 1。提取0到1之间的随机数R。 # 2.概率P计算为1/(old_value*lfu_log_factor+1)。 # 3. 计数器仅在 R < P 时递增。 # # 默认 lfu-log-factor 为 10。 这是一个频率表 # 计数器如何随不同访问次数和不同的访问次数而变化 # 对数因子: # # +--------+------------+------------+------------+ ------------+------------+ # | 因素 | 100 次点击 | 1000 次点击 | 10 万次点击 | 100 万次点击 | 1000 万次点击 | # +--------+------------+------------+------------+ ------------+------------+ # | 0 | 104 | 255 | 255 | 255 | 255 | # +--------+------------+------------+------------+ ------------+------------+ # | 1 | 18 | 49 | 255 | 255 | 255 | # +--------+------------+------------+------------+ ------------+------------+ # | 10 | 10 | 18 | 142 | 255 | 255 | # +--------+------------+------------+------------+ ------------+------------+ # | 100 | 8 | 11 | 49 | 143 | 255 | # +--------+------------+------------+------------+ ------------+------------+ # # 注意:上表是通过运行以下命令获得的: # # redis-benchmark -n 1000000 incr foo # redis-cli object freq foo # # 注意 2:计数器初始值为 5,以便让新对象有机会 # 累积命中。 # # 计数器衰减时间是必须经过的时间,以分钟为单位,以便 # 键计数器除以 2(如果它的值 #less <= 10,则减少)。 # # lfu-decay-time 的默认值为 1。特殊的值 0 表示 每次碰巧扫描计数器时都会衰减计数器。 # # lfu-log-factor 10 # lfu-decay-time 1 ##########################活动碎片整理###### ################# ## 什么是主动碎片整理? # ------------------------------------------- # # 主动(在线)碎片整理允许 Redis 服务器压缩 # 之间留下的空格内存中数据的小分配和释放, # 从而允许回收内存。 # # 分片是每个分配器都会发生的自然过程(但 # 幸运的是,Jemalloc 和某些工作负载更是如此。通常 需要重新启动服务器以降低碎片,或者至少将 所有数据刷新并重新创建。然而,由于这个功能 由 Oran Agra 为 Redis 4.0 实现,这个过程可以在运行时 以“热”的方式发生,同时服务器正在运行。 # # 基本上当碎片超过某个级别时(请参阅 下面的 # 配置选项)Redis 将开始 通过利用某些特定的 Jemalloc # 功能在连续的内存区域中创建 # 值的新副本(以了解分配是否造成碎片化 #并将其分配到更好的地方),同时,将释放 数据的#旧副本。这个过程,对所有键增量重复 # 将导致碎片回落到正常值。 # # 需要了解的重要事项: # # 1. 默认情况下禁用此功能,仅当您编译 Redis # 使用我们随 Redis 源代码提供的 Jemalloc 副本时才有效。 # 这是 Linux 构建的默认设置。 # # 2. 如果你没有碎片 问题,你永远不需要启用这个功能。 # # 3.一旦遇到碎片,可以在以下情况下启用此功能 # 需要命令“CONFIG SET activedefrag yes”。 # # 配置参数能够微调 # 碎片整理过程的行为。如果您不确定它们的含义,那么 保持默认值不变是个好主意。# 启用主动碎片整理 # activedefrag no # 启动主动碎片整理的最小碎片浪费量 # active-defrag-ignore-bytes 100mb # 启动主动碎片整理的最小碎片百分比 # active-defrag-threshold-lower 10 # 最大碎片百分比我们使用最大的努力 #active-defrag-threshold-upper 100# CPU 百分比碎片整理的最小工作量,达到下限 # 阈值时使用 # active-defrag-cycle-min 1 # CPU 百分比碎片整理的最大工作量,达到上限 # 阈值时使用 # active- defrag-cycle-max 25 # 将从 主字典扫描处理的 set/hash/zset/list 字段的最大数量 # active-defrag-max-scan-fields 1000 # 默认情况下将启用 Jemalloc 后台线程进行清除 jemalloc-bg-thread yes # 可以将 Redis 的不同线程和进程固定到 系统中的特定 CPU,以最大限度地提高服务器的性能。 # 这对于将不同的 Redis 线程固定在不同的 CPU 中很有用,而且为了确保 在同一主机上运行的多个 Redis 实例将被固定到不同的 CPU。 # # 通常你可以使用“taskset”命令来做到这一点,但是 在 Linux 和 FreeBSD 中也可以直接通过 Redis 配置来做到这一点。 # # 您可以固定服务器/IO 线程、bio 线程、aof rewrite 子进程和 # bgsave 子进程。指定 cpu 列表的语法与 #taskset 命令相同: # # 将 redis server/io 线程设置为 cpu 亲和性 0,2,4,6: # server_cpulist 0-7:2 # # 将 bio 线程设置为 cpu 亲和性 1,3: # bio_cpulist 1,3 # # 将 aof rewrite 子进程设置为 cpu 亲和性 8,9,10,11: # aof_rewrite_cpulist 8-11 # # 将 bgsave 子进程设置为 cpu 亲和性 1, 10,11 # bgsave_cpulist 1,10-11 # 在某些情况下,如果检测 到系统处于不良状态,redis 会发出警告甚至拒绝启动# 可以 通过设置以下配置来抑制这些警告以空格分隔的警告列表 # 抑制 # # ignore-warnings ARM64-COW-BUG
Redis cluster 6.2.5 全量配置说明相关推荐
- redis cluster 集群 HA 原理和实操(史上最全、面试必备)
文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...
- 全面剖析Redis Cluster原理和应用 (good)
redis redis cluster注意的问题 : 1.'cluster-require-full-coverage'参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基 ...
- Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式
推荐观看: 十年架构师实战Redis-用Redis实现:秒杀/抢购/排行榜/推荐系统/抽奖系统!从Redis到分布式架构,通过Redis学AKF划分原则.CAP定理!www.bilibili.com ...
- 华为python673集_实现Redis Cluster并实现Python链接集群
一.Redis Cluster简单介绍 Redis集群搭建的方式有多种,例如使用Redis主从复制+Sentinel高可用集群.zookeeper等,但从Redis 3.0之后版本支持Redis-cl ...
- 38 Redis Cluster 的通信开销限制集群规模
38 Redis Cluster 的通信开销限制集群规模 前言 一.实例通信方法和对集群规模的影响 二.Gossip 消息大小 三.实例间通信频率 二.降低实例间通信开销的方法 总结 前言 Redis ...
- Redis Cluster 实战 - 图解 - 秒懂 - 史上最全
文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 免费赠送 经典图书 : 极致经典 + 社群大片好评 < Java 高 ...
- Redis持久化机制 -全量同步与增量同步的区别
全量同步与增量同步的区别 全量同步:就是每天定时(避开高峰期)或者采用一个周期实现将数据拷贝到一个地方也就是Rdb存储. 增量同步:比如采用对行为的操作实现对数据的同步,也就是AOF. 全量与增量的比 ...
- redis 全量复制条件
以下情况备节点会做全量复制: 1. 备节点第一次连到主节点. 2. 节点重启,主节点runid会变,备节点runid会丢失,redis <4.0 会发生全量复制. 3. 部分复制失败,以下条件会 ...
- 【图解】redis主从同步流程——全量同步、部分同步、命令传播
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.全量同步 二.部分同步 三.命令传播 总结 前言 本文主要介绍Redis高可用下的主从同步问题,包括全量同步.部分 ...
最新文章
- 【IEEE出版-EI检索】第三届IEEE信息与计算机前沿技术国际学术会议
- rust相框加载图片代码_Rust 能取代 Python,更好的实现神经网络?
- [WinError 10061] 由于目标计算机积极拒绝,无法连接错误解决办法
- 互联网晚报 | 11月21日 星期日 | B站公布《三体》动画首个预告片;涪陵榨菜回应天价礼盒;农行个人贷款余额突破7万亿元...
- 查看windows系统信息
- Office 365 之 Skype For Business电话功能试用
- Face3D学习笔记(5)3DMM示例源码解析【中下】从二维图片的特征点重建三维模型——黄金标准算法
- python:实现convolve卷积算法(附完整源码)
- 品优购网页搭建过程(HTML5+CSS)
- 经度纬度地图搜索器_百度地图搜索经度纬度_地球经度纬度示意图
- mysql退出安全模式_MySQL数据库之mysql 解除安全模式
- Get rid of annoying security alerts in Microsoft Outlook!
- 群晖安装Calibre(含格式转换豆瓣元数据推送kindle)221211
- 一岁半宝宝不肯吃饭怎么办
- 软件产品检测测试报告找谁做?出测试报告机构推荐
- 微信小程序富文本渲染(rich-text)换行失效
- 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
- Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)
- java面向过程外卖订餐系统 完整版
- 使用Jedis连接Redis失败的几个注意点