# 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 360​​0 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 全量配置说明相关推荐

  1. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  2. 全面剖析Redis Cluster原理和应用 (good)

    redis redis cluster注意的问题 : 1.'cluster-require-full-coverage'参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基 ...

  3. Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式

    推荐观看: 十年架构师实战Redis-用Redis实现:秒杀/抢购/排行榜/推荐系统/抽奖系统!从Redis到分布式架构,通过Redis学AKF划分原则.CAP定理!​www.bilibili.com ...

  4. 华为python673集_实现Redis Cluster并实现Python链接集群

    一.Redis Cluster简单介绍 Redis集群搭建的方式有多种,例如使用Redis主从复制+Sentinel高可用集群.zookeeper等,但从Redis 3.0之后版本支持Redis-cl ...

  5. 38 Redis Cluster 的通信开销限制集群规模

    38 Redis Cluster 的通信开销限制集群规模 前言 一.实例通信方法和对集群规模的影响 二.Gossip 消息大小 三.实例间通信频率 二.降低实例间通信开销的方法 总结 前言 Redis ...

  6. Redis Cluster 实战 - 图解 - 秒懂 - 史上最全

    文章很长,而且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 免费赠送 经典图书 : 极致经典 + 社群大片好评 < Java 高 ...

  7. Redis持久化机制 -全量同步与增量同步的区别

    全量同步与增量同步的区别 全量同步:就是每天定时(避开高峰期)或者采用一个周期实现将数据拷贝到一个地方也就是Rdb存储. 增量同步:比如采用对行为的操作实现对数据的同步,也就是AOF. 全量与增量的比 ...

  8. redis 全量复制条件

    以下情况备节点会做全量复制: 1. 备节点第一次连到主节点. 2. 节点重启,主节点runid会变,备节点runid会丢失,redis <4.0 会发生全量复制. 3. 部分复制失败,以下条件会 ...

  9. 【图解】redis主从同步流程——全量同步、部分同步、命令传播

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.全量同步 二.部分同步 三.命令传播 总结 前言 本文主要介绍Redis高可用下的主从同步问题,包括全量同步.部分 ...

最新文章

  1. 【IEEE出版-EI检索】第三届IEEE信息与计算机前沿技术国际学术会议
  2. rust相框加载图片代码_Rust 能取代 Python,更好的实现神经网络?
  3. [WinError 10061] 由于目标计算机积极拒绝,无法连接错误解决办法
  4. 互联网晚报 | 11月21日 星期日 | B站公布《三体》动画首个预告片;涪陵榨菜回应天价礼盒;农行个人贷款余额突破7万亿元...
  5. 查看windows系统信息
  6. Office 365 之 Skype For Business电话功能试用
  7. Face3D学习笔记(5)3DMM示例源码解析【中下】从二维图片的特征点重建三维模型——黄金标准算法
  8. python:实现convolve卷积算法(附完整源码)
  9. 品优购网页搭建过程(HTML5+CSS)
  10. 经度纬度地图搜索器_百度地图搜索经度纬度_地球经度纬度示意图
  11. mysql退出安全模式_MySQL数据库之mysql 解除安全模式
  12. Get rid of annoying security alerts in Microsoft Outlook!
  13. 群晖安装Calibre(含格式转换豆瓣元数据推送kindle)221211
  14. 一岁半宝宝不肯吃饭怎么办
  15. 软件产品检测测试报告找谁做?出测试报告机构推荐
  16. 微信小程序富文本渲染(rich-text)换行失效
  17. 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
  18. Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)
  19. java面向过程外卖订餐系统 完整版
  20. 使用Jedis连接Redis失败的几个注意点

热门文章

  1. xfce Android studio,Ubuntu Studio 20.10放弃Xfce桌面转向更高级的KDE Plasma
  2. 论文查重可能会进入的误区
  3. pytest-fixture应用
  4. SSH 服务详解 (三)-- 使用 SSH 代理
  5. Python小游戏——孔明棋
  6. Unity 拓展功能之 Hierarchy面板右侧小图标功能
  7. Linux - 查看磁盘空间占用
  8. knockout.js简单实用教程1
  9. Android自定义手绘板 签字板
  10. Enscape 3.4这些功能还不会用?学会让你事半功倍