Redis配置文件解读

Posted 熙熙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis配置文件解读相关的知识,希望对你有一定的参考价值。

# Redis configuration file example.
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
# 为了读取配置文件,Redis必须以文件路径作为第一个参数启动。
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
# 关于单元的注意事项:当需要内存大小时,可以用通常的1k 5GB 4M等形式指定它
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

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

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
# include 可以包含一个或多个其他配置文件,如果您有一个标准模板,可用于所有Redis服 
# 务器,而每个服务只需少量的配置,那么这很有用。Include文件可以包含其他文件, 
# 所以要明智地使用它。
# Notice option "include" won\'t be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you\'d better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
# 注意:选项 "include" 不能通过admin或者 Redis Sentinel 使用 "CONFIG REWRITE" 命
# 令重写。
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
# 如果您对使用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.
# REDIS在启动的时候加载自定义模块,如果模块不能加载,REDIS将启动失败。
# 可以配置多个loadmodule命令。
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

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

# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
# 默认情况下,如果没有指定“bind”配置指令,Redis将侦听服务器上所有可用
# 网络地址。使用“bind”配置指令,后跟一个或多个IP地址,可以只监听一个或多个
# 指定的IP地址。
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
# 如果Redis所在的服务器暴露在了互联网上,那么Redis监听所有的网络地址
# 是危险的。互联网上的每个人都可以使用该Redis服务。所有默认情况下,我们
# 只监听本地IP地址,这样,只有本服务器上的应用才能使用该Redis服务。
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1

# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
#    "bind" directive.
# 2) No password is configured.
# 保护模块是一个安全保护层,目的是避免在互联网上暴露的Redis服务被
# 利用和访问。在下面情况下时,保护模式被开启:
#  1:没有使用“bind”指令显式绑定到一组地址
#  2:没有配置访问密码
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
#默认情况下,已启用保护模式。只有当您确定希望其他主机的客户机连接到Redis时,
# 才应该禁用它,即使没有配置身份验证,也没有使用“bind”指令显式列出一组
# 特定的网络IP地址。
protected-mode yes

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
# 在指定端口上接受连接。默认端口是6379.
# 如果端口指定为0,将不再接受TCP连接。
port 6379

# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
# 在每秒请求数高的环境中,可以配置一个高 tcp-backlog 值,
# 从而避免客户机连接速度慢的问题,请注意,Linux内核将静默地将其
# 截断为/proc/sys/net/core/somaxconn的值,因此请确保同时
# 提高somaxconn和tcp_max_syn_backlog的值,以获得所需的效果。
tcp-backlog 511

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
# 指定将用于侦听传入连接的Unix套接字的路径。没有默认值,
# 因此未指定时,Redis将不会侦听unix套接字
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Take the connection alive from the point of view of network
#    equipment in the middle.
# 如果不为0,在客户端离线情况下,使用 SO_KEEPALIVE 来发送TCP
# 应答消息。这样做有2个目的:
# 1:检测死机
#  2:以网络中间件方式来看待网络
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
# 在Linux系统,该指定值(以秒为单位)是发送确认的周期。
# 需要注意的是,关闭连接需要花费双倍的时间。
# 在其它内核上,周期依赖于内核配置。
# A reasonable value for this option is 300 seconds, which is the new
# Redis default starting with Redis 3.2.1.
# 该选项的合理值是300秒。这是从Redis 3.2.1开始的新Redis默认值
tcp-keepalive 300

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

# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration
# directive can be used to define TLS-listening ports. To enable TLS on the
# default port, use:
# 默认情况下,TLS/SSL是禁用的。如果需要启动,配置tls-port来定义TLS
# 监听段。可以使用下面配置来启动TLS。
# port 0
# tls-port 6379

# Configure a X.509 certificate and private key to use for authenticating the
# server to connected clients, masters or cluster peers.  These files should be
# PEM formatted.
# 配置X.509证书和私钥,以用于验证连接的客户端、主机或群集。
# 这些文件应为PEM格式。
# tls-cert-file redis.crt 
# tls-key-file redis.key

# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange:
#
# tls-dh-params-file redis.dh

# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL
# clients and peers.  Redis requires an explicit configuration of at least one
# of these, and will not implicitly use the system wide configuration.
#
# tls-ca-cert-file ca.crt
# tls-ca-cert-dir /etc/ssl/certs

# By default, clients (including replica servers) on a TLS port are required
# to authenticate using valid client side certificates.
#
# It is possible to disable authentication using this directive.
#
# tls-auth-clients no

# By default, a Redis replica does not attempt to establish a TLS connection
# with its master.
#
# Use the following directive to enable TLS on replication links.
#
# tls-replication yes

# By default, the Redis Cluster bus uses a plain TCP connection. To enable
# TLS for the bus protocol, use the following directive:
#
# tls-cluster yes

######################## GENERAL ##############################

# By default Redis does not run as a daemon. Use \'yes\' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# 默认情况下,Redis并不是守护进程。如果需要是守护进程,请配置为yes.
# 如果是守护进程,Redis会写一个PID文件:/var/run/redis.pid
daemonize no

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# 可以通过upstart和systemd管理Redis守护进程
#   supervised no      - no supervision interaction
#  supervised no  - 无监督互动
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised upstart - 通过将Redis置于SIGSTOP模式发出信号
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB
# 或NOTIFY_SOCKET环境变量
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised no

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
# 指定pid文件。Redis将在启动的时候写入,退出的时候删除。
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
# 如果Reids是非守护进程,如果没有配置pid文件,那么就不会产生pid文件。
# 如果是守护进程,即使没有配置pid文件,也会创建pid文件。默认路径
# 是 /var/run/redis.pid
# Creating a pid file is best effort: if Redis is not able to create it
# nothing bad happens, the server will start and run normally.
# 创建一个pid文件是最好的方法:如果Redis不能创建它,
# 那么不会有什么不好的事情发生,服务器将正常启动和运行。
pidfile /var/run/redis_6379.pid

# Specify the server verbosity level. 指定日志级别
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
# 指定日志文件名。也可以使用空字符串强制Redis使用日志标准输出。
# 请注意,如果您使用标准输出进行日志记录,但是daemonize,
# 日志将被发送到/dev/null
logfile ""

# To enable logging to the system logger, just set \'syslog-enabled\' to yes,
# and optionally update the other syslog parameters to suit your needs.
# 如果需要打印日志到操作系统日志,配置syslog-enabled为yes。
# 并根据需要更新其他syslog参数
# syslog-enabled no

# Specify the syslog identity. 指定系统日志标识
# syslog-ident redis

# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# 指定日志日志设置,必须是USER 或者是 LOCAL0 到 LOCAL7。
# syslog-facility local0

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and \'databases\'-1
# 设置数据库数量。默认数据是DB 0。可以在连接redis的时候选择一个不同的
# 数据库使用 SELECT <dbid>。dbid 是一个数字基于 0 到 \'databases\'-1 。
databases 16

# By default Redis shows an ASCII art logo only when started to log to the
# standard output and if the standard output is a TTY. Basically this means
# that normally a logo is displayed only in interactive sessions.
# 默认情况下,只有在TTY标准日志输出的情况下,才能打印LOGO。
# However it is possible to force the pre-4.0 behavior and always show a
# ASCII art logo in startup logs by setting the following option to yes.
# 如果想要强制在启动的时候打印LOGO,配置 always-show-logo 为yes 
always-show-logo yes

######################## SNAPSHOTTING  #########################
#
# Save the DB on disk: 保存DB到磁盘
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#  在指定秒数 和 指定写入数据的次数同事满足的情况下,将保存DB到磁盘
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#  如果禁用保存,通过注释 save 配置行
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
# 还可以通过添加带有单个空字符串参数的save指令来删除所有先前配置的存储点
#   save ""

save 900 1  # 900秒内至少1次写操作
save 300 10 # 300秒内至少10次写操作
save 60 10000 # 60秒内至少10000 次写操作

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one save point) and the latest background save failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
# 默认情况下,如果启用了RDB快照(至少有一个保存点),并且最新的后台保存失败,
# 则Redis将停止接受写入。这将使用户意识到(以一种硬的方式)数据没有正确地
# 保存在磁盘上,否则很可能没有人会注意到,并且会发生一些灾难。
#
# If the background saving process will start working again Redis will
# automatically allow writes again.
# 如果后台保存进程重新开始工作,Redis将自动允许再次写入。
# However if you have setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
# 但是,如果您已经设置了对Redis服务器和持久性的适当监视,那么您可能希望禁用此功能,
# 以便即使磁盘、权限等出现问题,Redis也将继续正常工作。
stop-writes-on-bgsave-error yes

# Compress string objects using LZF when dump .rdb databases?
# For default that\'s set to \'yes\' as it\'s almost always a win.
# If you want to save some CPU in the saving child set it to \'no\' but
# the dataset will likely be bigger if you have compressible values or keys.
# 在转储.rdb数据库时使用LZF压缩字符串对象?默认设置为“是”,因为这几乎总是一场胜利。
# 如果您想在saving子进程中保存一些CPU,请将其设置为“no”,但如果您有可压缩的值或键,
# 则数据集可能会更大。
rdbcompression yes

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
# for maximum performances.
# 从RDB的版本5开始,CRC64校验和被放在文件的末尾,这能防止文件格式损坏,
# 但是在保存和加载RDB文件时,会有一个性能损失(大约10%),
#因此您可以禁用它以获得最大的性能
# RDB files created with checksum disabled have a checksum of zero that will
# tell the loading code to skip the check.
# 在禁用校验和的情况下创建的RDB文件的校验和为零,这将告诉加载代码跳过检查。
rdbchecksum yes

# The filename where to dump the DB DB快照到磁盘的文件名
dbfilename dump.rdb

# Remove RDB files used by replication in instances without persistence
# enabled. By default this option is disabled, however there are environments
# where for regulations or other security concerns, RDB files persisted on
# disk by masters in order to feed replicas, or stored on disk by replicas
# in order to load them for the initial synchronization, should be deleted
# ASAP. Note that this option ONLY WORKS in instances that have both AOF
# and RDB persistence disabled, otherwise is completely ignored.
# 在没有启用持久性的实例中删除复制使用的RDB文件。默认情况下,
# 此选项处于禁用状态。但是,在某些环境中,出于管理法规或其他安全考虑,
# 应尽快删除主服务器在磁盘上保留的RDB文件,以便向副本提供数据,
# 或通过副本存储在磁盘上以加载这些文件以进行初始同步。
#请注意,此选项仅适用于同时禁用AOF和RDB持久性的实例,否则将完全忽略。
# An alternative (and sometimes better) way to obtain the same effect is
# to use diskless replication on both master and replicas instances. However
# in the case of replicas, diskless is not always an option.
# 另一种(有时更好)的方法是在主实例和副本实例上使用无盘复制。
# 但是,对于副本,无盘并不总是一个选项。
rdb-del-sync-files no

# The working directory. 工作目录
#
# The DB will be written inside this directory, with the filename specified
# above using the \'dbfilename\' configuration directive.
# 数据库将写入此目录中,并使用上面使用“dbfilename”配置指令指定的文件名。
# The Append Only File will also be created inside this directory.
# AOF 文件也是写在此目录
# Note that you must specify a directory here, not a file name. 这里必须是目录,而不是文件名
dir ./

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

# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
# 使用replicaof使Redis实例成为另一个Redis服务器的副本。
# 关于Redis复制,需要尽快了解一些事情。
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of replicas.
# Redis复制是异步的,但是您可以配置一个主服务器,
# 使其停止接受写入,如果它似乎没有连接到至少给定数量的副本。
# 2) Redis replicas are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 如果复制链接丢失的时间相对较短,则Redis副本能够与主服务器执行部分重新同步。
# 根据您的需要,您可能需要使用一个合理的值
# 来配置复制backlog大小(请参阅此文件的下一节)。
# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#  复制是自动的,不需要用户干预。在网络分区之后,
# 复制副本会自动尝试重新连接到主机并与它们重新同步。
# replicaof <masterip> <masterport>

# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the replica to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the replica request.
# 如果主机受密码保护(使用下面的“requirepass”配置指令),
# 则可以在开始复制同步过程之前通知副本进行身份验证,
# 否则主服务器将拒绝副本请求。
# masterauth <master-password>
#
# However this is not enough if you are using Redis ACLs (for Redis version
# 6 or greater), and the default user is not capable of running the PSYNC
# command and/or other commands needed for replication. In this case it\'s
# better to configure a special user to use with replication, and specify the
# masteruser configuration as such:
# 但是,如果您使用的是Redis acl(用于Redis version 6或更高版本)
# 并且默认用户无法运行PSYNC命令和/或复制所需的其他命令,那么这还不够。
# 在这种情况下,最好配置一个用于复制的特殊用户,并按如下方式指定主用户配置:
# masteruser <username>
#
# When masteruser is specified, the replica will authenticate against its
# master using the new AUTH form: AUTH <username> <password>.
# 指定masteruser后,复制副本将使用新的身份验证形式
# AUTH<username><password>对其主服务器进行身份验证。

# When a replica loses its connection with the master, or when the replication
# is still in progress, the replica can act in two different ways:
# 当复制副本失去与主服务器的连接,或复制仍在进行时,
# 复制副本可以以两种不同的方式操作:
# 1) if replica-serve-stale-data is set to \'yes\' (the default) the replica will
#    still reply to client requests, possibly with out of date data, or the
#    data set may just be empty if this is the first synchronization.
# 如果replica-serve-stale-data设置为“yes”(默认值),则复制副本仍将响应客户端请求
# 数据可能已过期,或者如果这是第一次同步,则数据集可能为空。
# 2) if replica-serve-stale-data is set to \'no\' the replica will reply with
#    an error "SYNC with master in progress" to all the kind of commands
#    but to INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,
#    SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,
#    COMMAND, POST, HOST: and LATENCY.
# 如果replica serve stale data设置为“no”,复制副本将对所有类型的命令答复
# 错误“SYNC with master in progress”,除了INFO,AUTH等命令外
replica-serve-stale-data yes

# You can configure a replica instance to accept writes or not. Writing against
# a replica instance may be useful to store some ephemeral data (because data
# written on a replica will be easily deleted after resync with the master) but
# may also cause problems if clients are writing to it because of a
# misconfiguration.
# 您可以将副本实例配置为接受或不接受写入。针对副本实例的写入对于存储
# 一些短暂的数据可能很有用(因为在副本上写入的数据在与主服务器重新同步后
# 很容易被删除),但是如果客户机由于配置错误而向其写入数据,也可能会导致问题
# Since Redis 2.6 by default replicas are read-only.
#
# Note: read only replicas are not designed to be exposed to untrusted clients
# on the internet. It\'s just a protection layer against misuse of the instance.
# Still a read only replica exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only replicas using \'rename-command\' to shadow all the
# administrative / dangerous commands.
# 请注意,复制副本不可在internet上公开。它只是防止实例被滥用的保护层。
# 默认情况下,只读副本仍会导出所有管理命令,如CONFIG、DEBUG等。
# 在一定程度上,您可以使用“rename command”来隐藏所有管理/危险命令来提高只读副本的安全性。
replica-read-only yes

# Replication SYNC strategy: disk or socket.
# 复制同步策略:磁盘或网络。
# New replicas and reconnecting replicas that are not able to continue the
# replication process just receiving differences, need to do what is called a
# "full synchronization". An RDB file is transmitted from the master to the
# replicas.
# 新的复制副本和重新连接的复制副本如果只是接收到差异而无法继续复制过程,
# 则需要执行所谓的“完全同步”。RDB文件从主服务器传输到副本。
# The transmission can happen in two different ways:
#
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
#                 file on disk. Later the file is transferred by the parent
#                 process to the replicas incrementally.
# Redis主机创建一个新进程,将RDB文件写入磁盘.稍后,该文件由父进程以增量方式传输到副本。
# 2) Diskless: The Redis master creates a new process that directly writes the
#              RDB file to replica sockets, without touching the disk at all.
# Redis master创建了一个新进程,直接将RDB文件写入副本套接字,而不需要接触磁盘。
#
# With disk-backed replication, while the RDB file is generated, more replicas
# can be queued and served with the RDB file as soon as the current child
# producing the RDB file finishes its work. With diskless replication instead
# once the transfer starts, new replicas arriving will be queued and a new
# transfer will start when the current one terminates.
# 使用磁盘备份复制,在生成RDB文件时,只要当前生成RDB文件的子级完成工作,
# 就可以将更多副本排入队列并与RDB文件一起提供服务。
# 使用无盘复制,一旦传输开始,到达的新副本将进入队列,新的传输将在当前复制终止时开始
# When diskless replication is used, the master waits a configurable amount of
# time (in seconds) before starting the transfer in the hope that multiple
# replicas will arrive and the transfer can be parallelized.
# 当使用无盘复制时,主机在开始传输之前等待一段可配置的时间(以秒为单位),
# 希望多个副本将到达并且传输可以并行化。
# With slow disks and fast (large bandwidth) networks, diskless replication
# works better. 在磁盘速度慢和网络比较快的情况下,无盘复制比较合适
repl-diskless-sync no

# When diskless replication is enabled, it is possible to configure the delay
# the server waits in order to spawn the child that transfers the RDB via socket
# to the replicas.
# 启用无盘复制时,可以配置服务器等待的延迟,以便生成通过套接字将RDB传输到副本的子任务。
# This is important since once the transfer starts, it is not possible to serve
# new replicas arriving, that will be queued for the next RDB transfer, so the
# server waits a delay in order to let more replicas arrive.
# 这一点很重要,因为一旦传输开始,就不可能为到达的新副本提供服务,新副本将排队
# 等待下一次RDB传输,因此服务器会等待一个延迟,以便让更多副本到达。
# The delay is specified in seconds, and by default is 5 seconds. To disable
# it entirely just set it to 0 seconds and the transfer will start ASAP.
# 延迟以秒为单位指定,默认为5秒。要完全禁用它,只需将其设置为0秒,传输将尽快开始。
repl-diskless-sync-delay 5

# -----------------------------------------------------------------------------
# WARNING: RDB diskless load is experimental. Since in this setup the replica
# does not immediately store an RDB on disk, it may cause data loss during
# failovers. RDB diskless load + Redis modules not handling I/O reads may also
# cause Redis to abort in case of I/O errors during the initial synchronization
# stage with the master. Use only if your do what you are doing.
# -----------------------------------------------------------------------------
# RDB无盘加载是实验性的。由于在此设置中,复制副本不会立即在磁盘上存储RDB,
# 因此在故障转移期间可能会导致数据丢失。RDB无盘加载+不处理I/O读取
# 的Redis模块也可能导致Redis在与主机的初始同步阶段出现I/O错误时中止。
# 只在你确定想做的时才使用。
# Replica can load the RDB it reads from the replication link directly from the
# socket, or store the RDB to a file and read that file after it was completely
# recived from the master.
# Replica可以直接从socket加载它从复制链接读取的RDB,或者将RDB存储到一个文件中,
# 并在完全从主服务器接收到该文件之后读取该文件。
# In many cases the disk is slower than the network, and storing and loading
# the RDB file may increase replication time (and even increase the master\'s
# Copy on Write memory and salve buffers).
# 在许多情况下,磁盘比网络慢,存储和加载RDB文件可能会增加复制时间
#(甚至会增加主机的“写入时拷贝”内存和缓冲区)。
# However, parsing the RDB file directly from the socket may mean that we have
# to flush the contents of the current database before the full rdb was
# received. For this reason we have the following options:
# 然而,直接从套接字解析RDB文件可能意味着我们必须在收到完整的RDB之前刷
# 新当前数据库的内容。为此,我们有以下选择:
# "disabled"    - Don\'t use diskless load (store the rdb file to the disk first)
# "on-empty-db" - Use diskless load only when it is completely safe.
# "swapdb"      - Keep a copy of the current db contents in RAM while parsing
#                 the data directly from the socket. note that this requires
#                 sufficient memory, if you don\'t have it, you risk an OOM kill.
repl-diskless-load disabled

# Replicas send PINGs to server in a predefined interval. It\'s possible to
# change this interval with the repl_ping_replica_period option. The default
# value is 10 seconds.
# 副本以预定义的时间间隔向服务器发送ping。可以使用
# repl_ping_replica_period选项更改此间隔。默认值为10秒。
# repl-ping-replica-period 10

# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of replica.
# 2) Master timeout from the point of view of replicas (data, pings).
# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings).
#
# It is important to make sure that this value is greater than the value
# specified for repl-ping-replica-period otherwise a timeout will be detected
# every time there is low traffic between the master and the replica.
#
# repl-timeout 60

# Disable TCP_NODELAY on the replica socket after SYNC?
#
# If you select "yes" Redis will use a smaller number of TCP packets and
# less bandwidth to send data to replicas. But this can add a delay for
# the data to appear on the replica side, up to 40 milliseconds with
# Linux kernels using a default configuration.
#
# If you select "no" the delay for data to appear on the replica side will
# be reduced but more bandwidth will be used for replication.
#
# By default we optimize for low latency, but in very high traffic conditions
# or when the master and replicas are many hops away, turning this to "yes" may
# be a good idea.
repl-disable-tcp-nodelay no

# Set the replication backlog size. The backlog is a buffer that accumulates
# replica data when replicas are disconnected for some time, so that when a
# replica wants to reconnect again, often a full resync is not needed, but a
# partial resync is enough, just passing the portion of data the replica
# missed while disconnected.
#
# The bigger the replication backlog, the longer the time the replica can be
# disconnected and later be able to perform a partial resynchronization.
#
# The backlog is only allocated once there is at least a replica connected.
#
# repl-backlog-size 1mb

# After a master has no longer connected replicas for some time, the backlog
# will be freed. The following option configures the amount of seconds that
# need to elapse, starting from the time the last replica disconnected, for
# the backlog buffer to be freed.
#
# Note that replicas never free the backlog for timeout, since they may be
# promoted to masters later, and should be able to correctly "partially
# resynchronize" with the replicas: hence they should always accumulate backlog.
#
# A value of 0 means to never release the backlog.
#
# repl-backlog-ttl 3600

# The replica priority is an integer number published by Redis in the INFO
# output. It is used by Redis Sentinel in order to select a replica to promote
# into a master if the master is no longer working correctly.
#
# A replica with a low priority number is considered better for promotion, so
# for instance if there are three replicas with priority 10, 100, 25 Sentinel
# will pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the replica as not able to perform the
# role of master, so a replica with priority of 0 will never be selected by
# Redis Sentinel for promotion.
#
# By default the priority is 100.
replica-priority 100

# It is possible for a master to stop accepting writes if there are less than
# N replicas connected, having a lag less or equal than M seconds.
#
# The N replicas need to be in "online" state.
#
# The lag in seconds, that must be <= the specified value, is calculated from
# the last ping received from the replica, that is usually sent every second.
#
# This option does not GUARANTEE that N replicas will accept the write, but
# will limit the window of exposure for lost writes in case not enough replicas
# are available, to the specified number of seconds.
#
# For example to require at least 3 replicas with a lag <= 10 seconds use:
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
#
# Setting one or the other to 0 disables the feature.
#
# By default min-replicas-to-write is set to 0 (feature disabled) and
# min-replicas-max-lag is set to 10.

# A Redis master is able to list the address and port of the attached
# replicas in different ways. For example the "INFO replication" section
# offers this information, which is used, among other tools, by
# Redis Sentinel in order to discover replica instances.
# Another place where this info is available is in the output of the
# "ROLE" command of a master.
#
# The listed IP and address normally reported by a replica is obtained
# in the following way:
#
#   IP: The address is auto detected by checking the peer address
#   of the socket used by the replica to connect with the master.
#
#   Port: The port is communicated by the replica during the replication
#   handshake, and is normally the port that the replica is using to
#   listen for connections.
#
# However when port forwarding or Network Address Translation (NAT) is
# used, the replica may be actually reachable via different IP and port
# pairs. The following two options can be used by a replica in order to
# report to its master a specific set of IP and port, so that both INFO
# and ROLE will report those values.
#
# There is no need to use both the options if you need to override just
# the port or the IP address.
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

########################## SECURITY ############################

# Warning: since Redis is pretty fast an outside user can try up to
# 1 million passwords per second against a modern box. This means that you
# should use very strong passwords, otherwise they will be very easy to break.
# Note that because the password is really a shared secret between the client
# and the server, and should not be memorized by any human, the password
# can be easily a long string from /dev/urandom or whatever, so by using a
# long and unguessable password no brute force attack will be possible.

# Redis ACL users are defined in the following format:
#
#   user <username> ... acl rules ...
#
# For example:
#
#   user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
#
# The special username "default" is used for new connections. If this user
# has the "nopass" rule, then new connections will be immediately authenticated
# as the "default" user without the need of any password provided via the
# AUTH command. Otherwise if the "default" user is not flagged with "nopass"
# the connections will start in not authenticated state, and will require
# AUTH (or the HELLO command AUTH option) in order to be authenticated and
# start to work.
#
# The ACL rules that describe what an user can do are the following:
#
#  on           Enable the user: it is possible to authenticate as this user.
#  off          Disable the user: it\'s no longer possible to authenticate
#               with this user, however the already authenticated connections
#               will still work.
#  +<command>   Allow the execution of that command
#  -<command>   Disallow the execution of that command
#  +@<category> Allow the execution of all the commands in such category
#               with valid categories are like @admin, @set, @sortedset, ...
#               and so forth, see the full list in the server.c file where
#               the Redis command table is described and defined.
#               The special category @all means all the commands, but currently
#               present in the server, and that will be loaded in the future
#               via modules.
#  +<command>|subcommand    Allow a specific subcommand of an otherwise
#                           disabled command. Note that this form is not
#                           allowed as negative like -DEBUG|SEGFAULT, but
#                           only additive starting with "+".
#  allcommands  Alias for +@all. Note that it implies the ability to execute
#               all the future commands loaded via the modules system.
#  nocommands   Alias for -@all.
#  ~<pattern>   Add a pattern of keys that can be mentioned as part of
#               commands. For instance ~* allows all the keys. The pattern
#               is a glob-style pattern like the one of KEYS.
#               It is possible to specify multiple patterns.
#  allkeys      Alias for ~*
#  resetkeys    Flush the list of allowed keys patterns.
#  ><password>  Add this passowrd to the list of valid password for the user.
#               For example >mypass will add "mypass" to the list.
#               This directive clears the "nopass" flag (see later).
#  <<password>  Remove this password from the list of valid passwords.
#  nopass       All the set passwords of the user are removed, and the user
#               is flagged as requiring no password: it means that every
#               password will work against this user. If this directive is
#               used for the default user, every new connection will be
#               immediately authenticated with the default user without
#               any explicit AUTH command required. Note that the "resetpass"
#               directive will clear this condition.
#  resetpass    Flush the list of allowed passwords. Moreover removes the
#               "nopass" status. After "resetpass" the user has no associated
#               passwords and there is no way to authenticate without adding
#               some password (or setting it as "nopass" later).
#  reset        Performs the following actions: resetpass, resetkeys, off,
#               -@all. The user returns to the same state it has immediately
#               after its creation.
#
# ACL rules can be specified in any order: for instance you can start with
# passwords, then flags, or key patterns. However note that the additive
# and subtractive rules will CHANGE MEANING depending on the ordering.
# For instance see the following example:
#
#   user alice on +@all -DEBUG ~* >somepassword
#
# This will allow "alice" to use all the commands with the exception of the
# DEBUG command, since +@all added all the commands to the set of the commands
# alice can use, and later DEBUG was removed. However if we invert the order
# of two ACL rules the result will be different:
#
#   user alice on -DEBUG +@all ~* >somepassword
#
# Now DEBUG was removed when alice had yet no commands in the set of allowed
# commands, later all the commands are added, so the user will be able to
# execute everything.
#
# Basically ACL rules are processed left-to-right.
#
# For more information about ACL configuration please refer to
# the Redis web site at https://redis.io/topics/acl

# ACL LOG
#
# The ACL Log tracks failed commands and authentication events associated
# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked 
# by ACLs. The ACL Log is stored in memory. You can reclaim memory with 
# ACL LOG RESET. Define the maximum entry length of the ACL Log below.
acllog-max-len 128

# Using an external ACL file
#
# Instead of configuring users here in this file, it is possible to use
# a stand-alone file just listing users. The two methods cannot be mixed:
# if you configure users here and at the same time you activate the exteranl
# ACL file, the server will refuse to start.
#
# The format of the external ACL user file is exactly the same as the
# format that is used inside redis.conf to describe users.
#
# aclfile /etc/redis/users.acl

# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatiblity
# layer on top of the new ACL system. The option effect will be just setting
# the password for the default user. Clients will still authenticate using
# AUTH <password> as usually, or more explicitly with AUTH default <password>
# if they follow the new protocol: both will work.
#
# requirepass foobared

# Command renaming (DEPRECATED).
#
# ------------------------------------------------------------------------
# WARNING: avoid using this option if possible. Instead use ACLs to remove
# commands from the default user, and put them only in some admin user you
# create for administrative purposes.
# ------------------------------------------------------------------------
#
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it will still be available for internal-use tools
# but not available for general clients.
#
# Example:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
# rename-command CONFIG ""
#
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to replicas may cause problems.

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

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
# 设置同时连接的客户端的最大数量。默认情况下,此限制设置为10000个客户端,
# 但是如果Redis服务器无法配置进程文件限制以允许指定的限制,则允许的最大客户端
# 数将设置为当前文件限制减去32(因为Redis保留了一些文件描述符供内部使用)。
# Once the limit is reached Redis will close all the new connections sending
# an error \'max number of clients reached\'.
# 一旦达到限制,Redis将关闭所有新连接,并发送错误“max number of clients reached”。
# IMPORTANT: When Redis Cluster is used, the max number of connections is also
# shared with the cluster bus: every node in the cluster will use two
# connections, one incoming and another outgoing. It is important to size the
# limit accordingly in case of very large clusters.
# 当使用Redis集群时,最大连接数也与集群总线共享:集群中的每个节点将使用两个连接,
# 一个传入,另一个传出。在非常大的簇的情况下,相应地调整限制的大小是很重要的。
# maxclients 10000

################### MEMORY MANAGEMENT ########################

# Set a memory usage limit to the specified amount of bytes.
# When the memory limit is reached Redis will try to remove keys
# according to the eviction policy selected (see maxmemory-policy).
#
# If Redis can\'t remove keys according to the policy, or if the policy is
# set to \'noeviction\', Redis will start to reply with errors to commands
# that would use more memory, like SET, LPUSH, and so on, and will continue
# to reply to read-only commands like GET.
# 将内存使用限制设置为指定的字节数。当达到内存限制时,Redis将根据所选的逐出
# 策略删除密钥(请参阅maxmemory策略)。如果Redis无法根据策略删除密钥,
# 或者如果策略设置为“noeviction”,Redis将开始对使用更多内存的命令(如set、
# LPUSH等)进行错误应答,并继续回复GET等只读命令。
# This option is usually useful when using Redis as an LRU or LFU cache, or to
# set a hard memory limit for an instance (using the \'noeviction\' policy).
# 当将Redis用作LRU或LFU缓存时,或者设置实例的硬内存限制(使用“noeviction”策略)
# 时,此选项通常很有用。
# WARNING: If you have replicas attached to an instance with maxmemory on,
# the size of the output buffers needed to feed the replicas are subtracted
# from the used memory count, so that network problems / resyncs will
# not trigger a loop where keys are evicted, and in turn the output
# buffer of replicas is full with DELs of keys evicted triggering the deletion
# of more keys, and so forth until the database is completely emptied.
# 如果将副本附加到启用了maxmemory的实例,则将从已用内存计数中减去提供副本所需
# 的输出缓冲区的大小,这样网络问题/重新同步将不会触发一个循环,
# 在循环中退出密钥,而副本的输出缓冲区将充满被收回的密钥的增量,
# 从而触发删除操作直到数据库完全清空。
# In short... if you have replicas attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for replica
# output buffers (but this is not needed if the policy is \'noeviction\').
#
# maxmemory <bytes>

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select one from the following behaviors:
# 当达到maxmemory时,Redis将如何选择要删除的内容。
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# 对设置了过期时间的KEY,使用LRU淘汰策略
# allkeys-lru -> Evict any key using approximated LRU. 所有KEY都采用LRU淘汰策略
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# 对设置了过期时间的KEY,使用LFU淘汰策略
# allkeys-lfu -> Evict any key using approximated LFU. 所有KEY都采用LFU淘汰策略
# volatile-random -> Remove a random key having an expire set.
# 对设置了有效期的KEY,随机删除一个KEY
# allkeys-random -> Remove a random key, any key. 随机删除
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# 删除接近过期时间的KEY
# noeviction -> Don\'t evict anything, just return an error on write operations.
# 不淘汰数据,对写操作返回错误
# LRU means Least Recently Used
# LFU means Least Frequently Used
#
# Both LRU, LFU and volatile-ttl are implemented using approximated
# randomized algorithms.
#
# Note: with any of the above policies, Redis will return an error on write
#       operations, when there are no suitable keys for eviction.
# 使用以上任何一种策略,当没有合适的密钥进行逐出时,Redis将在写操作时返回错误
#       At the date of writing these commands are: 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 sort
#
# The default is:
#
# maxmemory-policy noeviction

# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated
# algorithms (in order to save memory), so you can tune it for speed or
# accuracy. For default Redis will check five keys and pick the one that was
# used less recently, you can change the sample size using the following
# configuration directive.
# LRU、LFU和minimal TTL算法不是精确算法,而是近似算法(为了节省内存),
# 因此您可以根据速度或精度对其进行调整。默认情况下Redis将检查五个键并选择
# 最近使用较少的键,可以使用以下配置指令更改样本大小。
# The default of 5 produces good enough results. 10 Approximates very closely
# true LRU but costs more CPU. 3 is faster but not very accurate.
# 默认值为5会产生足够好的结果。10接近真实的LRU,但占用更多的CPU。3更快,但不是很准确。
# maxmemory-samples 5

# Starting from Redis 5, by default a replica will ignore its maxmemory setting
# (unless it is promoted to master after a failover or manually). It means
# that the eviction of keys will be just handled by the master, sending the
# DEL commands to the replica as keys evict in the master side.
# 默认情况下,复制副本将忽略其maxmemory设置(除非在故障转移后或手动将其升级为master)。
# 这意味着密钥的收回将由主服务器处理,将DEL命令作为主机端的密钥收回发送到副本。
# This behavior ensures that masters and replicas stay consistent, and is usually
# what you want, however if your replica is writable, or you want the replica
# to have a different memory setting, and you are sure all the writes performed
# to the replica are idempotent, then you may change this default (but be sure
# to understand what you are doing).
# 此行为可确保主副本和副本保持一致,并且通常是您想要的,但是,如果您的复制副本是可写的,
# 或者您希望复制副本具有不同的内存设置,并且您确定对副本执行
# 的所有写操作都是幂等的,则可以更改此默认值(但一定要了解您正在做什么)。
# Note that since the replica by default does not evict, it may end using more
# memory than the one set via maxmemory (there are certain buffers that may
# be larger on the replica, or data structures may sometimes take more memory
# and so forth). So make sure you monitor your replicas and make sure they
# have enough memory to never hit a real out-of-memory condition before the
# master hits the configured maxmemory setting.
# 请注意,由于复制副本在默认情况下不会逐出,因此它可能会使用比通过maxmemory设置的
# 内存更多的内存(副本上有一些缓冲区可能更大,或者数据结构有时可能占用更多内存等等)。
# 因此,请确保您监视您的副本,并确保它们有足够的内存,在主机
# 命中配置的maxmemory设置之前,它们不会出现内存不足的情况。
# replica-ignore-maxmemory yes

# Redis reclaims expired keys in two ways: upon access when those keys are
# found to be expired, and also in background, in what is called the
# "active expire key". The key space is slowly and interactively scanned
# looking for expired keys to reclaim, so that it is possible to free memory
# of keys that are expired and will never be accessed again in a short time.
# Redis通过两种方式回收过期的密钥:当发现这些密钥过期时在访问时,以及在后台,即所
# 谓的“活动过期密钥”。密钥空间被缓慢地交互扫描,寻找过期的密钥以回收,这样就可以
# 释放过期密钥的内存,而这些密钥在短时间内将永远不会被访问。
# The default effort of the expire cycle will try to avoid having more than
# ten percent of expired keys still in memory, and will try to avoid consuming
# more than 25% of total memory and to add latency to the system. However
# it is possible to increase the expire "effort" that is normally set to
# "1", to a greater value, up to the value "10". At its maximum value the
# system will use more CPU, longer cycles (and technically may introduce
# more latency), and will tollerate less already expired keys still present
# in the system. It\'s a tradeoff betweeen memory, CPU and latecy.
# expire循环的默认工作将尽量避免超过10%的过期密钥仍在内存中,并将尽量避免消耗超过25%的
# 总内存,并增加系统的延迟。但是,可将设置为“1”的expire “effort”增加到更大的值,直到值“10”。
# 在其最大值时,系统将使用更多的CPU、更长的周期(从技术上讲可能会引入更多的延迟),
# 并且能够承受较少的已过期密钥
# active-expire-effort 1

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

# Redis has two primitives to delete keys. One is called DEL and is a blocking
# deletion of the object. It means that the server stops processing new commands
# in order to reclaim all the memory associated with an object in a synchronous
# way. If the key deleted is associated with a small object, the time needed
# in order to execute the DEL command is very small and comparable to most other
# O(1) or O(log_N) commands in Redis. However if the key is associated with an
# aggregated value containing millions of elements, the server can block for
# a long time (even seconds) in order to complete the operation.
# Redis有两种方式来删除密钥。一种叫做DEL,是对对象的阻塞性删除。这意味着服务器停止
# 处理新命令,以便以同步方式回收与对象关联的所有内存。如果删除的密钥与一个小对象关联,
# 则执行DEL命令所需的时间非常小,与Redis中大多数其他O(1)或O(log_N)命令类似。
# 但是,如果密钥与包含数百万个元素的值相关联,则服务器会停止比较长的时间以完成删除操作
# For the above reasons Redis also offers non blocking deletion primitives
# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and
# FLUSHDB commands, in order to reclaim memory in background. Those commands
# are executed in constant time. Another thread will incrementally free the
# object in the background as fast as possible.
# 基于以上原因,Redis还提供了UNLINK(non-blocking DEL)等非阻塞删除原语,
# 以及FLUSHALL和FLUSHDB命令的异步选项,以便在后台回收内存。这些命令在固定
# 时间内执行。另一个线程将以最快的速度增量释放后台的对象。
# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled.
# It\'s up to the design of the application to understand when it is a good
# idea to use one or the other. However the Redis server sometimes has to
# delete keys or flush the whole database as a side effect of other operations.
# Specifically Redis deletes objects independently of a user call in the
# following scenarios:
# FLUSHALL,FLUSHDB,DEL,UNLINK和ASYNC选项由用户控制。这取决于应用程序的
# 设计来理解怎么做比较好。然而,由于某些操作,Redis服务器有时不得不删除密钥或
# 刷新整个数据库。具体来说,在以下情况下,Redis会独立于用户调用删除对象:
# 1) On eviction, because of the maxmemory and maxmemory policy configurations,
#    in order to make room for new data, without going over the specified
#    memory limit.
# 因为maxmemory和maxmemory策略配置,以便为新数据留出空间,而不超过指定的内存限制。
# 2) Because of expire: when a key with an associated time to live (see the
#    EXPIRE command) must be deleted from memory.
# 因为expire:必须从内存中删除具有相关生存时间的密钥
# 3) Because of a side effect of a command that stores data on a key that may
#    already exist. For example the RENAME command may delete the old key
#    content when it is replaced with another one. Similarly SUNIONSTORE
#    or SORT with STORE option may delete existing keys. The SET command
#    itself removes any old content of the specified key in order to replace
#    it with the specified string.
# 因为命令的副作用是将数据存储在可能已经存在的键上。例如,重命名命令可能会
# 删除旧的密钥内容,当它被另一个替换时。类似地,SUNIONSTORE或SORT with 
# STORE选项可能会删除现有的密钥。SET命令本身删除指定键的任何旧内容,
# 以便用指定的字符串替换它。
# 4) During replication, when a replica performs a full resynchronization with
#    its master, the content of the whole database is removed in order to
#    load the RDB file just transferred.
# 在复制过程中,当副本与其主副本执行完全重新同步时,整个数据库的内容将被删除,
# 以便加载刚刚传输的RDB文件。
# In all the above cases the default is to delete objects in a blocking way,
# like if DEL was called. However you can configure each case specifically
# in order to instead release memory in a non-blocking way like if UNLINK
# was called, using the following configuration directives.
# 在上述所有情况下,默认情况是以阻塞方式删除对象,就像调用DEL一样。但是,
# 您可以具体地配置每种情况,以便使用以下配置指令以非阻塞方式释放内存,就像调用UNLINK一样。

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

# It is also possible, for the case when to replace the user code DEL calls
# with UNLINK calls is not easy, to modify the default behavior of the DEL
# command to act exactly like UNLINK, using the following configuration
# directive:
# 在用UNLINK调用替换用户代码DEL调用并不容易的情况下,还可以使用以下配置
# 指令修改DEL命令的默认行为,使其与UNLINK完全相同:

lazyfree-lazy-user-del no

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

# Redis is mostly single threaded, however there are certain threaded
# operations such as UNLINK, slow I/O accesses and other things that are
# performed on side threads.
# Redis主要是单线程的,但是也有一些线程操作,比如UNLINK、缓慢的I/O访问
# 以及其他线程上执行的操作。
# Now it is also possible to handle Redis clients socket reads and writes
# in different I/O threads. Since especially writing is so slow, normally
# Redis users use pipelining in order to speedup the Redis performances per
# core, and spawn multiple instances in order to scale more. Using I/O
# threads it is possible to easily speedup two times Redis without resorting
# to pipelining nor sharding of the instance.
# 现在还可以在不同的I/O线程中处理Redis客户端的套接字读写。由于编速度比较慢,
# 通常Redis用户使用管道来加速每核的Redis性能,并生成多个实例以扩展更多。使用I/O线程,
# 可以轻松地将Redis的速度提高两倍,而无需依赖于管道或实例的分片。
# By default threading is disabled, we suggest enabling it only in machines
# that have at least 4 or more cores, leaving at least one spare core.
# Using more than 8 threads is unlikely to help much. We also recommend using
# threaded I/O only if you actually have performance problems, with Redis
# instances being able to use a quite big percentage of CPU time, otherwise
# there is no point in using this feature.
# 默认情况下,线程被禁用,我们建议只在至少有4个或更多内核的计算机中启用它,
# 并至少保留一个备用内核。使用超过8个线程不大可能有多大帮助。我们还建议仅当
# 您实际存在性能问题时才使用线程I/O,因为Redis实例可以占用相当大比例的CPU时间,
# 否则使用此功能没有任何意义。
# So for instance if you have a four cores boxes, try to use 2 or 3 I/O
# threads, if you have a 8 cores, try to use 6 threads. In order to
# enable I/O threads use the following configuration directive:
# 例如,如果你有一个4核的CPU,尝试使用2或3个I/O线程,如果你有一个8核,
# 尝试使用6个线程。要启用I/O线程,请使用以下配置指令:
# io-threads 4
#
# Setting io-threads to 1 will just use the main thread as usually.
# When I/O threads are enabled, we only use threads for writes, that is
# to thread the write(2) syscall and transfer the client buffers to the
# socket. However it is also possible to enable threading of reads and
# protocol parsing using the following configuration directive, by setting
# it to yes:
# 将io线程设置为1只会像平常一样使用主线程。当启用I/O线程时,我们只使用线程进行写入,
# 即线程write(2)系统调用并将客户机缓冲区传输到套接字。但是,也可以使用以下配置指令
# 启用读取线程和协议解析,方法是将其设置为yes
# io-threads-do-reads no
#
# Usually threading reads doesn\'t help much. 通常线程读取没有多大帮助。
#
# NOTE 1: This configuration directive cannot be changed at runtime via
# CONFIG SET. Aso this feature currently does not work when SSL is
# enabled.
# 无法在运行时通过配置集更改此配置指令。
# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make
# sure you also run the benchmark itself in threaded mode, using the
# --threads option to match the number of Redis theads, otherwise you\'ll not
# be able to notice the improvements.

###################### APPEND ONLY MODE #######################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).
# 默认情况下,Redis异步地将数据集转储到磁盘上。这种模式在许多应用中已经足够好了,
# 但是Redis进程的问题或断电可能会导致几分钟的写操作丢失(取决于配置的保存点)。
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
# AOF是另一种持久性模式,它提供了更好的持久性。例如,如果使用默认的数据
# fsync策略(请参阅配置文件后面的部分),Redis在服务器断电等戏剧性事件中可能只会
# 丢失一秒钟的写入操作,或者如果Redis进程本身发生了问题,但操作系统仍在正常运行,
# 则只会丢失一次写入操作。
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
# AOF和RDB持久性可以同时启用而不会出现问题

以上是关于Redis配置文件解读的主要内容,如果未能解决你的问题,请参考以下文章

redis 的使用 及 配置文件解读

springboot自动配置源码解读以及jdbc和redis配置原理小点

StackExchange.Redis.Extensions.Core 源码解读之 Configuration用法

Ubuntu安装redis,远程连接redis

运维管理redis

非看不可的Redis持久化