redis配置文件 6.2.*版本


#Redis 配置文件示例。请注意,为了读取配置文件,
#Redis 必须以文件路径作为第一个参数启动:.redis-server pathtoredis.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 都是一样的。

################################## INCLUDES ###################################
#可以通过includes包含,redis.conf可以作为总闸,包含其他

# 在此处包含一个或多个其他配置文件。
#如果您有一个适用于所有 Redis 服务器的标准模板,但还需要自定义一些每个服务器的设置,这将很有用。
#包含文件可以包含其他文件,因此请明智地使用它。
#
# 请注意,选项“include”不会被来自管理员或 Redis Sentinel 的命令“CONFIG REWRITE”重写。
#由于 Redis 始终使用最后处理的行作为配置指令的值,因此您最好将 include 放在该文件的开头以避免在运行时覆盖配置更改。
#
# 相反,如果您对使用 include 覆盖配置选项感兴趣,最好将 include 用作最后一行
#
# include /path/to/local.conf
# include /path/to/other.conf

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## NETWORK[网络] #####################################

# 认情况下,如果未指定“绑定”配置指令,Redis 会侦听来自主机上所有可用网络接口的连接。
#可以使用“绑定”配置指令仅监听一个或多个选定的接口,后跟一个或多个 IP 地址。
#每个地址都可以加上“-”前缀,表示没有地址时redis不会启动失败。不可用仅指不对应任何网络接口的地址。已经在使用的地址总是会失败,不支持的协议总是会被默默地跳过。
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1     # 侦听两个特定的 IPv4 地址
# bind 127.0.0.1 ::1              # 侦听环回 IPv4 和 IPv6
# bind * -::*                     # 像默认一样,所有可用的接口
#
# ~~~ 警告~~~ 如果运行 Redis 的计算机直接暴露在互联网上,绑定到所有接口是危险的,并且会将实例暴露给互联网上的每个人。
#所以默认情况下,我们取消注释以下绑定指令,这将强制 Redis 仅侦听 IPv4 和 IPv6(如果可用)环回接口地址(这意味着 Redis 将只能接受来自运行它的同一主机的客户端连接).
#
# 如果您确定要让您的实例监听所有接口,只需注释掉以下行即可
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##允许redis外地连接  必须  注释掉 bind 127.0.0.1 -::1
#bind 127.0.0.1 -::1

# 保护模式是一层安全保护,以避免在互联网上开放的 Redis 实例被访问和利用。
#
# 当保护模式打开时,如果:
# 1) 服务器未使用“绑定”指令显式绑定到一组地址。
# 2) 没有配置密码。
#
# 服务器只接受来自客户端的连接
# IPv4 和 IPv6 环回地址 127.0.0.1 和 ::1,以及来自 Unix 域套接字
#
# 默认情况下启用保护模式。仅当您确定希望来自其他主机的客户端连接到 Redis,即使没有配置身份验证,也没有使用“绑定”指令明确列出一组特定接口时,才应禁用它。
protected-mode no

# 接受指定端口上的连接,默认为 6379 (IANA 815344)。如果指定端口 0,Redis 将不会监听 TCP 套接字。
port 6379

# TCP listen() 积压。
#在每秒请求数很高的环境中,您需要大量积压以避免客户端连接速度慢的问题。
#请注意,Linux 内核会默默地将其截断为 /proc/sys/net/core/somaxconn 的值,因此请确保同时提高 somaxconn 和 tcp_max_syn_backlog 的值以获得所需的效果。

tcp-backlog 511

# Unix socket.
#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 对服务器功能(接受连接)和客户端功能(从主服务器复制、建立集群总线连接等)使用相同的证书。
#
# 有时颁发的证书带有将它们指定为仅客户端或仅服务器证书的属性。在那种情况下,可能需要对传入(服务器)和传出(客户端)连接使用不同的证书。为此,请使用以下指令:
#
# 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 optional

# 默认情况下,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"

# 配置允许的密码。有关此字符串语法的更多信息
#
# 注意:此配置仅适用于 <= TLSv1.2。
#
# tls-ciphers DEFAULT:!MEDIUM

# 配置允许的 TLSv1.3 密码套件。有关此字符串语法的更多信息,尤其是 TLSv1.3 密码套件,请参阅密码 (1ssl) 联机帮助页。
#
# 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

################################# GENERAL[一般设置] #####################################

# 默认情况下,Redis 不作为守护进程运行。如果需要,请使用“是”。
#请注意,Redis 在守护进程时会在 varrunredis.pid 中写入一个 pid 文件。当 Redis 被 upstart 或 systemd 监管时,这个参数没有影响。
#将daemonize yes注释起来或者 改为daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no

# 如果您从 upstart 或 systemd 运行 Redis,Redis 可以与您的监督树交互。
#选项:
#   supervised no      - 无监督互动
#   supervised upstart - 通过将 Redis 置于 SIGSTOP 模式来向 upstart 发出信号需要在你的 upstart 作业配置中使用“expect stop”
#   supervised systemd - 通过在启动时将 READY=1 写入 NOTIFY_SOCKET 并定期更新 Redis 状态来向 systemd 发出信号。
#   supervised auto    - 基于 UPSTART_JOB 或 NOTIFY_SOCKET 环境变量检测 upstart 或 systemd 方法
# 注意:这些监督方法只发出“过程准备就绪”的信号。他们不会启用连续的 ping 返回给您的主管
#
#默认值为“否”。要在 upstart/systemd 下运行,您只需取消注释以下行:
#
# supervised auto

# 如果指定了 pid 文件,Redis 会在启动时将其写入指定的位置,并在退出时将其删除。
#
#当服务器运行非守护进程时,如果在配置中没有指定,则不会创建 pid 文件。当服务器被守护时,即使没有指定,也会使用 pid 文件,默认为“/var/run/redis.pid”。

#
# 创建 pid 文件是尽力而为:如果 Redis 无法创建它,没有什么不好的事情发生,服务器将正常启动和运行。
#
# 请注意,在现代 Linux 系统上,“runredis.pid”更符合要求,应该改用它。
pidfile /var/run/redis_6379.pid

# 指定服务器详细级别
# 这可以是以下之一:
# debug (很多信息,对开发测试很有用)
# verbose (许多很少有用的信息,但不像调试级别那样混乱)
# notice (适度冗长,你可能想要在生产中)
# warning (只是非常重要/ 记录关键消息)
loglevel notice

# 指定日志文件名。空字符串也可用于强制 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 之间的数字
databases 16

# 默认情况下,Redis 仅在开始记录到标准输出并且标准输出为 TTY 且禁用 syslog 日志记录时才显示 ASCII 艺术徽标。基本上这意味着通常徽标仅在交互式会话中显示。
#
# 然而,通过将以下选项设置为 yes,可以强制 pre-4.0 行为并始终在启动日志中显示 ASCII 艺术徽标。
always-show-logo no

# 默认情况下,Redis 修改进程标题(如“top”和“ps”中所示)以提供一些运行时信息。可以通过将以下设置为 no 来禁用此功能并保留执行的进程名称。
set-proc-title yes

# 在更改进程标题时,Redis 使用以下模板来构造修改后的标题。
#
# 模板变量在大括号中指定。支持以下变量:
#
# {title}          执行的进程名称(如果是父进程)或子进程的类型。
# {listen-addr}     绑定地址或 '' 后跟 TCP 或 TLS port 侦听,或 Unix socket(如果可用)。
# {server-mode}     特殊模式,即 "[sentinel]" or "[cluster]".
# {port}            侦听的 TCP 端口,或 0
# {tls-port}        TLS 端口侦听,或 0.
# {unixsocket}      Unix 域套接字侦听,或“”。
# {config-file}     使用的配置文件的名称。
#
proc-title-template "{title} {listen-addr} {server-mode}"

################################ SNAPSHOTTING[持久化配置]  ################################

# 将数据库保存到磁盘
#
# save <seconds> <changes>
#
# 如果给定的秒数和给定的对数据库的写操作次数都发生,Redis 将保存数据库
#
# 可以使用单个空字符串参数完全禁用快照,如下例所示:
#
# save ""
#
# 除非另有说明,默认情况下,Redis 将保存数据库:
#   3600 秒(一小时)后,如果至少有 1 个键被更改
#   300 秒(5 分钟)后,如果至少有 100 个键被更改
#   60 秒后,如果至少有 10000 个键被更改
#
# 您可以通过取消注释以下三行来明确设置这些。
#
# save 3600 1
# save 300 100
# save 60 10000

# 默认情况下,如果启用 RDB 快照(至少一个保存点)并且最新的后台保存失败,
#Redis 将停止接受写入。这将使用户意识到(以一种艰难的方式)数据没有正确地保存在磁盘上,否则很可能没有人会注意到并且会发生一些灾难。
#
# 如果后台保存进程将再次开始工作,Redis 将自动允许再次写入
#
# 但是,如果您已经设置了对 Redis 服务器和持久性的适当监控,您可能希望禁用此功能,以便 Redis 将继续照常工作,即使存在磁盘、权限等问题。
stop-writes-on-bgsave-error yes

# 转储 .rdb 数据库时使用 LZF 压缩字符串对象?
# 默认情况下启用压缩,因为它几乎总是一个胜利。
# 如果你想在保存的节点中节省一些 CPU 将它设置为“否”但是
# 如果您有可压缩的值或键,数据集可能会更大。

rdbcompression yes

# 从 RDB 的版本 5 开始,CRC64 校验和被放置在文件的末尾
# 这使格式更能抵抗损坏,但在保存和加载 RDB 文件时会降低性能(大约 10%),因此您可以禁用它以获得最佳性能。
# 在禁用校验和的情况下创建的 RDB 文件的校验和为零,这将告诉加载代码跳过检查。
rdbchecksum yes


#在加载 RDB 或 RESTORE 负载时启用或禁用对 ziplist 和 listpack 等的全面卫生检查。这减少了稍后在处理命令时断言或崩溃的可能性。
# Options:
#   no         - Never perform full sanitation 永远不要进行全面消毒
#   yes        - Always perform full sanitation 始终执行全面卫生
#   clients    - Perform full sanitation only for user connections.
#                Excludes: RDB files, RESTORE commands received from the master
#                connection, and client connections which have the
#                skip-sanitize-payload ACL flag. 仅为用户连接执行全面清理。不包括:RDB 文件、从主连接接收到的 RESTORE 命令,以及具有 skip-sanitize-payload ACL 标志的客户端连接。
# 默认值应该是“clients”,但由于它目前会影响通过 MIGRATE 进行的集群重新分片,因此默认情况下它暂时设置为“no”。
#
# sanitize-dump-payload no

# 转储数据库的文件名
dbfilename dump.rdb

# 在未启用持久性的情况下删除实例中复制使用的 RDB 文件。
#默认情况下,此选项是禁用的,但是在某些环境中,出于法规或其他安全考虑,RDB 文件由主服务器保存在磁盘上以提供副本,或由副本存储在磁盘上以便加载它们以进行初始同步,应该是尽快删除。
#请注意,此选项仅适用于同时禁用 AOF 和 RDB 持久性的实例,否则将被完全忽略
#
# 获得相同效果的另一种(有时更好)方法是在主实例和副本实例上使用无盘复制。然而,在副本的情况下,无盘并不总是一种选择。
rdb-del-sync-files no

# 工作目录。 DB 将写入此目录中,并使用上面使用“dbfilename”配置指令指定的文件名。 Append Only 文件也将在此目录中创建。请注意,您必须在此处指定目录,而不是文件名。
dir ./

################################# REPLICATION[复制] #################################

# 主副本复制。使用 replicaof 使 Redis 实例成为另一个 Redis 服务器的副本。需要尽快了解有关 Redis 复制的一些事项。
#
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis 复制是异步的,但您可以将主服务器配置为停止接受写入,如果它似乎未连接到至少给定数量的副本。
# 2) 如果复制链接丢失的时间相对较短,Redis 副本能够与主服务器执行部分重新同步。
#    您可能希望根据需要使用合理的值配置复制积压大小(请参阅本文件的下一部分)。
# 3) 复制是自动的,不需要用户干预。网络分区后,副本会自动尝试重新连接到主服务器并与它们重新同步。
#
# replicaof <masterip> <masterport>

# 如果主服务器受密码保护(使用下面的“requirepass”配置指令),则可以告诉从服务器在开始复制同步过程之前进行身份验证,否则主服务器将拒绝从服务器请求。
#
# masterauth <master-password>
#
# 但是,如果您使用 Redis ACL(对于 Redis 版本 6 或更高版本),这还不够,并且默认用户无法运行复制所需的 PSYNC 命令和/或其他命令。
# 在这种情况下,最好配置一个特殊用户用于复制,并指定 masteruser 配置如下
#
# masteruser <username>
#
# 当指定 masteruser 时,副本将使用新的 AUTH 形式对其主服务器进行身份验证:AUTH <username> <password>。

# 当副本失去与主服务器的连接时,或者当复制仍在进行时,副本可以以两种不同的方式进行操作:
# 1) 如果 replica-serve-stale-data 设置为“yes”(默认值),副本仍将回复客户端请求,可能使用过时的数据,或者如果这是第一次同步,则数据集可能只是空的。
# 2) 如果 replica-serve-stale-data 设置为“no”,副本将对所有命令回复错误“SYNC with master in progress”,除了:
#    INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE,
#    UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST,
#    HOST and LATENCY.
#
replica-serve-stale-data yes

#您可以将副本实例配置为接受或不接受写入。针对副本实例的写入可能有助于存储一些临时数据(因为写入副本的数据在与主实例重新同步后很容易被删除),但如果客户端由于配置错误而写入副本,也可能会导致问题。
#
# 由于 Redis 2.6 默认情况下副本是只读的。
#
# 注意:只读副本并非旨在暴露给 Internet 上不受信任的客户端。
# 它只是防止滥用实例的保护层。默认情况下,只读副本仍会导出所有管理命令,例如 CONFIG、DEBUG 等。
#在有限的范围内,您可以使用“重命名命令”来隐藏所有管理危险命令来提高只读副本的安全性。
replica-read-only yes

# 复制同步策略:磁盘 或 socket.
#
# 无法继续复制过程的新副本和重新连接的副本只是接收到差异,需要执行所谓的“完全同步”。 RDB 文件从主服务器传输到副本服务器。
# 传输可以通过两种不同的方式发生:
# 1) Disk-backed: Redis master 创建一个新进程,将 RDB 文件写入磁盘。稍后文件由父进程递增地传输到副本。
# 2) Diskless: Redis master创建一个新进程直接将RDB文件写入replica sockets,完全不接触磁盘.
#
# 使用磁盘支持的复制,在生成 RDB 文件时,一旦生成 RDB 文件的当前子节点完成其工作,就可以将更多副本排队并使用 RDB 文件提供服务。
# 而使用无盘复制,一旦传输开始,到达的新副本将排队,并且当当前副本终止时将开始新的传输。
#
# 当使用无盘复制时,master 在开始传输之前等待一段可配置的时间(以秒为单位),希望多个副本到达并且传输可以并行进行
#
# 对于慢速磁盘和快速(大带宽)网络,无盘复制效果更好。
repl-diskless-sync no


# 启用无盘复制后,可以配置服务器等待的延迟,以便生成通过socket将 RDB 传输到副本的子节点。
#
# 这一点很重要,因为一旦传输开始,就不可能为到达的新副本提供服务,这些副本将排队等待下一次 RDB 传输,因此服务器等待延迟,以便让更多副本到达。
#
# 延迟以秒为单位指定,默认为 5 秒。要完全禁用它,只需将其设置为 0 秒,传输将尽快开始。
repl-diskless-sync-delay 5

# -----------------------------------------------------------------------------
# 警告:RDB 无盘加载是实验性的。
# 由于在此设置中,副本不会立即将 RDB 存储在磁盘上,因此可能会导致故障转移期间的数据丢失。
# RDB 无盘加载 + Redis 模块不处理 IO 读取也可能导致 Redis 在与 master 的初始同步阶段出现 IO 错误时中止。
# 仅当您知道自己在做什么时才使用。
# -----------------------------------------------------------------------------
#
# Replica 可以直接从 socket 加载它从复制链接读取的 RDB,或者将 RDB 存储到一个文件中,并在完全从 master 接收后读取该文件
#
# 在许多情况下,磁盘比网络慢,存储和加载 RDB 文件可能会增加复制时间(甚至会增加 master 的 Copy on Write 内存和 salve 缓冲区)。
# 但是,直接从socket解析 RDB 文件可能意味着我们必须在接收到完整的 rdb 之前刷新当前数据库的内容。为此,我们有以下选择:
#
# "disabled"    - 不要使用无盘加载(先把rdb文件存到磁盘)
# "on-empty-db" - 只有在完全安全的情况下才使用无盘加载。
# "swapdb"      - 在直接从socket解析数据时,在 RAM 中保留当前数据库内容的副本。请注意,这需要足够的内存,如果你没有它,你就有 OOM 被杀死的风险。
repl-diskless-load disabled

# 副本以预定义的时间间隔向服务器发送 PING。可以使用 repl_ping_replica_period 选项更改此间隔。默认值为 10 秒。
#
# repl-ping-replica-period 10

# 以下选项设置复制超时:
#
# 1)从副本的角度来看,在 SYNC 期间批量传输 IO。
# 2) 从副本(数据、ping)的角度来看主超时。
# 3) 从主人的角度来看副本超时(REPLCONF ACK ping)。
#
# 重要的是要确保此值大于为 repl-ping-replica-period 指定的值,否则每次主从之间的流量较低时都会检测到超时。默认值为 60 秒。
#
# repl-timeout 60

# SYNC 后在副本socket上禁用 TCP_NODELAY?
#
# 如果选择“是”,Redis 将使用较少数量的 TCP 数据包和较少的带宽将数据发送到副本。但这会增加数据出现在副本端的延迟,使用默认配置的 Linux 内核最多延迟 40 毫秒。
#
# 如果您选择“no”,数据出现在副本端的延迟将减少,但将使用更多带宽进行复制。
#
# 默认情况下,我们针对低延迟进行了优化,但在非常高的流量条件下,或者当主服务器和副本服务器距离很远时,将其设置为“yes”可能是个好主意。
repl-disable-tcp-nodelay no

# 设置复制积压大小。 backlog 是一个缓冲区,当副本断开连接一段时间后,它会累积副本数据,以便当副本想要再次重新连接时,通常不需要完全重新同步,但部分重新同步就足够了,只需将部分数据传递给副本断开连接时错过了。
#
# 复制积压越大,副本承受断开连接的时间就越长,稍后能够执行部分重新同步。
#
#仅当至少有一个副本连接时才分配积压。
#
# repl-backlog-size 1mb

# 在 master 一段时间没有连接的副本后,积压将被释放。以下选项配置需要经过的秒数,从最后一个副本断开连接的时间开始,以释放积压缓冲区。
#
# 请注意,副本永远不会因超时而释放积压,因为它们稍后可能会被提升为主服务器,并且应该能够正确地与其他副本“部分重新同步”:因此它们应该始终累积积压
#
# 值为 0 意味着永远不会释放积压。
#
# repl-backlog-ttl 3600

# 副本优先级是 Redis 在 INFO 输出中发布的整数。如果主服务器不再正常工作,Redis Sentinel 使用它来选择一个副本以提升为主服务器。
#
# 具有低优先级数字的副本被认为更适合提升,因此例如,如果有三个优先级为 10、100、25 的副本,Sentinel 将选择优先级为 10 的副本,即最低的
#
# 然而,一个特殊的 0 优先级标记副本不能执行 master 的角色,因此 Redis Sentinel 永远不会选择优先级为 0 的副本进行升级。
#
# 默认优先级为 100。
replica-priority 100

# -----------------------------------------------------------------------------
# 默认情况下,Redis Sentinel 在其报告中包含所有副本。副本可以从 Redis Sentinel 的公告中排除。未经通知的副本将被“sentinel replicas <master>”命令忽略,并且不会暴露给 Redis Sentinel 的客户端。
#
# 此选项不会更改副本优先级的行为。即使将 replica-announced 设置为“no”,副本也可以提升为 master。要防止此行为,请将 replica-priority 设置为 0。
#
# replica-announced yes

# 如果连接的副本少于 N 个,master 有可能停止接受写入,延迟小于或等于 M 秒。
#
# 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 主节点能够以不同方式列出附加副本的地址和端口。例如,“INFO 复制”部分提供了此信息,Redis Sentinel 使用这些信息以及其他工具来发现副本实例。
# 此信息可用的另一个地方是主服务器的“ROLE”命令的输出。
#
# 副本通常报告的列出的 IP 地址和端口通过以下方式获取:
#
#   IP:通过检查副本用于连接主服务器的套接字的对等地址来自动检测地址。
#
#   Port: 该端口在复制握手期间由副本进行通信,通常是副本用于侦听连接的端口
#
# 但是,当使用端口转发或网络地址转换 (NAT) 时,实际上可以通过不同的 IP 和端口对访问副本.
# 副本可以使用以下两个选项向其主服务器报告一组特定的 IP 和端口,以便 INFO 和 ROLE 都将报告这些值。
#
# 如果您只需要覆盖端口或 IP 地址,则无需同时使用这两个选项。
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

############################### KEYS TRACKING [key 追踪]#################################

# Redis 实现了对客户端值缓存的服务器辅助支持。这是使用一个失效表实现的,该失效表使用由键名索引的基数键记住哪些客户端具有哪些键。反过来,这用于向客户端发送无效消息。请查看此页面以了解有关该功能的更多信息:
#
#   https://redis.io/topics/client-side-caching
#
# 当为客户端启用跟踪时,假定所有只读查询都被缓存:这将强制 Redis 将信息存储在失效表中。修改密钥时,此类信息将被清除,并将无效消息发送到客户端。但是,如果工作负载主要是读取,Redis 可能会使用越来越多的内存来跟踪许多客户端获取的键。
#
# 为此,可以为失效表配置最大填充值。默认设置为 1M 的键,一旦达到这个限制,Redis 将开始驱逐失效表中的键,即使它们没有被修改,只是为了回收内存:这将反过来强制客户端使缓存失效值。基本上,表的最大大小是您想要在服务器端花费的内存来跟踪有关谁缓存了什么的信息与客户端在内存中保留缓存对象的能力之间的权衡。
#
# 如果将该值设置为 0,则表示没有限制,Redis 将在失效表中保留所需数量的键。.
# 在INFO 的 “stats” 部分,您可以找到有关每个给定时刻失效表中密钥数量的信息.
#
# 注意:在广播模式下使用按键跟踪时,服务器端不使用内存,因此此设置无用.
#
# tracking-table-max-keys 1000000

################################## SECURITY [安全] ###################################

# 警告:由于 Redis 非常快,外部用户每秒可以在现代盒子上尝试多达 100 万个密码。这意味着您应该使用非常强的密码,否则它们很容易被破解.
# 请注意,因为密码实际上是客户端和服务器之间的共享秘密,任何人都不应该记住密码,所以密码可以很容易地是来自 devurandom 或其他任何东西的长字符串,因此通过使用长而难以猜测的密码就不会被暴力破解攻击将是可能的。.

# Redis ACL 用户按以下格式定义::
#   user <username> ... acl rules ...
#
# 例如:
#
#   user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
#
# 特殊用户名“default”用于新连接。如果此用户具有“nopass”规则,则新连接将立即被验证为“默认”用户,无需通过 AUTH 命令提供任何密码.
# 否则,如果“默认”用户未被标记为“nopass”,连接将以未验证状态开始,并且需要 AUTH(或 HELLO 命令 AUTH 选项)才能通过验证并开始工作。

# 描述用户可以做什么的 ACL 规则如下:
#
#  on           启用用户:可以作为该用户进行身份验证.
#  off          禁用用户:不再可能对此用户进行身份验证,但是已经通过身份验证的连接仍然有效.
#  skip-sanitize-payload     跳过 RESTORE 转储有效负载卫生.
#  sanitize-payload         RESTORE 转储有效负载已清理(默认).
#  +<command>   允许执行该命令
#  -<command>   禁止执行该命令
#  +@<category> 允许执行具有有效类别的此类类别中的所有命令,如@admin、@set、@sortedset 等,请参阅描述和定义 Redis 命令表的 server.c 文件中的完整列表.
#               特殊类别@all 表示所有命令,但当前存在于服务器中,将来会通过模块加载.
#  +<command>|subcommand    允许禁用命令的特定子命令。请注意,此形式不允许像 -DEBUG|SEGFAULT 这样的负数,而只能以“+”开头的加法。
#  allcommands  +@all 的别名。请注意,这意味着能够执行通过模块系统加载的所有未来命令.
#  nocommands   -@all 的别名.
#  ~<pattern>   添加可以作为命令的一部分提及的键模式。例如 ~ 允许所有键. 该模式是一个类似 KEYS 的 glob 样式模式.可以指定多个模式
#
#  allkeys      别名 ~*
#  resetkeys    F刷新允许的键模式列表。
#  &<pattern>   Add a glob-style pattern of Pub/Sub channels that can be
#               accessed by the user. It is possible to specify multiple channel
#               patterns.
#  allchannels  Alias for &*
#  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 123456

# 默认情况下,新用户通过与此 ACL 规则“off resetkeys -@all”等效的限制权限进行初始化.
# 从 Redis 6.2 开始,也可以使用 ACL 规则管理对 PubSub 频道的访问。如果新用户由 acl-pubsub-default 配置指令控制,则默认的 PubSub 通道权限接受这些值之一:
#
# allchannels:  授予对所有 Pub/Sub  频道的访问权限
# resetchannels: 撤销对所有 Pub/Sub 频道的访问权限
#
# 为确保升级 Redis 6.0 时向后兼容,acl-pubsub-default 默认为 'allchannels' 权限。.
#
# 未来兼容性说明:在 Redis 的未来版本中,指令的默认“allchannels”很可能会更改为“resetchannels”,以提供更好的开箱即用的 PubSub 安全性.
# 因此,建议您为所有用户显式定义 Pub/Sub 权限,而不是依赖隐式默认值。为所有现有用户设置明确的 Pub/Sub 后,您应该取消注释以下行.
#
# acl-pubsub-default resetchannels

# 命令 renaming (弃用).
#
# ------------------------------------------------------------------------
# 警告:尽可能避免使用此选项。而是使用 ACL 从默认用户中删除命令,并将它们仅放在您为管理目的创建的某些管理员用户中.
# ------------------------------------------------------------------------
#
# 可以在共享环境中更改危险命令的名称。例如,CONFIG 命令可能会重命名为难以猜测的名称,以便它仍然可用于内部使用工具,但不可用于一般客户端.
#
# 例子:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# 也可以通过将命令重命名为空字符串来完全终止命令::
#
# rename-command CONFIG ""
#
# 请注意,更改登录到 AOF 文件或传输到副本的命令的名称可能会导致问题.

################################### CLIENTS [客户端]####################################

# 设置同时连接的最大客户端数.
 By default
# 此限制设置为 10000 个客户端,但是如果 Redis 服务器无法配置进程文件限制以允许指定的限制,则允许的最大客户端数设置为当前文件限制减去 32 (因为 Redis 保留了一些文件描述符供内部使用).
#
# 一旦达到限制,Redis 将关闭所有新连接,并发送错误“已达到最大客户端数”.
#
# 重要提示:当使用 Redis 集群时,最大连接数也与集群总线共享:集群中的每个节点将使用两个连接,一个传入和另一个传出. 在非常大的集群的情况下,相应地调整限制大小很重要。.
#
# maxclients 10000

############################## MEMORY MANAGEMENT [内存管理] ################################

# 将内存使用限制设置为指定的字节数。当达到内存限制时,Redis 将尝试根据选择的驱逐策略删除键(请参阅 maxmemory-policy).
#
# 如果 Redis 无法根据策略删除键,或者如果策略设置为“noeviction”,Redis 将开始对会使用更多内存的命令(如 SET、LPUSH 等)进行错误回复,并将继续回复 GET 等只读命令.
#
# 当使用 Redis 作为 LRU 或 LFU 缓存,或为实例设置硬内存限制时(使用“noeviction”策略),此选项通常很有用.
#
#警告:如果您将副本附加到启用了 maxmemory 的实例,则从已用内存计数中减去提供副本所需的输出缓冲区的大小,这样网络 问题/重新同步 将不会触发密钥被逐出的循环,并且在将副本的输出缓冲区填满,删除键的删除触发更多键的删除,依此类推,直到数据库完全清空

# 简而言之...如果您附加了副本,建议您为 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 -> 删除具有最近过期时间的密钥 (minor TTL)
# noeviction -> 不驱逐任何东西,只在写入操作时返回错误.
#
# LRU 表示最近最少使用
# LFU 表示最不常用
#
# LRU、LFU 和 volatile-ttl 都是使用近似随机算法实现的。
#
# 注意:使用上述任何策略,当没有合适的键用于驱逐时,Redis 将在需要更多内存的写操作上返回错误. 这些通常是创建新密钥、添加数据或修改现有密钥的命令.
# 一些示例是:SET、INCR、HSET、LPUSH、SUNIONSTORE、SORT(由于 STORE 参数)和 EXEC(如果事务包含任何需要内存的命令)
#
# 默认值是::
#
# maxmemory-policy noeviction
maxmemory-policy volatile-lru

# LRU、LFU 和 minimal TTL 算法不是精确算法而是近似算法(为了节省内存),所以你可以调整它的速度或精度.
#默认情况下,Redis 将检查五个键并选择最近最少使用的一个,您可以使用以下配置指令更改样本大小
#
# 默认值 5 会产生足够好的结果.
# 10 非常接近真实的 LRU 但需要更多 CPU.
# 3 更快但不是很准确.
#
# maxmemory-samples 5
maxmemory-samples 5

# 驱逐处理被设计为在默认设置下运行良好.
# 如果写入流量异常大,则可能需要增加此值.
# 降低此值可能会降低延迟,但存在逐出处理有效性的风险 0 = 最小延迟,10 = 默认值,100 = 处理时不考虑延迟
#
# maxmemory-eviction-tenacity 10
maxmemory-eviction-tenacity 10

# 从 Redis 5 开始,默认情况下副本将忽略其 maxmemory 设置(除非在故障转移后或手动将其提升为主).
# 这意味着密钥的逐出将仅由主服务器处理,将 DEL 命令发送到副本作为主服务器端的密钥逐出.
#
# 此行为可确保主服务器和副本保持一致,并且通常是您想要的,但是如果您的副本是可写的,或者您希望副本具有不同的内存设置,并且您确定对副本执行的所有写入都是幂等的,那么你可以改变这个默认值(但一定要明白你在做什么)

#
# 请注意,由于默认情况下副本不会逐出,它最终可能会使用比通过 maxmemory 设置的内存更多的内存(副本上的某些缓冲区可能更大,或者数据结构有时可能占用更多内存等).
# 因此,请确保您监控副本并确保它们有足够的内存,以免在主服务器达到配置的 maxmemory 设置之前遇到真正的内存不足情况.
#
# replica-ignore-maxmemory yes

# Redis 以两种方式回收过期键:在访问时发现这些键已过期,以及在后台,在所谓的“活动过期键”中.
# 密钥空间被缓慢地、交互式地扫描,寻找过期的密钥来回收,这样就可以释放过期的密钥的内存,并且在短时间内永远不会被再次访问.
#
# 过期周期的默认努力将尽量避免超过 10% 的过期密钥仍在内存中,并将尽量避免消耗超过 25% 的总内存并增加系统延迟.
# 然而,可以将通常设置为“1”的过期“effort”增加到更大的值,直到值“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 策略配置,以便为新数据腾出空间,而不会超过指定的内存限制.
# 2) 因为过期:当必须从内存中删除具有关联生存时间(请参阅 EXPIRE 命令)的密钥时.
# 3) 由于将数据存储在可能已存在的键上的命令的副作用.例如,当 RENAME 命令被替换为另一个时,它可能会删除旧的密钥内容.
#    同样,带有 STORE 选项的 SUNIONSTORE 或 SORT 可能会删除现有键. SET 命令本身会删除指定键的任何旧内容,以便用指定的字符串替换它.
# 4) 在复制过程中,当一个副本与其主服务器执行完全重新同步时,整个数据库的内容将被删除,以加载刚刚传输的 RDB 文件.
#
# 在上述所有情况下,默认情况下都是以阻塞方式删除对象,就像调用 DEL 一样.
# 但是,您可以专门配置每种情况,以便以非阻塞方式释放内存,就像调用 UNLINK 一样,使用以下配置指令.

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 也有可能,对于用 UNLINK 调用替换用户代码 DEL 调用并不容易的情况,修改 DEL 命令的默认行为使其完全像 UNLINK,使用以下配置指令:

lazyfree-lazy-user-del no

# FLUSHDB、FLUSHALL 和 SCRIPT FLUSH 支持异步和同步删除,这可以通过将 [SYNC|ASYNC] 标志传递到命令中来控制。当两个标志都没有传递时,该指令将用于确定是否应异步删除数据.

lazyfree-lazy-user-flush no

################################ THREADED I/O [线程io]#################################

# Redis 大部分是单线程的,但也有一些线程操作,例如 UNLINK、慢速 IO 访问和其他在侧线程上执行的操作。.
#
# 现在也可以在不同的 IO 线程中处理 Redis 客户端socket读写 .
# 由于特别是写入速度很慢,通常 Redis 用户使用流水线来加快每个内核的 Redis 性能,并产生多个实例以扩大规模.
# 使用 IO 线程可以轻松地将 Redis 加速两倍,而无需求助于流水线或实例分片.
#
# 默认情况下线程是禁用的,我们建议只在至少有 4 个或更多内核的机器上启用它,并至少留下一个备用内核。使用超过 8 个线程不太可能有多大帮助.
# 我们还建议仅在您确实存在性能问题时才使用线程 IO,Redis 实例能够使用相当大比例的 CPU 时间,否则使用此功能毫无意义。.
#
# 因此,例如,如果您有一个四核盒子,请尝试使用 2 或 3 个 IO 线程,如果您有一个 8 核,请尝试使用 6 个线程。为了启用 IO 线程,请使用以下配置指令

# io-threads 4
#
# 将 io-threads 设置为 1 将像往常一样只使用主线程。当启用 IO 线程时,我们只使用线程进行写入,即将 write(2) 系统调用线程化并将客户端缓冲区传输到socket.
# 但是,也可以使用以下配置指令启用读取线程和协议解析,方法是将其设置为 yes:
#
# io-threads-do-reads no
#
# 通常线程读取帮助不大。
#
# 注意 1:此配置指令不能在运行时通过 CONFIG SET 更改。因此,此功能目前在启用 SSL 时不起作用.
#
# 注意 2:如果你想使用 redis-benchmark 测试 Redis 加速,请确保你也在线程模式下运行基准测试本身,使用 --threads 选项来匹配 Redis 线程的数量,否则你将无法注意改进.

############################ KERNEL OOM CONTROL [内核oom控制] ##############################

# 在 Linux 上,可以提示内核 OOM 杀手在内存不足时应该首先杀死哪些进程。
#
# 启用此功能会使 Redis 主动控制其所有进程的 oom_score_adj 值,具体取决于它们的角色。默认分数将尝试在所有其他进程之前杀死后台子进程,并在主进程之前杀死副本。
#
#
# Redis 支持三个选项:
#
# no:       不要更改 oom-score-adj(默认值).
# yes:       “relative”的别名见下文.
# 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 设置为“relative”并将 oom-score-adj-values 设置为正值将始终成功.
oom-score-adj-values 0 200 800


#################### KERNEL transparent hugepage CONTROL [内存大页机制] ######################

#通常,内核透明大页面控件默认设置为“madvise”或“never”(/sys/kernel/mm/transparent_hugepage/enabled),在这种情况下,此配置无效。在它设置为“always”的系统上,redis 将尝试专门为 redis 进程禁用它,以避免 fork(2) 和 CoW 的延迟问题
# 如果出于某种原因您希望保持启用状态,您可以将此配置设置为“no”并将内核全局设置为“always”.

disable-thp yes

############################## APPEND ONLY MODE [aof 模式]###############################

# 默认情况下,Redis 将数据集异步转储到磁盘上。这种模式在许多应用程序中已经足够好了,但是 Redis 进程出现问题或断电可能会导致几分钟的写入丢失(取决于配置的保存点).
#
# Append Only File 是另一种持久性模式,可提供更好的持久性。例如,使用默认的数据同步策略(稍后在配置文件中查看)Redis 在服务器断电等戏剧性事件中可能只会丢失一秒钟的写入,或者如果 Redis 进程本身出现问题,则只能丢失一次写入,但是操作系统仍然正常运行

#
# 可以同时启用 AOF 和 RDB 持久化,没有问题。如果 AOF 在启动时启用,Redis 将加载 AOF,即具有更好持久性保证的文件.
#
# Please check https://redis.io/topics/persistence for more information.

appendonly yes

# aof 文件的名称 (default: "appendonly.aof")

appendfilename "appendonly.aof"

# fsync() 调用告诉操作系统实际将数据写入磁盘,而不是等待输出缓冲区中的更多数据. 有些操作系统会真正刷新磁盘上的数据,有些操作系统只会尝试尽快执行此操作。.
#
# Redis支持三种不同的模式:
#
# no: 不要 fsync,只要让操作系统在需要时刷新数据即可。快点.
# always: 每次写入附加日志后进行 fsync。慢,最安全.
# everysec: 每秒只同步一次。妥协.
#
# 默认值为“everysec”,因为这通常是速度和数据安全之间的正确折衷.
#  您是否可以将其放宽为“否”,这取决于您是否可以让操作系统在需要时刷新输出缓冲区,以获得更好的性能(但如果您可以接受一些数据丢失的想法,请考虑默认的持久性模式那是快照),或者相反,使用“always”,它非常慢但比 everysec 更安全。
#
# 更多详情请查看以下文章:
# http://antirez.com/post/redis-persistence-demystified.html
#
# 如果不确定,请使用“everysec”.

# appendfsync always
appendfsync everysec
# appendfsync no

# 当 AOF fsync 策略设置为 always 或 everysec,并且后台保存进程(后台保存或AOF日志后台重写)正在对磁盘执行大量 IO 时,在某些 Linux 配置中,Redis 可能会在 fsync() 调用上阻塞太久.
# 请注意,目前没有解决此问题的方法,因为即使在不同的线程中执行 fsync 也会阻塞我们的同步 write(2) 调用.
#
# 为了缓解这个问题,可以使用以下选项来防止在 BGSAVE 或 BGREWRITEAOF 正在进行时在主进程中调用 fsync()
#
#
# 这意味着当另一个其他节点在存储时, Redis 的持久性与“appendfsync none”相同.
# 实际上,这意味着在最坏的情况下(使用默认的 Linux 设置)可能会丢失多达 30 秒的日志.

# 如果您有延迟问题,请将其设为“yes”. 否则,从耐用性的角度来看,将其保留为“no”是最安全的选择 .

no-appendfsync-on-rewrite no

# 自动重写aof.
#当 AOF 日志大小增长指定百分比时,Redis 能够自动重写日志文件,隐式调用 BGREWRITEAOF.

#
# 它是这样工作的:Redis 记住最近一次重写后的 AOF 文件的大小 (如果自重启后没有发生重写,则使用启动时 AOF 的大小).
#
# 此基本尺寸与当前尺寸进行比较。如果当前大小大于指定百分比,则触发重写. 还需要指定要重写的 AOF 文件的最小大小,这有助于避免重写 AOF 文件,即使达到百分比增加但它仍然很小.
#
# 指定百分比为零以禁用自动 AOF 重写功能.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 在 Redis 启动过程中,当 AOF 数据加载回内存时,可能会发现 AOF 文件在末尾被截断。当运行 Redis 的系统崩溃时可能会发生这种情况,尤其是在没有使用 data=ordered 选项挂载 ext4 文件系统时(然而,当 Redis 本身崩溃或中止但操作系统仍然正常工作时,这不会发生).

# Redis 既可以在这种情况下报错退出,也可以加载尽可能多的数据(现在默认)如果发现 AOF 文件最后被截断则启动. 以下选项控制此行为.
#
# 如果 aof-load-truncated 设置为 yes,一个截断的 AOF 文件被加载并且 Redis 服务器开始发出日志以通知用户该事件.
# 否则,如果该选项设置为 no,服务器将因错误而中止并拒绝启动. 如果选择为no,用户需要在重新启动服务器之前使用“redis-check-aof”实用程序修复 AOF 文件.
#
# 请注意,如果在中间发现 AOF 文件已损坏,服务器仍然会出错并退出。此选项仅适用于 Redis 将尝试从 AOF 文件中读取更多数据但找不到足够字节的情况.
aof-load-truncated yes

# 在重写 AOF 文件时,Redis 可以使用 AOF 文件中的 RDB 前导码来实现更快的重写和恢复。当这个选项打开时,重写的 AOF 文件由两个不同的节组成:
#
#   [RDB file][AOF tail]
#
# 加载时,Redis识别AOF文件以“REDIS”字符串开头,加载带前缀的RDB文件,然后继续加载AOF尾.
aof-use-rdb-preamble yes

################################ LUA SCRIPTING [LUA脚本] ###############################

# Lua 脚本的最大执行时间(以毫秒为单位).
#
# 如果达到最大执行时间,Redis 将记录脚本在最大允许时间后仍在执行,并将开始回复带有错误的查询.
#
# 当长时间运行的脚本超过最大执行时间时,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 命令可用.
# 第一个可用于停止尚未调用任何写命令的脚本.
# 第二种是在脚本已经发出写入命令但用户不想等待脚本自然终止的情况下关闭服务器的唯一方法.
#
# 将其设置为 0 或负值以无限执行而不发出警告.
lua-time-limit 5000

################################ REDIS CLUSTER [redis 集群] ###############################

# 普通的 Redis 实例不能成为 Redis 集群的一部分;只有作为集群节点启动的节点可以. 为了启动 Redis 实例作为集群节点启用集群支持取消注释以下内容:
#
# cluster-enabled yes

# 每个集群节点都有一个集群配置文件。此文件不适合手动编辑. 它由 Redis 节点创建和更新.
# 每个 Redis 集群节点都需要不同的集群配置文件。确保在同一系统中运行的实例没有重叠的集群配置文件名.
#
# cluster-config-file nodes-6379.conf

# 集群节点超时是节点必须无法访问才能被视为处于故障状态的毫秒数.大多数其他内部时间限制是节点超时的倍数.
#
#
# cluster-node-timeout 15000

# 如果数据看起来太旧,故障主机的副本将避免启动故障转移.
#
# 没有简单的方法可以让副本实际准确测量其“数据年龄”,因此执行以下两项检查:
#
# 1) 如果有多个副本能够进行故障转移,它们会交换消息以尝试为具有最佳复制偏移量的副本提供优势 (来自主处理的更多数据).
#    副本将尝试通过偏移量获得它们的等级,并在故障转移开始时应用与其等级成比例的延迟.
#
# 2) 每个单独的副本计算与其主服务器最后一次交互的时间. 这可以是最后一次收到的 ping 或命令(如果主站仍处于“已连接”状态),或者是与主站断开连接后经过的时间 (如果复制链接当前已关闭).
#    如果最后一次交互太旧,副本根本不会尝试故障转移.
#
#  第“2”点可由用户调整. 具体来说,如果自从上次与主服务器交互以来,经过的时间大于:
#
#   (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period
#
# 因此,例如,如果节点超时为 30 秒,集群副本有效性因子为 10,并假设默认的 repl-ping-replica-period 为 10 秒,则如果副本无法进行故障转移,则它不会尝试进行故障转移与主人交谈超过 310 秒.
#
# 较大的 cluster-replica-validity-factor 可能允许具有太旧数据的副本故障转移主服务器,而太小的值可能会阻止集群根本无法选择副本.
#
# 为了获得最大可用性,可以将 cluster-replica-validity-factor 的值设置为 0,这意味着副本将始终尝试故障转移主服务器,而不管它们最后一次与主服务器交互是什么时候.(然而,他们总是会尝试应用与其偏移等级成比例的延迟).
#
#
# 零是唯一能够保证当所有分区都恢复正常时集群将始终能够继续运行的值。.
#
# cluster-replica-validity-factor 10

# Cluster replicas are able to migrate to orphaned masters, that are masters
# that are left without working replicas. This improves the cluster ability
# to resist to failures as otherwise an orphaned master can't be failed over
# in case of failure if it has no working replicas.
#
# Replicas migrate to orphaned masters only if there are still at least a
# given number of other working replicas for their old master. This number
# is the "". A migration barrier of 1 means that a replica
# will migrate only if there is at least 1 other working replica for its master
# and so forth. It usually reflects the number of replicas you want for every
# master in your cluster.

# migration barrier[故障转移]
# 集群副本能够迁移到孤立的主服务器,即没有工作副本的主服务器。这提高了集群抵抗故障的能力,否则如果孤立主节点没有工作副本,则在发生故障时无法进行故障转移。
#
# 只有当它们的旧主控仍然至少有给定数量的其他工作副本时,副本才会迁移到孤立的主控器。这个数字就是“”。迁移屏障为 1 意味着只有当其主副本至少有 1 个其他工作副本时,副本才会迁移,依此类推。它通常反映了集群中每个主节点所需的副本数。
#
# 默认值为 1(只有当它们的主人至少保留一个副本时,副本才会迁移)。要禁用迁移,只需将其设置为一个非常大的值或将 cluster-allow-replica-migration 设置为“no”。可以设置 0 值,但仅对调试有用,在生产中很危险。
#
# cluster-migration-barrier 1

# 关闭此选项允许使用较少的自动集群配置。它既禁止迁移到孤立的主机,也禁止从变为空的主机迁移.
#
# 默认为“yes”(允许自动迁移).
#
# cluster-allow-replica-migration yes

#默认情况下,如果 Redis 集群节点检测到至少有一个哈希槽未被覆盖(没有可用的节点为它服务),它们将停止接受查询。
#这样,如果集群部分关闭(例如不再覆盖一系列哈希槽),则所有集群最终都会变得不可用。一旦再次覆盖所有插槽,它就会自动返回可用。
#
# 然而,有时您希望正在工作的集群子集继续接受对仍被覆盖的键空间部分的查询。为此,只需将 cluster-require-full-coverage 选项设置为 no。
#
# cluster-require-full-coverage yes


#这个选项,当设置为 yes 时,此选项可防止副本在主服务器故障期间尝试故障转移其主服务器。但是,如果被迫这样做,副本仍然可以执行手动故障转移
#
#这在不同的场景中很有用,尤其是在多个数据中心操作的情况下,如果不是在整个 DC 故障的情况下,我们希望永远不会提升一侧
#
# cluster-replica-no-failover no

# 这个选项,此选项设置为 yes 时,允许节点在集群处于关闭状态时为读取流量提供服务,只要它认为自己拥有插槽即可。
#
# 这对两种情况很有用。第一种情况是当应用程序在节点故障或网络分区期间不需要数据一致性时。这方面的一个例子是缓存,只要节点有数据,它就应该能够为它提供服务。.
#
#三个分片,但想启用集群模式并稍后扩展。 1 或 2 分片配置中的主中断会导致整个集群在没有设置此选项的情况下发生读写中断,设置此选项后只会出现写中断。如果没有 masters 的法定人数,插槽所有权将不会自动更改。

# cluster-allow-reads-when-down no

# 为了设置您的集群,请务必阅读文档
# available at https://redis.io web site.

########################## CLUSTER DOCKER/NAT support  ########################

# 在某些部署中,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 集群自动检测
#
# 请注意,重新映射时,总线端口可能不在客户端端口 + 10000 的固定偏移处,因此您可以根据重新映射的方式指定任何端口和总线端口。如果未设置总线端口,将照常使用固定偏移量 10000。
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-tls-port 6379
# cluster-announce-port 0
# cluster-announce-bus-port 6380

################################## SLOW LOG [慢日志]###################################

# Redis Slow Log 是一个记录超过指定执行时间的查询的系统。执行时间不包括与客户端通话、发送回复等IO操作,只包括实际执行命令所需的时间(这是线程被阻塞并且无法同时处理其他请求的命令执行的唯一阶段)

#
# 您可以使用两个参数配置慢速日志:一个告诉 Redis 执行时间(以微秒为单位)是为了记录命令而超过的执行时间,另一个参数是慢速日志的长度。当一条新命令被记录下来时,最旧的命令将从记录的命令队列中删除。

# 下面的时间用微秒表示,所以1000000相当于一秒。请注意,负数会禁用慢速日志,而零值会强制记录每个命令。.
slowlog-log-slower-than 10000

# 这个长度没有限制。请注意,它会消耗内存。您可以使用 SLOWLOG RESET 回收慢日志使用的内存。.
slowlog-max-len 128

################################ LATENCY MONITOR [延迟监视器] ##############################

# Redis 延迟监控子系统在运行时对不同的操作进行采样,以收集与 Redis 实例可能的延迟源相关的数据

# 通过 LATENCY 命令,用户可以使用此信息打印图形和获取报告.
#
# 系统仅记录在等于或大于通过 latency-monitor-threshold 配置指令指定的毫秒数的时间内执行的操作。当其值设置为零时,延迟监视器将关闭。.
#
# 默认情况下,延迟监控处于禁用状态,因为如果您没有延迟问题,则通常不需要它,并且收集数据会对性能产生影响,虽然影响很小,但可以在大负载下进行测量。
#如果需要,可以使用命令“CONFIG SET latency-monitor-threshold <milliseconds>”在运行时轻松启用延迟监控
latency-monitor-threshold 0

############################# EVENT NOTIFICATION[事件通知] ##############################

# Redis 可以将密钥空间中发生的事件通知 PubSub 客户端。此功能记录在 https://redis.io/topics/notifications
#
# 例如,如果启用键空间事件通知,并且客户端对存储在数据库 0 中的键“foo”执行 DEL 操作,则将通过 Pub/Sub 发布两条消息:
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# 可以在一组类中选择 Redis 将通知的事件。每个类都由一个字符标识:
#
#  K     键空间事件,以 __keyspace@<db>__ 前缀发布。
#  E     Keyevent 事件,以 __keyevent@<db>__ 前缀发布。.
#  g     通用命令(非特定类型),如 DEL、EXPIRE、RENAME, ...
#  $     String commands
#  l     List commands
#  s     Set commands
#  h     Hash commands
#  z     Sorted set commands
#  x     过期事件(每次密钥过期时生成的事件)
#  e     驱逐事件 (为 maxmemory 逐出密钥时生成的事件)
#  t     Stream commands
#  d     Module key type events
#  m     Key-miss events (Note: It is not included in the 'A' class)
#  A     Alias for g$lshzxetd, so that the "AKE" string means all the events
#        (Except key-miss events which are excluded from 'A' due to their
#         unique nature).
#
#  “notify-keyspace-events”将一个由零个或多个字符组成的字符串作为参数。空字符串表示通知被禁用.
#
# 示例:要启用列表和通用事件,从事件名称的角度来看,使用:
#
#  notify-keyspace-events Elg
#
# 示例 2:获取订阅频道名称 __keyevent@0__:expired 的过期密钥流使用:
#
#  notify-keyspace-events Ex
#
#  认情况下,所有通知都被禁用,因为大多数用户不需要此功能并且该功能有一些开销。请注意,如果您不至少指定 K 或 E 之一,则不会传递任何事件
notify-keyspace-events ""

############################### 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 命令)。
#正常的 RESP2RESP3 请求完全脱离了 Gopher 协议实现的路径,也照常服务


# 如果在启用 Gopher 时打开与 Redis 的连接并向其发送类似“/foo”的字符串,如果有一个名为“/foo”的键,它将通过 Gopher 协议提供服务
#
# 为了创建一个真正的 Gopher“洞”(Gopher 语言中 Gopher 站点的名称),您可能需要如下脚本:
#
#   https://github.com/antirez/gopher2redis
#
# --- 安全警告---
#
# 如果您计划将 Redis 放在 Internet 上服务器 Gopher 页面的一个可公开访问的地址中,请务必为该实例设置一个密码。设置密码后::
#
#   1. Gopher 服务器(启用时,不是默认情况下)仍将通过 Gopher 提供内容.
#   2. 但是在客户端进行身份验证之前不能调用其他命令.
#
# 因此,请使用“requirepass”选项来保护您的实例。
#
# 请注意,当启用“io-threads-do-reads”时,目前不支持 Gopher。.
#
# 要启用 Gopher 支持,请取消注释以下行并将选项从 no(默认)设置为 yes
#
# gopher-enabled no

############################### ADVANCED CONFIG [高级配置] ###############################
# redis 中的的数据结构

#  string Redis中字符串的实现(SDS简单动态字符串),有多种结构(sds.h)
#   sdshdr5、(2^5=32byte)
#   sdshdr8、(2 ^ 8=256byte)
#   sdshdr16、(2 ^ 16=65536byte=64KB)
#   sdshdr32、 (2 ^ 32byte=4GB)
#   sdshdr64,2的64次方byte=17179869184G用于存储不同的长度的字符串。
#    编码:  INT编码格式[64位有符号整形]  EMBSTR编码格式[对于长度小于 44的字符串]  RAW 编码格式[对于长度大于 44的字符串]

# hash
#   编码 ziplist[没有前后指针的双链表] 、hashtable[在 Redis 中,hashtable 被称为字典(dictionary),它是一个数组+链表的结构]

#list
#  编码  quicklist [ziplist和linkedlist的结合体]
#set
#   编码 intset  、hashtable
#zset
#  编码 :ziplist 、skiplist

# 当条目数量较少且最大条目不超过给定阈值时,hash使用内存高效数据结构进行编码。可以使用以下指令配置这些阈值。
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
# 正数表示每个列表节点最多_精确_存储该数量的元素.
# 性能最高的选项通常是 -2(8 Kb 大小)或 -1(4 Kb 大小),但如果您的用例是独一无二的,请根据需要调整设置.
list-max-ziplist-size -2

# Lists 也可以被压缩.

#压缩深度是从列表的每一侧排除压缩的 quicklist ziplist 节点的数量。对于快速 pushpop 操作,列表的头部和尾部始终未压缩。设置是:

# 0: 禁用所有列表压缩
# 1: 深度 1 表示“直到 1 个节点进入列表后才开始压缩,从head或tail开始”
#    所以: [head]->node->node->...->node->[tail]
#    [head], [tail] 会一直解压;内部节点将压缩。
# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
#    2这里的意思是:不压缩head或head->next或tail->prev或tail,而是压缩它们之间的所有节点
# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
# 等
list-compress-depth 0

# 只有在一种情况下,集合才具有特殊编码:当集合仅由恰好是 64 位有符号整数范围内基数为 10 的整数组成时。
# 以下配置设置设置了集合大小的限制,以便使用这种特殊的内存节省编码。
set-max-intset-entries 512


#与hash和list类似,zset也经过特殊编码以节省大量空间。仅当zset的长度和元素低于以下限制时才使用此编码
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog 稀疏表示字节限制。该限制包括 16 字节的标头.
#当使用稀疏表示的 HyperLogLog 超过此限制时,它将转换为密集表示

#
#大于 16000 的值是完全无用的,因为此时密集表示的内存效率更高。
#
#建议值为 ~ 3000,以便在不减慢太多 PFADD 的情况下获得空间高效编码的好处,这是 O(N) 与稀疏编码。
#当 CPU 不是问题但空间是问题时,该值可以提高到 ~ 10000,并且数据集由许多基数在 0 - 15000 范围内的 HyperLogLog 组成。
hll-sparse-max-bytes 3000

# Streams macro 节点最大 size / items. Streams数据结构是一个大节点的基数树,在内部对多个项目进行编码。
#使用此配置,可以配置单个节点的大小(以字节为单位),以及在附加新流条目时切换到新节点之前它可能包含的最大项目数
#如果以下任何设置设置为零,则忽略限制,因此例如可以通过将 max-bytes 设置为 0 并将 max-entries 设置为所需值来设置最大条目限制。
stream-node-max-bytes 4096
stream-node-max-entries 100

主动rehash每 100 毫秒 CPU 时间使用 1 毫秒,以帮助rehash主 Redis 哈希表(将顶级键映射到值的表)
# 主动rehash每 100 毫秒 CPU 时间使用 1 毫秒,以帮助rehash主 Redis 哈希表 (将顶级键映射到值的表).
#Redis 使用的哈希表实现(参见 dict.c)执行惰性重新哈希:您对正在重新散列的哈希表运行的操作越多,执行的重新散列“步骤”就越多,执行的重新散列“步骤”越多,因此如果服务器空闲,则重新散列永远不会完成,散列表会使用更多内存。
#
#默认设置是每秒使用此毫秒 10 次,以便主动重新散列主词典,尽可能释放内存

# 如果不确定:
# 如果您有严格的延迟要求,请使用“activerehashing no”,并且在您的环境中 Redis 可以不时以 2 毫秒的延迟回复查询并不是一件好事
#
# 如果您没有如此严格的要求但希望尽可能快地释放内存,请使用“activerehashing yes”.
activerehashing yes


#客户端输出缓冲区限制可用于强制断开由于某种原因没有足够快地从服务器读取数据的客户端(一个常见原因是 Pub/Sub 客户端无法像发布者生成消息那样快地使用消息)

#
# 可以为三种不同类别的客户端设置不同的限制:
#
# normal -> 普通客户端,包括 MONITOR 客户端
# replica  -> 复制客户端
# pubsub -> 客户订阅了至少一个 pubsub 频道或模式
#
# 每个 client-output-buffer-limit 指令的语法如下:
#
# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
#
# 一旦达到硬限制,或者如果达到软限制并保持达到指定的秒数(连续),客户端将立即断开连接。.
# 因此,例如,如果硬限制为 32 兆字节,软限制为 16 兆字节 10 秒,如果输出缓冲区的大小达到 32 兆字节,客户端将立即断开连接,但如果客户端达到 16 兆字节并且连续超过 10 秒的限制
#
# 默认情况下,普通客户端不受限制,因为它们不会在不询问的情况下(以推送方式)接收数据,而是在请求之后接收数据,因此只有异步客户端可能会创建请求数据的速度快于读取速度的场景.
#
# 相反,pubsub 和副本客户端有一个默认限制,因为订阅者和副本以推送方式接收数据.
#
# 硬限制或软限制都可以通过将它们设置为零来禁用
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

#客户端查询缓冲区积累新命令。默认情况下,它们被限制为固定数量,以避免协议不同步(例如由于客户端中的错误)将导致查询缓冲区中未绑定的内存使用。
#但是,如果您有非常特殊的需求,例如我们巨大的 multi/exec 请求或类似需求,您可以在这里配置它

#
# client-query-buffer-limit 1gb

# 在 Redis 协议中,批量请求,即表示单个字符串的元素,通常限制为 512 MB。但是您可以在此处更改此限制,但必须为 1mb 或更大
#
# proto-max-bulk-len 512mb

# Redis 调用一个内部函数来执行许多后台任务,例如超时关闭客户端连接、清除从未请求过的过期密钥等。
#
# 并非所有任务都以相同的频率执行,但 Redis 会根据指定的“hz”值检查要执行的任务。
#
# 默认情况下,“hz”设置为 10。提高该值会在 Redis 空闲时使用更多 CPU,但同时会在有多个键同时过期时使 Redis 响应更快,超时可能会处理得更多精确。.
#
# 范围在 1 到 500 之间,但是超过 100 的值通常不是一个好主意。大多数用户应使用默认值 10,并且仅在需要极低延迟的环境中才将其提高到 100
hz 10

# 通常,拥有一个与连接的客户端数量成正比的 HZ 值是很有用的。这很有用,例如,为了避免为每个后台任务调用处理太多客户端,以避免延迟峰值.
#
# 由于默认情况下默认的 HZ 值被保守地设置为 10,因此 Redis 提供并默认启用使用自适应 HZ 值的能力,当有许多连接的客户端时,该值将暂时提高。
#
# W启用动态 HZ 时,实际配置的 HZ 将用作基线,但一旦连接更多客户端,将根据需要实际使用配置的 HZ 值的倍数。通过这种方式,空闲实例将使用很少的 CPU 时间,而繁忙实例将更快响应
dynamic-hz yes

# 当一个节点重写 AOF 文件时,如果启用以下选项,文件将每生成 32 MB 数据进行 fsync-ed。这对于以更增量的方式将文件提交到磁盘并避免大的延迟峰值非常有用.
aof-rewrite-incremental-fsync yes

# 当 redis 保存 RDB 文件时,如果启用以下选项,文件将在每生成 32 MB 数据时进行 fsync。这对于以更增量的方式将文件提交到磁盘并避免大的延迟峰值非常有用.
rdb-save-incremental-fsync yes


#可以调整 Redis LFU 驱逐(请参阅 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。这是频率计数器如何随着具有不同对数因子的不同访问次数而变化的表格::
#
# +--------+------------+------------+------------+------------+------------+
# | factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
# +--------+------------+------------+------------+------------+------------+
# | 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 ,是为了让新对象有机会累积命中
#
# 计数器衰减时间是必须经过的时间,以分钟为单位,以便将密钥计数器除以二(或者如果它的值小于 <= 10,则递减).
#
# lfu-decay-time 的默认值为 1。特殊值 0 表示每次恰好扫描时衰减计数器。.
#
# lfu-log-factor 10
# lfu-decay-time 1

########################### ACTIVE DEFRAGMENTATION [活动碎片整理] #######################
#
# 什么是活动碎片整理?
# -------------------------------
#
# 活动(在线)碎片整理允许 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

# Maximum number of set/hash/zset/list fields that will be processed from
# 将从主词典扫描中处理的 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 配置来执行此操作.
#
# 您可以固定 serverIO 线程、bio 线程、aof 重写子进程和 bgsave 子进程。指定 cpu 列表的语法与 taskset 命令相同
#
#将 redis server/io  线程设置为 cpu affinity 0,2,4,6:
# server_cpulist 0-7:2
#
# 将 bio 线程设置为 cpu affinity 1,3:
# bio_cpulist 1,3
#
# 设置 aof rewrite 子进程为 cpu affinity 8,9,10,11
# aof_rewrite_cpulist 8-11
#
# 将 bgsave 子进程设置为 cpu affinity 1,10,11
# bgsave_cpulist 1,10-11

# 在某些情况下,如果 Redis 检测到系统处于错误状态,它会发出警告甚至拒绝启动,可以通过设置以下配置来抑制这些警告,该配置采用空格分隔的警告列表来抑制
#
# ignore-warnings ARM64-COW-BUG


Redis for Windows 6.2.13是Redis数据库在Windows操作系统上的一个版本Redis是一款开源的内存数据库,具有高性能、高可用性和易于使用的特点。 Redis for Windows 6.2.13版本是在Redis 6.2.13基础上进行改进和适配,以确保其能够在Windows操作系统上运行和使用。这个版本可能包含了一些针对Windows平台的特定优化和修复,以提升在Windows上的性能和稳定性。 使用Redis for Windows 6.2.13,可以在Windows操作系统下搭建和管理Redis数据库。它提供了一系列的命令和API,可以用于存储、检索和处理数据。Redis支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合,可以应用于各种场景,如缓存、会话存储、消息队列和排行榜等。 Redis for Windows 6.2.13的安装和配置过程与其他版本相似,可以通过官方网站或其他渠道下载安装包,并按照相应的步骤进行安装和配置。安装完成后,可以通过命令行或编程语言的客户端与Redis进行交互,执行各种操作。 与其他操作系统相比,Windows平台上的Redis可能会面临一些独特的挑战和限制。例如,Windows操作系统可能会对文件句柄和内存的使用有一些限制,可能需要根据实际情况进行调整。此外,Windows版本Redis可能与一些Linux或Unix特定的功能或命令存在一些差异。 综上所述,Redis for Windows 6.2.13是Redis数据库在Windows操作系统上的一个版本,适用于在Windows环境下搭建和管理Redis数据库,具有高性能和易用性。但需要注意Windows平台可能会有一些特殊限制和差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值