redis.conf翻译与配置(五)【redis6.0.6】

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介:
学习redis的途中,碰上了redis.conf,突发奇想,想着来进行一波翻译输出。
源码之前,了无秘密。
在这里插入图片描述

@[toc]

redis集群

原文

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

# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a
# cluster node enable the cluster support uncommenting the following:
#
# cluster-enabled yes

# Every cluster node has a cluster configuration file. This file is not
# intended to be edited by hand. It is created and updated by Redis nodes.
# Every Redis Cluster node requires a different cluster configuration file.
# Make sure that instances running in the same system do not have
# overlapping cluster configuration file names.
#
# cluster-config-file nodes-6379.conf

# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
# Most other internal time limits are multiple of the node timeout.
#
# cluster-node-timeout 15000

# A replica of a failing master will avoid to start a failover if its data
# looks too old.
#
# There is no simple way for a replica to actually have an exact measure of
# its "data age", so the following two checks are performed:
#
# 1) If there are multiple replicas able to failover, they exchange messages
#    in order to try to give an advantage to the replica with the best
#    replication offset (more data from the master processed).
#    Replicas will try to get their rank by offset, and apply to the start
#    of the failover a delay proportional to their rank.
#
# 2) Every single replica computes the time of the last interaction with
#    its master. This can be the last ping or command received (if the master
#    is still in the "connected" state), or the time that elapsed since the
#    disconnection with the master (if the replication link is currently down).
#    If the last interaction is too old, the replica will not try to failover
#    at all.
#
# The point "2" can be tuned by user. Specifically a replica will not perform
# the failover if, since the last interaction with the master, the time
# elapsed is greater than:
#
#   (node-timeout * replica-validity-factor) + repl-ping-replica-period
#
# So for example if node-timeout is 30 seconds, and the replica-validity-factor
# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the
# replica will not try to failover if it was not able to talk with the master
# for longer than 310 seconds.
#
# A large replica-validity-factor may allow replicas with too old data to failover
# a master, while a too small value may prevent the cluster from being able to
# elect a replica at all.
#
# For maximum availability, it is possible to set the replica-validity-factor
# to a value of 0, which means, that replicas will always try to failover the
# master regardless of the last time they interacted with the master.
# (However they'll always try to apply a delay proportional to their
# offset rank).
#
# Zero is the only value able to guarantee that when all the partitions heal
# the cluster will always be able to continue.
#
# cluster-replica-validity-factor 10

# Cluster replicas are able to migrate to orphaned masters, that are masters
# that are left without working replicas. This improves the cluster ability
# to resist to failures as otherwise an orphaned master can't be failed over
# in case of failure if it has no working replicas.
#
# Replicas migrate to orphaned masters only if there are still at least a
# given number of other working replicas for their old master. This number
# is the "migration barrier". A migration barrier of 1 means that a replica
# will migrate only if there is at least 1 other working replica for its master
# and so forth. It usually reflects the number of replicas you want for every
# master in your cluster.
#
# Default is 1 (replicas migrate only if their masters remain with at least
# one replica). To disable migration just set it to a very large value.
# A value of 0 can be set but is useful only for debugging and dangerous
# in production.
#
# cluster-migration-barrier 1

# By default Redis Cluster nodes stop accepting queries if they detect there
# is at least an hash slot uncovered (no available node is serving it).
# This way if the cluster is partially down (for example a range of hash slots
# are no longer covered) all the cluster becomes, eventually, unavailable.
# It automatically returns available as soon as all the slots are covered again.
#
# However sometimes you want the subset of the cluster which is working,
# to continue to accept queries for the part of the key space that is still
# covered. In order to do so, just set the cluster-require-full-coverage
# option to no.
#
# cluster-require-full-coverage yes

# This option, when set to yes, prevents replicas from trying to failover its
# master during master failures. However the master can still perform a
# manual failover, if forced to do so.
#
# This is useful in different scenarios, especially in the case of multiple
# data center operations, where we want one side to never be promoted if not
# in the case of a total DC failure.
#
# cluster-replica-no-failover no

# This option, when set to yes, allows nodes to serve read traffic while the
# the cluster is in a down state, as long as it believes it owns the slots. 
#
# This is useful for two cases.  The first case is for when an application 
# doesn't require consistency of data during node failures or network partitions.
# One example of this is a cache, where as long as the node has the data it
# should be able to serve it. 
#
# The second use case is for configurations that don't meet the recommended  
# three shards but want to enable cluster mode and scale later. A 
# master outage in a 1 or 2 shard configuration causes a read/write outage to the
# entire cluster without this option set, with it set there is only a write outage.
# Without a quorum of masters, slot ownership will not change automatically. 
#
# cluster-allow-reads-when-down no

# In order to setup your cluster make sure to read the documentation
# available at http://redis.io web site.

译文

普通的Redis实例不能成为Redis集群的一部分,只有作为集群节点启动的节点可以。为了启动一个有集群支持的Redis实例,可以把下面这行取消注释:

# cluster-enabled yes

每个集群节点都有一个集群配置文件。此文件不用于手工编辑。它是由Redis节点创建和更新的。
每个集群节点的配置文件都不一样。
确保同一系统下的任意两集群节点的集群配置文件不重名。
如:

# cluster-config-file nodes-6379.conf

群集节点超时是指一个节点无法被访问的毫秒数,从而将其视为处于故障状态。大多数其他内部时间限制是节点超时的多倍。

# cluster-node-timeout 15000

如果发生故障的主机的数据看起来太旧,它的副本将避免启动故障转移。
没有一种简单的方法可以让副本真正精确地测量它的“数据年龄”,因此执行以下两个检查:

1)如果有多个副本可以进行故障转移,它们会交换消息,使副本具有最好的复制偏移(更多来自主处理的数据)。副本将尝试通过偏移量获得它们的级别,并对故障转移的启动应用与它们的级别成比例的延迟。

2)每个副本计算最后一次与主机交互的时间。这可以是接收到的最后一个ping或命令(如果主服务器仍然处于“connected”状态),或者是自与主服务器断开连接以来所经过的时间(如果复制链接当前处于关闭状态)。
如果最后一个交互太久远,副本根本不会尝试故障转移。

第二点可以由使用者调优。具体来说,如果自上次与主服务器交互以来,经过的时间大于:# (node-timeout * replica-validity-factor) + repl-ping-replica-period
因此,例如,如果node-timeout为30秒,复制有效性因子(replica-validity-factor)为10,并假设默认的repl-ping-replica-period为10秒,那么如果副本无法与主服务器对话的时间超过310秒,则不会尝试进行故障转移。

较大的副本有效性因子可能会使数据太旧的副本无法转移主服务器,而太小的值可能会使集群根本无法选择副本。

为了获得最大的可用性,可以将副本有效性因子设置为0,这意味着副本将始终尝试对主服务器进行故障转移,而不管它们上一次与主服务器交互是什么时候。(然而,他们总是试图应用一个与他们的偏移秩成比例的延迟)。
0是唯一能够保证所有分区恢复后集群始终能够继续运行的值。

集群副本能够迁移到孤立的主服务器,即没有工作副本的主服务器。这提高了集群抵抗故障的能力,否则,在出现故障时,如果孤立的主服务器没有工作副本,则无法进行故障转移。

只有当它们的旧主服务器仍然至少有给定数量的其他工作副本时,副本才会迁移到孤立的主服务器。这个数字就是“迁移障碍”。迁移障碍为1意味着一个副本只有在其主副本至少有1个工作副本时才会迁移,以此类推。它通常反映集群中每个主服务器所需的副本数量。

默认值是1(只有当它们的主副本保留至少一个副本时,副本才会迁移)。要禁用迁移,只需将其设置为一个非常大的值。
可以设置值0,但这只对调试有用,在生产中会有危险。

默认情况下,如果Redis集群节点检测到至少有一个散列槽未覆盖(没有可用节点为其服务),则停止接受查询。

这样,如果集群部分关闭(例如不再覆盖一段散列槽),那么最终所有集群都将不可用。当所有插槽再次被覆盖时,它自动返回可用。

但是,有时您希望正在工作的集群子集继续接受仍然覆盖的键空间部分的查询。为此,只需将cluster-require-full-coverage选项设置为no。

# cluster-require-full-coverage yes

当将此选项设置为yes时,可防止副本在主服务器出现故障时试图转移其主服务器。但是,如果被迫,主服务器仍然可以执行手动故障转移。
这在不同的场景中非常有用,特别是在多个数据中心操作的情况下,如果在完全DC故障的情况下,我们希望其中一侧永远不会得到提升。

# cluster-replica-no-failover no

当将此选项设置为yes时,只要集群认为自己拥有这些槽,就允许节点在集群处于down状态时提供读流量。

这在两种情况下有用。

第一种情况是应用程序在节点故障或网络分区期间不需要数据一致性。
其中一个例子就是缓存,只要节点拥有数据,它就应该能够提供数据。

第二个用例用于不满足推荐的三个切分,但希望启用集群模式并稍后扩展的配置。1或2分片配置中的主中断会导致整个集群在没有设置此选项的情况下出现读/写中断,设置此选项后,只有写中断。没有主控的法定人数,插槽所有权将不会自动更改。
# cluster-allow-reads-when-down no

为了设置您的集群,请阅读http://redis.io网站提供的文档


集群 DOCKER/NAT 支持

原文

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

# In certain deployments, Redis Cluster nodes address discovery fails, because
# addresses are NAT-ted or because ports are forwarded (the typical case is
# Docker and other containers).
#
# In order to make Redis Cluster working in such environments, a static
# configuration where each node knows its public address is needed. The
# following two options are used for this scope, and are:
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port
#
# Each instruct the node about its address, client port, and cluster message
# bus port. The information is then published in the header of the bus packets
# so that other nodes will be able to correctly map the address of the node
# publishing the information.
#
# If the above options are not used, the normal Redis Cluster auto-detection
# will be used instead.
#
# Note that when remapped, the bus port may not be at the fixed offset of
# clients port + 10000, so you can specify any port and bus-port depending
# on how they get remapped. If the bus-port is not set, a fixed offset of
# 10000 will be used as usually.
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

译文

在某些部署中,Redis集群节点地址发现失败,原因是地址是NAT的,或者是端口被转发(典型的情况是Docker和其他容器)。
为了让Redis集群在这样的环境下工作,需要一个静态配置,每个节点都知道自己的公共地址。以下两个选项用于此范围,它们是:

# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port

每个节点指示其地址、客户端端口和集群消息总线端口。然后在总线包的头中发布信息,以便其他节点能够正确地映射发布信息的节点的地址。
如果不使用以上选项,将使用正常的Redis集群自动检测代替。

请注意,在重新映射时,总线端口可能不在客户端端口+ 10000的固定偏移量处,因此您可以根据重新映射的方式指定任何端口和总线端口。如果总线端口没有设置,则通常使用10000的固定偏移量。

例如

# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

慢查询日志

原文

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

# The Redis Slow Log is a system to log queries that exceeded a specified
# execution time. The execution time does not include the I/O operations
# like talking with the client, sending the reply and so forth,
# but just the time needed to actually execute the command (this is the only
# stage of command execution where the thread is blocked and can not serve
# other requests in the meantime).
#
# You can configure the slow log with two parameters: one tells Redis
# what is the execution time, in microseconds, to exceed in order for the
# command to get logged, and the other parameter is the length of the
# slow log. When a new command is logged the oldest one is removed from the
# queue of logged commands.

# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
slowlog-log-slower-than 10000

# There is no limit to this length. Just be aware that it will consume memory.
# You can reclaim memory used by the slow log with SLOWLOG RESET.
slowlog-max-len 128

译文

Redis慢日志是一个记录超过指定执行时间的查询的系统。执行时间不包括I / O操作,比如与客户端,发送应答等等,但就实际执行命令所需的时间(这是命令执行的唯一阶段,线程被阻塞,不能同时为其他请求服务)。

你可以用两个参数来配置慢日志:一个参数告诉Redis执行时间(以微秒为单位),以便命令能够被记录下来,另一个参数是慢日志的长度。记录新命令时,将从已记录的命令队列中删除最老的命令。

下面的时间用微秒表示,所以1000000等于一秒。注意,负数禁用慢日志,而值为0则强制记录每个命令。

slowlog-log-slower-than 10000

这个长度没有限制。只是要知道它会消耗内存。使用SLOWLOG复位,您可以回收慢日志使用的内存。

slowlog-max-len 128

延迟监控

原文

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

# The Redis latency monitoring subsystem samples different operations
# at runtime in order to collect data related to possible sources of
# latency of a Redis instance.
#
# Via the LATENCY command this information is available to the user that can
# print graphs and obtain reports.
#
# The system only logs operations that were performed in a time equal or
# greater than the amount of milliseconds specified via the
# latency-monitor-threshold configuration directive. When its value is set
# to zero, the latency monitor is turned off.
#
# By default latency monitoring is disabled since it is mostly not needed
# if you don't have latency issues, and collecting data has a performance
# impact, that while very small, can be measured under big load. Latency
# monitoring can easily be enabled at runtime using the command
# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
latency-monitor-threshold 0

译文

Redis延迟监控子系统在运行时对不同的操作进行采样,以便收集Redis实例延迟可能来源的相关数据。
通过延迟命令,用户可以通过打印图形和获取报告获得这些信息。

系统只记录在时间等于或大于通过延迟监视器阈值配置指令指定的毫秒数的时间内执行的操作。当它的值设置为0时,将关闭延迟监视器。

默认情况下,延迟监视是禁用的,因为如果没有延迟问题,那么通常不需要进行延迟监视,而且收集数据会对性能产生影响,尽管影响很小,但在大负载下可以度量出来。

如果需要,可以在运行时使用命令“CONFIG SET delay -monitor-threshold ”轻松启用延迟监视。


订阅发布

原文

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

# Redis can notify Pub/Sub clients about events happening in the key space.
# This feature is documented at http://redis.io/topics/notifications
#
# For instance if keyspace events notification is enabled, and a client
# performs a DEL operation on key "foo" stored in the Database 0, two
# messages will be published via Pub/Sub:
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# It is possible to select the events that Redis will notify among a set
# of classes. Every class is identified by a single character:
#
#  K     Keyspace events, published with __keyspace@<db>__ prefix.
#  E     Keyevent events, published with __keyevent@<db>__ prefix.
#  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
#  $     String commands
#  l     List commands
#  s     Set commands
#  h     Hash commands
#  z     Sorted set commands
#  x     Expired events (events generated every time a key expires)
#  e     Evicted events (events generated when a key is evicted for maxmemory)
#  t     Stream commands
#  m     Key-miss events (Note: It is not included in the 'A' class)
#  A     Alias for g$lshzxet, so that the "AKE" string means all the events
#        (Except key-miss events which are excluded from 'A' due to their
#         unique nature).
#
#  The "notify-keyspace-events" takes as argument a string that is composed
#  of zero or multiple characters. The empty string means that notifications
#  are disabled.
#
#  Example: to enable list and generic events, from the point of view of the
#           event name, use:
#
#  notify-keyspace-events Elg
#
#  Example 2: to get the stream of the expired keys subscribing to channel
#             name __keyevent@0__:expired use:
#
#  notify-keyspace-events Ex
#
#  By default all notifications are disabled because most users don't need
#  this feature and the feature has some overhead. Note that if you don't
#  specify at least one of K or E, no events will be delivered.
notify-keyspace-events ""

译文

Redis可以通知Pub/Sub客户端在key space发生的事件,该特性在http://redis.io/topics/notifications上可以找到

例如,如果启用了keyspace事件通知,客户端对数据库0中存储的key "foo"执行DEL操作,将通过Pub/Sub发布两条消息:

# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo

可以在一组类中选择Redis将通知的事件。每个类都由一个字符标识:

#  K     Keyspace 命令, 以__keystpace@<db>__ 前缀发布.
#  E     Keyevent 命令, 以__keyevent@<db>__ 前缀发布.
#  g     Generic 命令(non-type specific) like DEL, EXPIRE, RENAME, ...
#  $     String 命令
#  l     List 命令
#  s     Set 命令
#  h     Hash 命令
#  z     set排序命令
#  x     过期事件(键每次到期时生成的事件)
#  e     驱逐事件(从maxmemory中驱逐键时生成的事件)
#  t     流命令
#  m     Key-miss 事件(Note: It is not included in the 'A' class)
#  A     g$lshzxet的别名,因此“AKE”字符串表示所有的事件(除了由于其独特性而被排除在“A”之外的键错过事件)。

"notify-keyspace-events"接受一个由0个或多个字符组成的字符串作为参数。空字符串表示禁用通知。

示例:从事件名称的角度来看,要启用列表和通用事件,请使用:

#  notify-keyspace-events Elg

示例2:获取订阅通道名称的过期密钥流__keyevent@0__:过期使用:

#  notify-keyspace-events Ex

默认情况下,所有通知都被禁用,因为大多数用户不需要此功能,而且该功能有一些开销。请注意,如果不指定K或E中的任何一个,则不会传递任何事件。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
29天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
存储 NoSQL Redis
Redis 配置
10月更文挑战第14天
26 1
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
63 1
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
151 0
|
2月前
|
NoSQL Ubuntu Linux
redis的基本安装配置启动使用
redis的基本安装配置启动使用
37 0
|
2月前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
53 0
|
4月前
|
NoSQL Redis 容器
【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
18天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
19天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构