Redis 配置文件 redis.conf

Redis各个版本的配置文件

#Redis配置文件示例。
#
#注意,为了读取配置文件,Redis必须是
#以文件路径作为第一个参数开头:
#
#./redis-server /path/to/redis.conf

#关于单位的注释:需要内存大小时,可以指定
#以通常的1k 5GB 4M格式,依此类推:
#
#1k => 1000字节
#1kb => 1024字节
#1m => 1000000字节
#1mb => 1024 * 1024字节
#1g => 1000000000字节
#1gb => 1024 * 1024 * 1024字节
#
#单位不区分大小写,因此1GB 1Gb 1gB都相同。

################################包括################ ####################

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

################################模块############### ######################

#在启动时加载模块。如果服务器无法加载模块
#它会中止。可以使用多个loadmodule指令。
#
#loadmodule /path/to/my_module.so
#loadmodule /path/to/other_module.so

################################## 网络 ############### ######################

#默认情况下,如果未指定“ bind”配置指令,则Redis侦听
#用于来自主机上所有可用网络接口的连接。
#可以使用收听仅一个或多个选定的接口
#“ bind”配置指令,后接一个或多个IP地址。
#
# 例子:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
#~~~警告~~~如果运行Redis的计算机直接暴露于
#互联网,绑定到所有接口都是危险的,并且会暴露
#实例给互联网上的所有人。因此,默认情况下,我们取消注释
#遵循bind指令,这将强制Redis仅在
#IPv4环回接口地址(这意味着Redis将只能
#接受来自运行该主机的同一主机的客户端连接。
#
#如果您确定要立即收听所有界面
#只需注意以下几行。
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1

#保护模式是一层安全保护,以避免
#可以访问和利用Internet上打开的Redis实例。
#
#启用保护模式时,如果:
#
#1)服务器没有使用
#“ bind”指令。
#2)未配置密码。
#
#服务器仅接受来自客户端的连接,这些客户端从
#IPv4和IPv6回送地址127.0.0.1和:: 1,并且来自Unix域
#个套接字。
#
#默认情况下启用保护模式。只有在以下情况下才应禁用它
#您确定要让其他主机的客户端连接到Redis
#即使未配置身份验证,也没有特定的接口集
#使用“ bind”指令显式列出。
protected-mode yes

#接受指定端口上的连接,默认值为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套接字。
#
#指定用于侦听的Unix套接字的路径
#传入连接。没有默认设置,因此Redis不会收听
如果未指定,则在Unix套接字上使用#号。
#
#unixsocket /tmp/redis.sock
#unixsocketperm 700

#客户端闲置N秒后关闭连接(0禁用)
超时0

#TCP保持活动状态。
#
#如果不为零,请使用SO_KEEPALIVE向不存在的客户端发送TCP ACK
通讯数量。这很有用,原因有两个:
#
#1)检测死亡的同伴。
#2)强制中间的网络设备考虑连接
#活着。
#
#在Linux上,指定的值(以秒为单位)是用于发送ACK的时间段。
#请注意,关闭连接需要两倍的时间。
#在其他内核上,期限取决于内核配置。
#
#此选项的合理值为300秒,这是新的
#Redis默认从Redis 3.2.1开始。
tcp-keepalive 300

################################ TLS / SSL ############## #######################

#默认情况下,禁用TLS / SSL。要启用它,请使用“ tls-port”配置
#指令可用于定义TLS侦听端口。要在TLS上启用TLS
#默认端口,使用:
#
#port 0
#tls-port 6379

#配置X.509证书和私钥以用于认证
#服务器连接到连接的客户端,主服务器或集群对等服务器。这些文件应该是
#PEM格式化。
#
#tls-cert-file redis.crt 
#tls-key-file redis.key

#配置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端口上的客户端(包括副本服务器)是必需的
#使用有效的客户端证书进行身份验证。
#
#如果指定为“ no”,则不需要也不接受客户端证书。
#如果指定了“可选”,则接受客户端证书,并且必须是
#有效(如果提供),但不是必需的。
#
#tls-auth-clients no
#tls-auth-clients optional

#默认情况下,Redis副本不会尝试建立TLS连接
#与它的主人。
#
#使用以下指令在复制链接上启用TLS。
#
#tls-replication yes

#默认情况下,Redis群集总线使用纯TCP连接。启用
#用于总线协议的TLS,请使用以下指令:
#
#tls-cluster yes 

#明确指定要支持的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的语法
#密码套件。
#
#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文件。
daemonize no 

#如果您是从upstart或systemd运行Redis,则Redis可以与您的
#监督树。选项:
#有监督无-无监督互动
#受监督的新贵-通过将Redis置于SIGSTOP模式来指示新贵
#在您的新贵作业配置中需要“预期停止”
#受监督的systemd-通过将READY = 1写入$ NOTIFY_SOCKET来发出信号
#有监督的自动-根据以下信息检测暴发户或系统方法
#UPSTART_JOB或NOTIFY_SOCKET环境变量
#注意:这些监视方法仅表示“过程已准备就绪”。
#他们无法对您的主管进行连续的ping操作。
supervised no

#如果指定了pid文件,则Redis会在启动时将其写入指定位置
#并在出口处将其删除。
#
#当服务器以非守护进程运行时,如果没有,则不创建pid文件
#在配置中指定。守护服务器时,pid文件
即使未指定,也会使用#,默认为“ /var/run/redis.pid”。
#
#尽力创建一个pid文件:如果Redis无法创建它
#不会发生任何不良情况,服务器将启动并正常运行。
pidfile /var/run/redis_6379.pid

#指定服务器的详细级别。
#这可以是以下之一:
#调试(很多信息,对于开发/测试很有用)
#详细(很多很少有用的信息,但不会像调试级别那样混乱)
#通知(有些冗长,可能是您在生产中想要的)
#警告(仅记录非常重要/重要的消息)
loglevel notice

#指定日志文件名。也可以使用空字符串强制
#Redis登录到标准输出。请注意,如果您使用标准
#输出用于日志记录但要守护进程,日志将发送到/ dev / null
logfile ""

#要启用到系统记录器的日志记录,只需将'syslog-enabled'设置为yes,
#并根据需要更新其他syslog参数。
#syslog-enabled no

#指定系统日志标识。
#syslog-ident redis

#指定系统日志工具。必须是USER或在LOCAL0-LOCAL7之间。
#syslog-facility local0

#设置数据库数量。默认数据库为DB 0,可以选择
#使用SELECT <dbid>在每个连接的基础上不同
#dbid是介于0和'databases'-1之间的数字
database 16

#默认情况下,Redis仅在开始登录时才显示ASCII艺术徽标。
#标准输出,如果标准输出是TTY。基本上这意味着
#通常徽标仅在交互式会话中显示。
#
#但是可以强制4.0之前的行为并始终显示
#通过将以下选项设置为yes,在启动日志中使用ASCII艺术徽标。
always-show-logo yes

##############################快照################# ###############
#
#将数据库保存在磁盘上:
#
#保存<seconds> <changes>
#
#如果给定的秒数和给定的秒数都将保存数据库
#针对数据库的写入操作数。
#
#在下面的示例中,行为将是保存:
#如果至少更改了1个按键,则在900秒(15分钟)后
#300秒(5分钟)后,如果至少更改了10个按键
#60秒后,如果至少更改了10000个键
#
#注意:您可以通过注释掉所有“保存”行来完全禁用保存。
#
#也可以删除所有先前配置的保存
通过添加带有单个空字符串参数的save指令获得#点
#如以下示例所示:
#
# 保存 ””
#save ""
save 900 1
save 300 10
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

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

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

#工作目录。
#
#数据库将被写入此目录中,并指定文件名
#以上使用'dbfilename'配置指令。
#
#也将在此目录中创建“仅追加文件”。
#
#请注意,您必须在此处指定目录,而不是文件名。
dir ./

############################### REPLICATION ################ #################

#主副本复制。使用copyof作为Redis实例的副本
#另一个Redis服务器。尽快了解有关Redis复制的几件事。
#
#+ ------------------ + + --------------- +
#| 硕士 ---> | 复制品|| (接收写入)| | (精确副本)|
#+ ------------------ + + --------------- +
#
#1)Redis复制是异步的,但是您可以将master配置为
#如果至少看起来没有连接,则停止接受写入
#给定数量的副本。
#2)Redis副本能够与
#master(如果复制链接丢失了相对较少的数量)
# 时间。您可能要配置复制积压大小(请参阅下一个
此文件的#个部分),根据您的需要具有合理的价值。
#3)复制是自动的,不需要用户干预。之后
#网络分区副本自动尝试重新连接到主数据库
#并与它们重新同步。
#
#replicaof <masterip> <masterport>

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

#副本失去与主数据库的连接或复制时
#仍在进行中,副本可以以两种不同的方式起作用:
#
#1)如果复制副本服务过时数据设置为“是”(默认值),则复制副本将
#仍然会回复客户的请求,可能包含过期的数据,或者
如果这是第一次同步,则#数据集可能只是空的。
#
#2)如果copy-serve-stale-data设置为“ no”,则副本将回复
#除以下命令外,所有命令均出现错误“正在与主机进行同步”:
#INFO,REPLICAOF,AUTH,PING,SHUTDOWN,REPLCONF,角色,CONFIG,SUBSCRIBE,
#UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND,POST,
#主机和延迟。
#
replica-serve-stale-data yes

#您可以将副本实例配置为接受或不接受写入。反对
#复制副本实例可能有助于存储一些临时数据(因为数据
与主服务器重新同步后,写在副本上的#将很容易删除),但是
如果客户由于以下原因而写信,#也会引起问题。
#配置错误。
#
#由于Redis 2.6默认情况下,副本是只读的。
#
#注意:只读副本并非旨在向不受信任的客户端公开
# 在互联网上。它只是防止实例滥用的保护层。
#默认情况下,仍然是只读副本导出所有管理命令
#,例如CONFIG,DEBUG等。在一定程度上您可以改善
#使用'rename-command'隐藏所有副本的只读副本的安全性
#管理/危险命令。
replica-read-only yes

#复制SYNC策略:磁盘或套接字。
#
#无法继续执行以下操作的新副本和重新连接副本
#复制过程刚刚收到差异,需要做的是所谓的
#“完全同步”。RDB文件从主机传输到
#个副本。
#
#传输可以两种不同的方式发生:
#
#1)磁盘支持:Redis主服务器创建一个新过程,该过程写入RDB
#文件在磁盘上。稍后文件由父级传输
#逐步处理副本。
#2)无盘:Redis主服务器创建一个新进程,该进程直接写入
#将RDB文件复制到副本套接字,而完全不接触磁盘。
#
#使用磁盘支持的复制时,在生成RDB文件时,会有更多副本
#可以在当前子级中排入队列并与RDB文件一起使用
#生成RDB文件完成其工作。改为使用无盘复制
#传输开始后,新的副本将排队,并且新的副本将被排队。
#传输将在当前传输终止时开始。
#
#使用无盘复制时,主服务器等待可配置数量的
#开始传输之前的时间(以秒为单位),希望倍数
#副本将到达,并且传输可以并行化。
#
#使用慢速磁盘和快速(大带宽)网络,进行无盘复制
#效果更好。
repl-diskless-sync no

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

#------------------------------------------------- ----------------------------
#警告:RDB无盘加载是实验性的。由于在此设置中,副本
#不会立即将RDB存储在磁盘上,这可能会导致数据丢失
#故障转移。RDB无盘加载+ Redis模块不处理I / O读取也可能
#导致Redis在初始同步期间发生I / O错误时中止
#舞台与高手。仅在执行自己的操作时使用。
#------------------------------------------------- ----------------------------
#
#副本可以直接从复制链接加载从复制链接读取的RDB
#套接字,或将RDB存储到文件中,并在文件完全读取后读取
#从主人那里收到的。
#
#在许多情况下,磁盘的速度比网络慢,并且存储和加载速度慢
#RDB文件可能会增加复制时间(甚至会增加主数据库的复制时间
#在写内存和从缓冲区中复制)。
#但是,直接从套接字解析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)从副本(数据,ping)的角度来看,主超时。
#3)从主服务器角度来看,副本超时(REPLCONF ACK ping)。
#
#重要的是要确保该值大于该值
#为repl-ping-replica-period指定,否则将检测到超时
#每次主服务器和副本服务器之间的流量较低时。默认值
#值为60秒。
#
#repl-timeout 60

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

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

#在主服务器一段时间内没有连接的副本后,待办事项将为
#被释放。以下选项可配置所需的秒数
#从过去的副本断开连接的时间开始,以进行积压
#要释放的缓冲区。
#
#注意副本不会释放积压的超时,因为它们可能是
#稍后晋升为大师,应该能够正确地“部分
#重新同步”与其他副本:因此,它们应始终积累积压。
#
#值0表示从不释放积压。
#
#repl-backlog-ttl 3600

#副本优先级是Redis在INFO中发布的整数
# 输出。Redis Sentinel使用它来选择要升级的副本
#如果主服务器不再正常工作,则进入主服务器。
#
#优先级低的副本被认为更适合升级,因此
#例如,如果有三个副本的优先级分别为10、100、25 Sentinel
#将选择优先级为10的优先级最低的那个。
#
#但是,特殊优先级0表示副本无法执行
#为主角色,因此优先级为0的副本将永远不会被
#Redis Sentinel晋升。
#
#默认情况下,优先级为100。
replica-priority 100

#如果少于以下数量,则主服务器可能会停止接受写入
已连接N个副本,延迟小于或等于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:通过检查对等地址自动检测到该地址
副本用于与主服务器连接的套接字的编号。
#
#端口:端口在复制过程中由副本进行通信
#握手,通常是副本使用的端口
#监听连接。
#
#但是,当端口转发或网络地址转换(NAT)为
#使用,实际上可以通过不同的IP和端口访问该副本
#对。副本可以使用以下两个选项,以便
#向其主控报告一组特定的IP和端口,以便同时使用INFO
#和ROLE将报告这些值。
#
#如果您只需要覆盖两个选项,则无需同时使用这两个选项
#端口或IP地址。
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234


#############################按键跟踪(KEYS TRACKING)################# ################

#Redis实现了服务器辅助的客户端值缓存支持。
#这是通过使用记住的无效表来实现的,使用
#1600万个插槽,哪些客户端可能具有某些密钥子集。反过来
#这用于为了发送无效消息到客户端。请
#检查此页面以了解有关该功能的更多信息:
#
#https://redis.io/topics/client-side-caching
#
#为客户端启用跟踪时,将假定所有只读查询
#要缓存:这将强制Redis将信息存储在无效中
# 桌子。修改密钥后,此类信息将被清除,并且
#无效消息发送到客户端。但是,如果工作量为
#在读取中占主导地位,Redis可以按顺序使用越来越多的内存
#跟踪许多客户端获取的密钥。
#
#因此,可以为
#无效表。默认情况下将其设置为1M的密钥,并且一旦达到此限制
达到#号,Redis将开始逐出失效表中的键
#即使未修改它们,也只是为了回收内存:这将依次
#强制客户端使缓存的值无效。基本上是桌子
#最大大小是您要花费的服务器内存之间的权衡
#端跟踪有关谁缓存了什么以及客户端功能的信息
#在内存中保留缓存的对象。
#
#如果将该值设置为0,则表示没有限制,Redis将
#在失效表中保留所需数量的键。
#在“统计信息”信息部分中,您可以找到有关
在每个给定时刻,失效表中的#个键。
#
#注意:在广播模式下使用按键跟踪时,不使用任何内存
#在服务器端,因此此设置无用。
#
#tracking-table-max-keys 1000000

################################## 安全(SECURITY) ############### ####################

#警告:由于Redis速度非常快,外部用户可以尝试
#在现代机器上每秒可读取100万个密码。这意味着你
#应该使用非常强壮的密码,否则它们很容易被破解。
#请注意,因为密码实际上是客户端之间的共享机密
#和服务器,并且不应被任何人记住密码
#可以很容易地是来自/ dev / urandom或其他任何东西的长字符串,因此可以使用
#长而难以猜测的密码,无法进行暴力攻击。

#Redis ACL用户的定义如下:
#
#user <用户名> ... acl规则...
#
# 例如:
#
#用户工作者+ @ list + @ connection〜jobs:* on> ffa9203c493aa99
#
#特殊用户名“默认”用于新连接。如果这个用户
#具有“ nopass”规则,那么新连接将立即进行身份验证
#作为“默认”用户,不需要通过
#AUTH命令。否则,如果未将“默认”用户标记为“ nopass”
#连接将以未经身份验证的状态开始,并且需要
#AUTH(或HELLO命令的AUTH选项),以便进行身份验证和
#开始工作。
#
#描述用户可以执行的操作的ACL规则如下:
#
#on启用用户:可以以该用户身份进行身份验证。
#off禁用用户:不再可能进行身份验证
#与该用户,但是已验证身份的连接
#仍然可以使用。
#+ <命令>允许执行该命令
#-<命令>禁止执行该命令
#+ @ <category>允许执行此类中的所有命令
具有有效类别的#如@ admin,@ set,@ sortedset,...
#依此类推,请参阅server.c文件中的完整列表,其中
#描述并定义了Redis命令表。
#特殊类别@all表示所有命令,但当前
#存在于服务器中,以后会加载
#通过模块。
#+ <command> | subcommand允许其他的特定子命令
#禁用命令。请注意,此表格不是
#可以像-DEBUG | SEGFAULT一样被否定,但是
#仅以“ +”开头的加法器。
#allcommands + @ all的别名。请注意,这意味着执行的能力
#将来通过模块系统加载的所有命令。
#nocommands-@ all的别名。
#〜<pattern>添加可以在其中提及的键的模式
#条命令。例如〜*允许所有键。图案
#是一种球形样式的模式,类似于KEYS之一。
#可以指定多个模式。
#allkeys〜*的别名
#resetkeys刷新允许的键模式列表。
#> <密码>将此密码添加到用户的有效密码列表中。
#例如> mypass将“ mypass”添加到列表中。
#此指令清除“ nopass”标志(请参阅下文)。
#<< password>从有效密码列表中删除此密码。
#nopass删除用户的所有设置密码,然后用户
#被标记为不需要密码:这意味着每个
#密码将对此用户无效。如果该指令是
#用于默认用户,每个新连接都会
#立即通过默认用户进行身份验证,而无需
#任何必需的显式AUTH命令。注意“ resetpass”
#指令将清除此条件。
#resetpass刷新允许的密码列表。而且去除
#“ nopass”状态。在“ resetpass”之后,用户没有关联
#个密码,没有添加就无法进行身份验证
#一些密码(或稍后将其设置为“ nopass”)。
#reset执行以下操作:resetpass,resetkeys,off,
# -@全部。用户立即返回到相同的状态
#创建后。
#
#ACL规则可以以任何顺序指定:例如,您可以以
#个密码,然后是标志或密钥模式。但是请注意,添加剂
#和减法规则将根据顺序更改含义。
#例如,请参见以下示例:
#
#用户alice在+ @ all -DEBUG〜*> somepassword上
#
#这将允许“驴友”使用所有命令,但
#DEBUG命令,因为+ @ all将所有命令添加到命令集中
#alice可以使用,后来删除了DEBUG。但是,如果我们颠倒顺序
如果有两个ACL规则,结果将有所不同:
#
#用户alice在-DEBUG + @ all〜*> somepassword上
#
#现在,当alice的允许集中还没有命令时,DEBUG被删除。
#命令,之后添加了所有命令,因此用户将能够
#执行所有操作。
#
#基本上,ACL规则是从左到右处理的。
#
#有关ACL配置的更多信息,请参阅
#Redis网站位于https://redis.io/topics/acl

#ACL日志
#
#ACL日志跟踪失败的命令和关联的身份验证事件
#与ACL。ACL日志可用于对阻止的失败命令进行故障排除
#通过ACL。ACL日志存储在内存中。您可以使用以下方法回收内存
#ACL日志重置。在下面定义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 foobared

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

################################# CLIENTS ############### ######################

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

############################## 内存管理(MEMORY MANAGEMENT) ################## ##############

#设置内存使用限制为指定的字节数。
#当达到内存限制时,Redis将尝试删除密钥
#根据选择的驱逐策略(请参阅maxmemory-policy)。
#
#如果Redis无法根据策略删除密钥,或者策略为
#设置为'noeviction',Redis将开始回复命令错误
#将使用更多的内存,例如SET,LPUSH等,并将继续
#回复诸如GET之类的只读命令。
#
#当将Redis用作LRU或LFU缓存或
#设置实例的硬盘限制(使用“ noeviction”策略)。
#
#警告:如果您将副本附加到实例上且启用了maxmemory,
#减去提供副本所需的输出缓冲区的大小
#从已用的内存数量开始,以便网络问题/重新同步
#不触发退出键的循环,反过来输出
#副本缓冲区已满,有被删除的密钥DEL触发了删除
#更多的键,依此类推,直到数据库完全清空。
#
#简而言之...如果您附加了副本,建议您设置一个较低的
#maxmemory的限制,以便系统上有一些可用的RAM用于复制
#个输出缓冲区(但是,如果策略为“ noeviction”,则不需要此缓冲区)。
#
#maxmemory <字节>

#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均使用近似值实现
#随机算法。
#
#注意:使用上述任何策略时,Redis都会在写入时返回错误
#操作,如果没有合适的退出键。
#
#在撰写本文时,这些命令是:set setnx setex append
#incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
#zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
#getset mset msetnx exec排序
#
#默认为:
#
#maxmemory-policy noeviction

#LRU,LFU和最小TTL算法不是精确算法,而是近似算法
#算法(以节省内存),因此您可以对其进行调整以提高速度或
# 准确性。默认情况下,Redis将检查五个键并选择一个
#最近最少使用的时间,您可以使用以下方法更改样本量
#配置指令。
#
#默认值5产生足够好的结果。10非常接近
#真正的LRU,但消耗更多的CPU。3更快,但不是很准确。
#
#maxmemory-samples 5

#从Redis 5开始,默认情况下,副本将忽略其maxmemory设置
#(除非在故障转移后或手动升级为主服务器)。它的意思是
#退出密钥将仅由主机处理,发送
#DEL命令作为副本在主端上的退出命令。
#
#此行为可确保主数据库和副本数据库保持一致,并且通常
#您想要的内容,但是如果您的副本是可写的,或者您想要副本
#具有不同的内存设置,并且您确定执行了所有写操作
#到副本是幂等的,那么您可以更改此默认值(但请确保
#了解您在做什么。
#
#请注意,由于默认情况下该副本不会退出,因此它可能最终会使用更多副本
#内存比通过maxmemory设置的内存多(某些缓冲区可能
#在副本上更大,否则数据结构有时可能会占用更多内存
#等)。因此,请确保您监视副本并确保它们
#具有足够的内存,永远不会在内存不足之前达到真正的内存不足状态
#master达到配置的maxmemory设置。
#
# replica-ignore-maxmemory yes

#Redis通过两种方式回收过期的密钥:在访问时,这些密钥是
#发现已过期,并且在后台,也就是所谓的
#“活动的到期密钥”。关键空间被缓慢地交互扫描
#寻找可回收的过期密钥,以便可以释放内存
过期的密钥数量,将在短期内不再访问。
#
#到期周期的默认工作量将尝试避免超过
#百分之十的过期密钥仍在内存中,并将尝试避免消耗
#超过总内存的25%,并增加系统延迟。然而
#可以增加通常设置为的过期“努力”
#“ 1”,取更大的值,最大取值“ 10”。在最大值
#系统将使用更多的CPU,更长的周期(从技术上讲可能会引入
#更高的延迟),并且可以容忍更少的已过期密钥仍然存在
#在系统中。这是内存,CPU和延迟之间的折衷方案。
#
#active-expire-effort 1

############################ LAZY FREEING #################### #################

#Redis有两个删除键的原语。一个叫做DEL,是一个阻塞
#删除对象。这意味着服务器停止处理新命令
#为了在同步中回收与对象关联的所有内存
# 办法。如果删除的键与一个小对象相关联,则需要时间
#为了执行DEL命令非常小,可以与大多数其他设备相提并论
#Redis中的O(1)或O(log_N)命令。但是,如果密钥与
#包含数百万个元素的汇总值,服务器可以阻止
#长时间(甚至几秒钟)以完成操作。
#
#由于上述原因,Redis还提供了非阻塞删除原语
#,例如UNLINK(非阻塞DEL)和FLUSHALL的ASYNC选项,以及
#FLUSHDB命令,以便在后台回收内存。这些命令
#在固定时间内执行。另一个线程将逐步释放
#尽可能快地在后台对象。
#
#FLUSHALL和FLUSHDB的DEL,UNLINK和ASYNC选项是用户控制的。
#由应用程序的设计来决定何时是一个好的
#使用一个或另一个的想法。但是,Redis服务器有时必须
#删除键或刷新整个数据库,这是其他操作的副作用。
#特别是Redis会独立于用户调用中的对象删除对象
#以下方案:
#
#1)驱逐时,由于maxmemory和maxmemory策略配置,
#以便为新数据腾出空间,而无需移至指定的位置
#内存限制。
#2)由于过期:当一个密钥具有关联的生存时间(请参见
#EXPIRE命令)必须从内存中删除。
#3)由于将数据存储在键上的命令的副作用,该键可能会
# 已经存在。例如,RENAME命令可能会删除旧密钥
#内容被另一个替换时。同样的SUNIONSTORE
#或带有STORE选项的SORT可能会删除现有密钥。SET命令
#本身会删除指定密钥的所有旧内容以进行替换
#使用指定的字符串。
#4)在复制过程中,当副本执行完全重新同步时,
#它的主人,整个数据库的内容被删除以便
#加载刚传输的RDB文件。
#
#在上述所有情况下,默认设置都是以阻止方式删除对象,
#就像是否调用了DEL。但是,您可以专门配置每种情况
#以便以非阻塞方式释放内存,例如UNLINK
使用以下配置指令调用了#。

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


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

lazyfree-lazy-user-del no

############################## THREADED I / O ############## ###################

#Redis主要是单线程的,但是有某些线程
#操作,例如UNLINK,缓慢的I / O访问和其他
#在侧线程上执行。
#
#现在还可以处理Redis客户端套接字的读写
#在不同的I / O线程中。由于特别是写作如此缓慢,通常
#Redis用户使用流水线来加快Redis的性能
#核心,并生成多个实例以扩展规模。使用I / O
#线程可以轻松地将Redis加速两次,而无需诉诸
#对实例进行流水线处理或分片。
#
#默认情况下禁用线程,我们建议仅在计算机中启用它
#至少具有4个或更多核心,剩下至少一个备用核心。
#使用8个以上的线程不太会有帮助。我们也建议使用
#仅在确实存在性能问题的情况下,使用Redis进行线程化的I / O
#个实例可以使用很大一部分CPU时间,否则
#使用此功能毫无意义。
#
#因此,例如,如果您有四个内核的盒子,请尝试使用2或3个I / O
#个线程,如果您有8个核心,请尝试使用6个线程。为了
#enable I / O线程使用以下配置指令:
#
# io-threads 4
#
#将io-threads设置为1只会照常使用主线程。
#启用I / O线程后,我们仅使用线程进行写操作,即
#线程化write(2)系统调用并将客户端缓冲区传输到
# 插座。但是,也可以启用读取和读取的线程
#使用以下配置指令解析协议,方法是设置
#将它设为yes:
#
#io-threads-do-reads no
#
#通常,线程读取无济于事。
#
#注意1:无法在运行时通过以下方式更改此配置指令
#配置设置 如果SSL为
#启用。
#
#注意2:如果要使用redis-benchmark测试Redis加速,请
#确保您还可以使用线程模式运行基准测试本身
#--threads选项以匹配Redis线程数,否则您将不会
#能够注意到改进。

###########################内核OOM控制(KERNEL OOM CONTROL)#################### ###########

#在Linux上,可以向内核提示OOM杀手级进程
#内存不足时应先被杀死。
#
#启用此功能可使Redis主动控制oom_score_adj值
#其所有流程,取决于它们的角色。默认分数将
#尝试先杀死后台子进程,然后
#个副本在高手面前被杀死。
#
#Redis支持三个选项:
#
#否:请勿更改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 0200800

############################ APPEND ON MODE ################# ##############

#默认情况下,Redis异步将数据集转储到磁盘上。此模式是
#在许多应用程序中都足够好,但是Redis进程或
#停电可能会导致几分钟的写入丢失(取决于
#配置的保存点)。
#
#仅附加文件是一种替代的持久性模式,可提供
#更好的耐久性。例如使用默认数据fsync策略
#(请参阅配置文件中的后面部分),Redis可能仅丢失一秒钟的写操作。
#戏剧性事件,例如服务器断电,或者一次写入(如果有的话)
#Redis进程本身发生错误,但是操作系统是
#仍能正常运行。
#
#可以同时启用AOF和RDB持久性,而不会出现问题。
#如果在启动时启用了AOF,则Redis将加载AOF,即文件
#具有更好的耐用性保证。
#
#请检查http://redis.io/topics/persistence以获取更多信息。

appendonly no

#仅附加文件的名称(默认值:“ appendonly.aof”)

appendfilename "appendonly.aof"

#fsync()调用告诉操作系统实际在磁盘上写入数据
#而不是等待输出缓冲区中的更多数据。某些操作系统会真正刷新
#磁盘上的数据,某些其他操作系统将尝试尽快进行处理。
#
#Redis支持三种不同的模式:
#
#否:不要fsync,只要让OS在需要时刷新数据即可。快点。
#always:每次仅写入追加日志后的fsync。慢,最安全。
#everysec:每秒仅同步一次fsync。妥协。
#
#默认为“ everysec”,因为通常是
#速度和数据安全。您可以了解是否可以放宽此限制,
#“ no”将使操作系统在以下情况时刷新输出缓冲区
#它希望获得更好的性能(但是如果您能够接受
#一些数据丢失会考虑默认的持久化模式(即快照),
#或相反,请使用“总是”,该速度非常慢,但比
#每秒钟。
#
#更多详细信息,请查看以下文章:
#http://antirez.com/post/redis-persistence-demystified.html
#
#如果不确定,请使用“ everysec”。

# appendfsync always
appendfsync everysec
# appendfsync no

#当AOF fsync策略设置为always或everysec,并且有一个背景时
#保存过程(后台保存或AOF日志后台重写)为
#在某些Linux配置中,对磁盘执行大量I / O
#Redis可能在fsync()调用中阻塞的时间过长。请注意,没有针对
#当前,因为即使在其他线程中执行fsync也会阻塞
#我们的同步write(2)调用。
#
#为了减轻此问题,可以使用以下选项
#可以防止在主进程中调用fsync()时
#BGSAVE或BGREWRITEAOF正在进行中。
#
#这意味着当另一个孩子正在保存时,Redis的持久性是
#与“ appendfsync none”相同。实际上,这意味着
#在最坏的情况下可能会丢失多达30秒的日志记录(使用
#默认Linux设置)。
#
#如果您有延迟问题,则将其设置为“是”。否则将其保留为
从耐久性的角度来看,“#”是最安全的选择。

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的系统上可能会发生这种情况
#崩溃,尤其是在没有安装ext4文件系统的情况下
#data = ordered选项(但是Redis本身不会发生这种情况
#崩溃或中止,但操作系统仍可正常运行)。
#
#Redis可以在发生这种情况时退出并显示错误,也可以加载尽可能多的内容
#尽可能的数据(现在为默认值),如果找到AOF文件则开始
#在末尾被截断。以下选项控制此行为。
#
#如果aof-load-truncated设置为yes,则会加载截短的AOF文件并
#Redis服务器开始发出日志以通知用户该事件。
#否则,如果该选项设置为no,服务器将中止并显示错误
#并拒绝启动。当该选项设置为“否”时,用户要求
#在重新启动之前使用“ redis-check-aof”实用程序修复AOF文件
# 服务器。
#
#请注意,如果在中间发现AOF文件已损坏
#服务器仍将退出并出现错误。此选项仅在以下情况下适用
#Redis将尝试从AOF文件中读取更多数据,但没有足够的字节
#将被发现。
aof-load-truncated yes

#重写AOF文件时,Redis可以在
#AOF文件可加快重写和恢复速度。启用此选项时
重写的AOF文件上的#由两个不同的节组成:
#
#[RDB文件] [AOF尾部]
#
#加载时,Redis会识别AOF文件以“ REDIS”开头
#字符串并加载带前缀的RDB文件,然后继续加载AOF
# 尾巴。
aof-use-rdb-preamble yes

############################## LUA SCRIPTING ################ ###############

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

############################### REDIS CLUSTER ################ ###############

#普通Redis实例不能成为Redis集群的一部分;仅节点是
#在群集节点可以的情况下启动。为了启动一个Redis实例作为一个
#cluster node使群集支持取消注释以下内容:
#
#cluster-enabled yes

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

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

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

#群集副本能够迁移到孤立的主数据库(即主数据库)
#没有可用的副本。这提高了集群能力
#抵制故障,因为否则孤立的主节点无法进行故障转移
#如果没有可用的副本,则在失败的情况下。
#
#仅当仍然存在至少一个副本时,副本服务器才会迁移到孤立的主服务器
#给定其旧主副本的其他工作副本的数量。这个号码
#是“移民壁垒”。迁移障碍为1表示副本
#仅在其主数据库至少有其他1个工作副本时才会迁移
#依此类推。它通常反映出每个副本所需的副本数
#您集群中的master。
#
#默认为1(仅当其主服务器至少保留了主副本时,副本服务器才会迁移
#个副本)。要禁用迁移,只需将其设置为非常大的值即可。
#可以设置为0,但仅在调试和危险时有用
#在生产中。
#
#cluster-migration-barrier 1

#默认情况下,如果Redis群集节点检测到查询,则停止接受查询
#至少是一个未显示的哈希槽(没有可用的节点为其提供服务)。
#如果集群部分处于关闭状态(例如,一定范围的哈希槽),则采用这种方式
#不再涵盖)所有群集最终将变得不可用。
#再次覆盖所有插槽后,它将自动返回可用状态。
#
#但是有时您希望集群的子集正常工作,
#继续接受对仍然存在的键空间部分的查询
#覆盖。为此,只需设置cluster-require-full-coverage
#选项为否。
#
#cluster-require-full-coverage yes

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

#此选项设置为yes时,允许节点在
#集群处于关闭状态,只要它认为自己拥有插槽即可。 
#
#这在两种情况下很有用。第一种情况是当应用程序
#在节点故障或网络分区期间不需要数据的一致性。
#缓存的一个例子,只要节点有数据
#应该能够提供服务。 
#
#第二个用例用于不符合建议的配置  
#三个分片,但要启用集群模式并在以后扩展。一种
#1或2分片配置中的master中断导致对
#没有设置此选项的整个群集,设置了该选项后,只会发生写中断。
#如果没有法定人数的主持人,则插槽所有权不会自动更改。 
#
#cluster-allow-reads-when-down no

#为了设置您的集群,请确保阅读文档
#可从http://redis.io网站获得。

######################### CLUSTER DOCKER / NAT支持################### #####

#在某些部署中,Redis群集节点地址发现失败,因为
#个地址是NAT-ted或因为端口已转发(典型情况是
#Docker和其他容器)。
#
#为了使Redis Cluster在这样的环境中工作,
#每个节点都知道需要其公共地址的配置。这
#以下两个选项用于此范围,分别是:
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port
#
#每个命令都向节点指示其地址,客户端端口和集群消息
#总线端口。然后将信息发布在总线数据包的标题中
#,以便其他节点将能够正确映射该节点的地址
#发布信息。
#
#如果未使用上述选项,则正常的Redis群集自动检测
#将代替使用。
#
#请注意,重新映射后,总线端口可能不在的固定偏移量
#客户端端口+ 10000,因此您可以根据需要指定任何端口和总线端口
#有关它们如何重新映射的信息。如果未设置总线端口,则固定偏移量为
#10000将照常使用。
#
# 例子:
#
#cluster-announce-ip 10.1.1.5
#cluster-announce-port 6379
#cluster-announce-bus-port 6380

################################ SLOW LOG ############### #####################

#Redis Slow Log是一个用于记录超过指定数量的查询的系统
# 执行时间处理时间。执行时间不包括I / O操作
#喜欢与客户交谈,发送回复等,
#但仅是实际执行命令所需的时间(这是唯一的时间
#执行命令的阶段,其中线程被阻塞并且无法服务
在此期间#个其他请求)。
#
#您可以使用以下两个参数配置慢速日志:一个告诉Redis
#为了使执行时间超出执行时间(以微秒为单位)
#命令获取日志,另一个参数是长度
#慢速日志。记录新命令时,最旧的命令将从命令行中删除。
#已记录命令的队列。

#以下时间以微秒表示,因此1000000等价
#一秒钟。请注意,负数将禁用慢速日志记录,而
#零值将强制记录每个命令。
slowlog-log-slower-than 10000

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

############################## LATENCY MONITOR ################# ##############

#Redis延迟监视子系统对不同的操作进行采样
#在运行时收集与可能的来源有关的数据
#Redis实例的延迟。
#
#通过LATENCY命令,该信息对用户可用
#打印图形并获取报告。
#
#系统仅记录在等于或等于时间的时间内执行的操作
#大于通过
#delay-monitor-threshold配置指令。设置其值时
#设置为零,等待时间监视器关闭。
#
#默认情况下,延迟监视是禁用的,因为它几乎不需要
#如果您没有延迟问题,并且收集数据可以提高性能
#冲击虽然很小,但可以在大负载下测量。潜伏
使用以下命令可以轻松地在运行时启用#监视
#“如果需要,请配置配置延迟监控器阈值<毫秒”。
latency-monitor-threshold 0

########################### EVENT NOTIFICATION #################### ###########

#Redis可以将关键空间中发生的事件通知给发布/订阅客户端。
#此功能记录在http://redis.io/topics/notifications
#
#例如,如果启用了键空间事件通知,并且有一个客户端
#对存储在数据库0中的键“ foo”执行DEL操作,两个
#条消息将通过发布/订阅发布:
#
#发布__keyspace @ 0 __:foo del
#发布__keyevent @ 0 __:del foo
#
#可以在一组中选择Redis将通知的事件
班级数量。每个类都由一个字符标识:
#
#K个键空间事件,以__keyspace @ <db> __前缀发布。
#E Keyevent事件,以__keyevent @ <db> __前缀发布。
#g通用命令(非类型专用),例如DEL,EXPIRE,RENAME,...
#$字符串命令
#l列出命令
#s设置命令
#h哈希命令
#z排序集命令
#x过期事件(每次密钥过期时生成的事件)
#e驱逐事件(驱逐密钥以获取最大内存时生成的事件)
#t流命令
#m键丢失事件(注意:它不包含在“ A”类中)
#g $ lshzxet的别名,因此“ AKE”字符串表示所有事件
#(除了键缺失事件外,由于它们的原因,这些事件被排除在“ A”之外
#独特的性质)。
#
#“ notify-keyspace-events”将由组成的字符串作为参数
零个或多个字符的数量。空字符串表示通知
#被禁用。
#
#示例:从列表的角度启用列表和一般事件
#事件名称,使用:
#
#notify-keyspace-events Elg
#
#示例2:获取订阅频道的过期密钥流
#名称__keyevent @ 0__:过期使用:
#
#notify-keyspace-events Ex
#
#默认情况下,所有通知都被禁用,因为大多数用户不需要
#此功能,该功能有一些开销。请注意,如果您不
#指定K或E中的至少一个,将不传递任何事件。
notify-keyspace-events ""

############################## GOPHER SERVER ################# ################

#Redis包含Gopher协议的实现,如
#RFC 1436(https://www.ietf.org/rfc/rfc1436.txt)。
#
#Gopher协议在90年代后期非常流行。这是另一种选择
#到网络上,服务器端和客户端的实现是如此简单
#Redis服务器只有100行代码才能实现此功能
# 支持。
#
#您现在如何使用Gopher?好吧,地鼠从来没有*真的*死过,并且
#最近为了让Gopher具有更高层次的内容而进行了一些移动
#由纯文本文档组成,将要复活。有些人想要更简单
#互联网,其他人则认为主流互联网变得太多了
#控制,为人们创造一个替代空间是很酷的
#想要一点新鲜空气。
#
#无论如何,在Redis诞生10周年之际,我们给了它Gopher协议
#作为礼物。
#
#  - - 这个怎么运作?---
#
#Redis Gopher支持使用Redis的内联协议,特别是
#两种仍然是非法的内联请求:空请求
#或任何以“ /”开头的请求(没有Redis命令开始
#加上这样的斜线)。正常的RESP2 / RESP3请求完全超出了
#Gopher协议实现的路径,也照常使用。
#
#如果启用Gopher后打开与Redis的连接并将其发送
#一个类似“ / foo”的字符串,如果有一个名为“ / foo”的密钥,则通过
#Gopher协议。
#
#为了创建一个真实的Gopher“漏洞”(Gopher中Gopher网站的名称,
#说话),您可能需要以下脚本:
#
#https://github.com/antirez/gopher2redis
#
#  - - 安全警告  - -
#
#如果您打算将Redis放置在互联网上的公共地址中
#到服务器Gopher页面上确保为实例设置密码。
#设置密码后:
#
#1. Gopher服务器(启用时,默认情况下未启用)仍然可以使用
#通过Gopher的内容。
#2.但是,在客户端将无法调用其他命令之前
#验证。
#
#因此,请使用'requirepass'选项保护您的实例。
#
#注意'io-threads-do-reads'当前不支持Gopher
#已启用。
#
#要启用Gopher支持,请取消注释以下行并设置选项
#从“否”(默认)到“是”。
#
# gopher-enabled no

############################## ADVANCED CONFIG ################# ##############

#当散列具有
#条目数量少,最大条目不超过给定
# 临界点。可以使用以下指令配置这些阈值。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

#列表也以特殊方式编码,以节省大量空间。
#可以指定每个内部列表节点允许的条目数
#作为固定的最大大小或最大元素数。
#对于固定的最大大小,请使用-5到-1,表示:
#-5:最大大小:64 Kb <-不建议用于正常工作负载
#-4:最大大小:32 Kb <-不建议
#-3:最大大小:16 Kb <-可能不建议
#-2:最大大小:8 Kb <-好
#-1:最大大小:4 Kb <-好
#正数表示最多存储_exactly_个元素
#每个列表节点。
#最高性能的选项通常是-2(8 Kb大小)或-1(4 Kb大小),
#但如果您的用例是唯一的,请根据需要调整设置。
list-max-ziplist-size -2

#列表也可能被压缩。
#压缩深度是从*每个*侧面开始的快速列表ziplist节点的数量
#要从压缩中“排除”的列表。列表的首尾
#始终未压缩以进行快速推入/弹出操作。设置为:
#0:禁用所有列表压缩
#1:深度1表示“直到列表中的1个节点之后才开始压缩,
#从头到尾”
#因此:[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

#集合在一种情况下具有特殊的编码:组成集合时
恰好是基数10范围内的整数的字符串的数量
64位带符号整数的数量。
#以下配置设置可设置
#设置为使用此特殊的内存保存编码。
set-max-intset-entries 512

#与散列和列表类似,排序后的集合也专门编码为
#为了节省很多空间。仅当长度和
排序集中的#个元素低于以下限制:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

#HyperLogLog稀疏表示字节数限制。该限制包括
#16个字节的标头。当使用稀疏表示的HyperLogLog交叉时
#此限制,它将转换为密集表示形式。
#
#大于16000的值完全没有用,因为此时
#密集表示可提高内存效率。
#
#为了获得以下好处,建议值是〜3000
#节省空间的编码,且不会减慢PFADD,
#是稀疏编码的O(N)。该值可以提高到
#〜10000,当CPU不是问题,而是空间,并且数据集为
#由基数在0-15000范围内的许多HyperLogLogs组成。
hll-sparse-max-bytes 3000

#流宏节点的最大大小/项目。流数据结构是一个基数
#大节点树,内部编码多个项目。使用此配置
#可以配置单个节点的大小(以字节为单位),并且
#在以下情况下切换到新节点之前可能包含的最大项目数:
#附加新的流条目。如果以下任何设置被设置为
#零,该限制被忽略,因此例如可以设置一个
#通过将max-bytes设置为0并将max-entries设置为所需的最大整数限制
# 价值。
stream-node-max-bytes 4096
stream-node-max-entries 100

#在Windows中,每100毫秒的CPU时间,主动重新哈希处理将使用1毫秒
#为了帮助重新哈希主Redis哈希表(一个映射顶层)
#个值键)。Redis使用的哈希表实现(请参阅dict.c)
#执行一次懒散的重新哈希处理:您在哈希表中运行的操作更多
#正在重新哈希化,则执行更多的重新哈希化“步骤”,因此,如果
#服务器处于空闲状态,重新哈希处理从未完成,并且使用了更多内存
#通过哈希表。
#
#默认值是每秒使用此毫秒数10次,以便
#主动重新哈希主字典,并在可能的情况下释放内存。
#
#如果不确定:
#如果您有严格的延迟要求,请使用“ activerehashing no”,这是
#在您的环境中,Redis可以不时回复,这不是一件好事
#查询2毫秒的延迟。
#
#如果您没有如此严格的要求,请使用“ activerehashing yes”
#希望在可能的情况下尽快释放内存。
activerehashing yes

#客户端输出缓冲区限制可用于强制断开客户端连接
#由于某种原因没有足够快地从服务器读取数据(a
#常见的原因是,发布/订阅客户端无法像使用客户端一样快地消费邮件
#发布者可以制作它们)。
#
#可以为三种不同类别的客户端设置不同的限制:
#
#普通->普通客户端,包括MONITOR客户端
#副本->副本客户端
#pubsub->客户端至少订阅了一个pubsub频道或模式
#
#每个client-output-buffer-limit指令的语法如下:
#
#client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
#
#一旦达到硬限制,或者如果
#达到软限制,并保持达到指定数量
#秒(连续)。
#例如,如果硬限制为32 MB,软限制为
#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处于空闲状态,但同时会使Redis在以下情况下更加敏感
#有很多键同时到期,并且可能会超时
#更精确地处理。
#
#范围介于1到500之间,但是通常不会超过100
# 一个好主意。大多数用户应使用默认值10并将其提高到
#100仅在要求极低延迟的环境中使用。
hz 10

#通常,将HZ值与
#连接的客户端数。这很有用,例如
#避免为每个后台任务调用处理过多的客户端
#为了避免延迟尖峰。
#
#由于默认的默认HZ值保守地设置为10,因此Redis
#提供并默认启用使用自适应HZ值的功能
#当有许多连接的客户端时,它将暂时升高。
#
#启用动态HZ时,将使用实际配置的HZ
#作为基准,但实际配置的HZ值的倍数将是
#在连接更多客户端后根据需要使用。这样闲置
#实例将仅占用很少的CPU时间,而忙碌的实例将
#更灵敏。
dynamic-hz yes

#当孩子重写AOF文件时,如果启用了以下选项
#每生成32 MB的数据,文件就会进行同步处理。这很有用
#为了更逐步地将文件提交到磁盘并避免
#大的延迟峰值。
aof-rewrite-incremental-fsync yes

#Redis保存RDB文件时,如果启用以下选项
#每生成32 MB的数据,文件就会进行同步处理。这很有用
#为了更逐步地将文件提交到磁盘并避免
#大的延迟峰值。
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。
#计数器随着访问次数的不同而变化,且访问次数不同
#对数因子:
#
#+ -------- + ------------ + ------------ + ------------ + ------------ + ------------ +
#| 因素| 100点击| 1000点击| 10万次点击| 1M点击| 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对象freq foo
#
#注意2:计数器的初始值为5,以便为新对象提供机会
#累积点击数。
#
#计数器衰减时间是按顺序必须经过的时间(以分钟为单位)
#将密钥计数器除以2(如果有值则减1
#小于<= 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

#将要处理的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线程,生物线程,aof重写子进程以及
#bgsave子进程。指定cpu列表的语法与
#tasket命令:
#
#将Redis服务器/ IO线程设置为CPU关联0、2、4、6:
# server_cpulist 0-7:2
#
#将生物线程设置为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

你可能感兴趣的:(学习笔记)