Redis——配置详解

前言

redis : redis 6.0.9

内容

#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都相同。

################################## INCLUDES ###################################

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

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

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

################################## NETWORK #####################################

#默认情况下,如果未指定“ 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禁用)
timeout 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-protocols "TLSv1.2 TLSv1.3"

#配置允许的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
################################# GENERAL #####################################

#默认情况下,Redis不会作为守护程序运行。如果需要,请使用“是”。
#注意,Redis守护进程将在/var/run/redis.pid中写入一个pid文件。
daemonize no

#如果您是从upstart或systemd运行Redis,则Redis可以与您的
#监督树。选项:
#无监督-无监督互动
#受监督的新贵-通过将Redis置于SIGSTOP模式来指示新贵
#在新贵的作业配置中需要“预期停止”
#受监督的systemd-通过将READY = 1写入$ NOTIFY_SOCKET来发出信号systemd
#有监督的自动-根据以下信息检测暴发户或系统方法
#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之间的数字
databases 16

#默认情况下,Redis仅在开始登录时才显示ASCII艺术徽标。
#标准输出,如果标准输出是TTY。基本上这意味着
#通常徽标仅在交互式会话中显示。
#
#但是可以强制4.0之前的行为并始终显示
#通过将以下选项设置为yes,在启动日志中使用ASCII艺术徽标。
always-show-logo yes
############################## SNAPSHOTTING ################# ###############
#
#将数据库保存在磁盘上:
#
#  save <seconds> <changes>
#
#如果给定的秒数和给定的秒数都将保存数据库
#针对数据库的写入操作数。
#
#在下面的示例中,行为将是保存:
#在900秒(15分钟)后,如果至少更改了1个键
#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复制的几件事。
#
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
#1)Redis复制是异步的,但是您可以将master配置为
#如果至少看起来没有连接,则停止接受写入
#给定数量的副本。
#2)Redis副本能够与以下服务器执行部分重新同步
#master(如果复制链接丢失了相对较少的数量)
#    时间。您可能需要配置复制积压大小(请参阅下一个
此文件的#个部分),根据您的需要具有合理的价值。
#3)复制是自动的,不需要用户干预。之后
#网络分区副本自动尝试重新连接到主数据库
#并与它们重新同步。
#
# replicaof <masterip> <masterport>

#如果主服务器受密码保护(使用“ requirepass”配置)
下面的#指令)可以告诉副本在进行身份验证之前
#启动复制同步过程,否则主服务器将
#拒绝副本请求。
#
# masterauth <master-password>
#
#但是,如果您使用的是Redis ACL(对于Redis版本,则还不够)
#6或更高版本),并且默认用户无法运行PSYNC
#命令和/或复制所需的其他命令。在这种情况下
#更好地配置特殊用户以用于复制,并指定
#masteruser配置如下:
#
# masteruser <username>
#
#指定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
#复制同步策略:磁盘或套接字。
#
#无法继续执行新副本和重新连接副本
#复制过程刚刚收到差异,需要做的是所谓的
#“完全同步”。 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

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

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

#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用户的定义如下:
#
#用户<用户名> ... 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,
#-@ all。用户立即返回到相同的状态
#创建后。
#
#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
############################## 内存管理 ################## ##############

#设置内存使用限制为指定的字节数。
#当达到内存限制时,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均使用近似值实现
#随机算法。
#
#注意:使用上述任何策略,Redis都会在写入时返回错误
#操作,如果没有合适的退出键。
#
#在撰写本文时,这些命令是:set setnx setex append
#incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
#sinter sinterstore sunion sunionstore sdiff sdiffstore zadd锌锌合金
#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)系统调用并将客户端缓冲区传输到
#插座。但是,也可以启用读取和
#使用以下配置指令解析协议,方法是设置
#它是:
#
#io-threads-do-reads no
#
#通常,线程读取无济于事。
#
#注意1:无法在运行时通过以下方式更改此配置指令
#配置设置当SSL为时,Aso此功能当前不起作用
#启用。
#
#注意2:如果要使用redis-benchmark测试Redis加速,请
#确保您也使用线程化模式运行基准测试本身
#--threads选项以匹配Redis线程数,否则您将不会
#能够注意到改进。

########################### KERNEL OOM CONTROL #################### ###########

#在Linux上,可以向内核提示OOM杀手级进程
#内存不足时应先被杀死。
#
#启用此功能可使Redis主动控制oom_score_adj值
#取决于其所有流程。默认分数将
#尝试先杀死后台子进程,然后
#个副本在高手面前被杀死。
oom-score-adj no
#使用oom-score-adj时,此指令控制使用的特定值
#用于主,副本和后台子进程。 值范围-1000至
#1000(越高意味着越有可能被杀死)。
#
#非特权进程(不是root,并且没有CAP_SYS_RESOURCE功能)
#可以自由增加其值,但不能将其降低到其初始值以下
#个设置。
#
#服务器使用相对于oom_score_adj的初始值的值
#开始。 由于初始值通常为0,因此它们通常会与
#个绝对值。
oom-score-adj-values 0 200 800
############################ 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秒。
#
#较大的群集副本有效性因子可能允许数据过旧的副本进行故障转移
#master,但值太小可能会阻止群集执行以下操作:
#完全选择一个副本。
#
#为了获得最大可用性,可以设置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时,可防止副本尝试对其进行故障转移
#在主服务器故障期间的主服务器。但是主控仍然可以执行
#手动故障转移(如果被迫这样做)。
#
#这在不同的情况下很有用,尤其是在n多个的情况
#数据中心操作,如果不希望的话,我们希望一侧永远不会升级
#如果发生直流故障。
#
#cluster-replica-no-failover no

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

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

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

#在某些部署中,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日志慢于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操作,两个
#条消息将通过发布/订阅发布:
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __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”字符串表示所有事件
#(除了按键遗失事件外,由于它们
#独特的性质)。
#
#“ 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支持,请取消注释以下行并设置选项
#从no(默认)到yes。
#
# 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范围内的HyperLogLog组成。
hll-sparse-max-bytes 3000

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

#主动重新哈希处理每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。这是一个频率表
#计数器随着访问次数的不同而变化,且访问次数不同
#对数因子:
# +--------+------------+------------+------------+------------+------------+
# | 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,以便为新对象提供机会
#累积点击数。
#
#计数器衰减时间是按顺序必须经过的时间(以分钟为单位)
#将密钥计数器除以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
原文地址:https://www.cnblogs.com/wangyang0210/p/13933046.html