Redis【有与无】【Lettuce】L6.客户端选项
本文章基于Redis 6.0.9版本,Lettuce 6.0.1.RELEASE版本
目录
1.客户端选项 pingBeforeActivateConnection
1.1.版本: 3.1, 4.0 autoReconnect
1.2.版本: 3.1, 4.0 cancelCommandsOnReconnectFailure
1.3.版本: 3.1, 4.0 decodeBufferPolicy
1.4.版本: 6.0 suspendReconnectOnProtocolFailure
1.5.版本: 3.1, 4.0 requestQueueSize
1.6.版本: 3.1, 4.0 disconnectedBehavior
1.7.版本: 3.1, 4.0 protocolVersion
1.12.版本: 5.1 publishOnScheduler
2.群集特定的选项 enablePeriodicRefresh
2.1.版本: 3.1, 4.0 refreshPeriod
2.2.版本: 3.1, 4.0 enableAdaptiveRefreshTrigger
2.3.版本: 4.2 adaptiveRefreshTriggersTimeout
2.4.版本: 4.2 refreshTriggersReconnectAttempts
2.5.版本: 4.2 dynamicRefreshSources
2.6.版本: 4.2 closeStaleConnections
2.8.版本: 3.1, 4.1 validateClusterNodeMembership
1.客户端选项 pingBeforeActivateConnection
客户端选项允许控制某些特定功能的行为。
客户端选项是不变的。 创建连接时,连接会继承当前选项。 更改选项不会影响现有连接。
client.setOptions(ClientOptions.builder()
.autoReconnect(false)
.pingBeforeActivateConnection(true)
.build());
名称 | 方法 | 默认值 |
---|---|---|
**连接前先PING |
|
|
1.1.版本: 3.1, 4.0 autoReconnect
在任何连接可用之前启用初始PING
屏障。 如果为true
,则在**并启用连接之前,每个连接和重新连接都将发出PING
命令并等待其响应。 如果检查失败,则将连接/重新连接视为失败。 重新连接失败的PING
会被视为协议错误,如果启用了suspendReconnectOnProtocolFailure
,则可以暂停重新连接。
PING
将验证所连接套接字的另一端是否是行为类似于Redis服务器的服务。
Auto-Reconnect |
|
|
1.2.版本: 3.1, 4.0 cancelCommandsOnReconnectFailure
控制连接上的自动重新连接行为。 一旦关闭/重置连接而无意关闭它,客户端将尝试重新连接,**连接并重新发出所有排队的命令。
此标志还具有以下作用:断开连接的连接将拒绝命令并取消它们,但有例外。
在重新连接失败时取消命令 |
|
|
1.3.版本: 3.1, 4.0 decodeBufferPolicy
如果此标志为true
,则在**序列内重新连接失败时,将取消所有排队的命令。 重新连接本身具有两个阶段:套接字(Socket)连接和协议/连接**。 如果发生连接超时,连接重置,主机(host)查找失败,这不会影响命令的取消。 相反,如果在**连接失败之前由于SSL错误或PING导致协议/连接**失败,则取消排队的命令。
策略如何回收解码缓冲存储器 |
|
|
1.4.版本: 6.0 suspendReconnectOnProtocolFailure
丢弃从解码聚合缓冲区中读取字节以回收内存的策略。 有关可用策略,请参见DecodeBufferPolicies
。
协议失败时挂起重新连接 |
|
|
1.5.版本: 3.1, 4.0 requestQueueSize
如果此标志为true
,则重新连接将在协议错误时暂停。 重新连接本身具有两个阶段:套接字(Socket)连接和协议/连接(protocol/connection)**。 如果发生连接超时,连接重置,主机( host)查找失败,这不会影响命令的取消。 相反,如果在**连接失败之前由于SSL错误或PING导致协议/连接**失败,则取消排队的命令。
可以重新**重新连接,但是没有公共API可以获取ConnectionWatchdog
实例。
请求队列大小 |
|
|
1.6.版本: 3.1, 4.0 disconnectedBehavior
控制每个连接请求队列的大小。 如果超过队列大小,则命令调用将导致RedisException
。 将requestQueueSize
设置为较小的值将在过载或连接处于断开状态时更早导致异常。 较高的值意味着到达边界将花费更长的时间,但是可能有更多的请求排队,并且使用了更多的堆空间。
断开连接行为 |
|
|
1.7.版本: 3.1, 4.0 protocolVersion
连接可以以各种方式处于断开状态。 自动连接功能特别允许重新触发在断开连接时排队的命令。 断开连接的行为设置允许对行为进行细粒度的控制。 提供以下设置:
-
DEFAULT
: 启用自动重新连接时接受命令,禁用自动重新连接时拒绝命令。 -
ACCEPT_COMMANDS
: 接受处于断开状态的命令。 -
REJECT_COMMANDS
: 在断开状态下拒绝命令。
协议版本 |
|
|
1.8.版本: 6.0 scriptCharset
配置要使用的协议版本(RESP2/RESP3)。 将此选项保留为未配置状态会执行协议发现以使用最新的可用协议。
脚本字符集 |
|
|
1.9.版本: 6.0 socketOptions
用于Luascripts的字符集。
Socket选项 |
|
|
1.10.版本: 4.3 sslOptions
用于配置与Redis服务器保持连接的低级套接字(socket )选项的选项。
SSL选项 |
|
|
1.11.版本: 4.3 timeoutOptions
配置有关SSL提供程序(JDK/OpenSSL)和键store/trust存储的SSL选项。
Timeout选项 |
|
|
1.12.版本: 5.1 publishOnScheduler
分派命令超时后应用于超时命令的配置命令超时选项(活动连接,断开连接时排队,批处理缓冲区)。 默认情况下,仅在同步API上使用同步超时。
在调度程序上发布反应性信号 |
|
|
1.13.版本: 5.1.4
使用专用的Scheduler
发出反应性(reactive)数据信号。 启用此选项对于需要大量处理(具有单个/多个Redis连接)的反应性序列很有用,而性能会受到类似单线程的行为的影响。 启用此选项将使用通过ClientResources
配置的EventExecutorGroup
来获取data/completion信号。 对于单个Publisher
实例,所使用的Thread
在所有信号上均具有粘性。
2.群集特定的选项 enablePeriodicRefresh
群集客户端选项通过某些群集详细信息扩展了常规客户端选项。
群集客户端选项是不可变的。 创建连接时,连接会继承当前选项。 更改选项不会影响现有连接。
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enablePeriodicRefresh(refreshPeriod(10, TimeUnit.MINUTES))
.enableAllAdaptiveRefreshTriggers()
.build();
client.setOptions(ClusterClientOptions.builder()
.topologyRefreshOptions(topologyRefreshOptions)
.build());
名称 | 方法 | 默认值 |
---|---|---|
定期集群拓扑刷新 |
|
|
2.1.版本: 3.1, 4.0 refreshPeriod
启用或禁用定期的群集拓扑刷新。 刷新在后台处理。 分区(Redis群集拓扑上的视图)对整个RedisClusterClient
实例(而不是连接)有效。 该客户端创建的所有连接都在一个群集拓扑上运行。
刷新作业会定期执行,运行之间的时间间隔可以使用refreshPeriod
设置。 打开启用该作业的第一个连接或通过调用reloadPartitions
之后,刷新作业将开始。 通过设置新的客户端选项,可以禁用该作业而不丢弃整个客户端。
集群拓扑刷新周期 |
|
|
2.2.版本: 3.1, 4.0 enableAdaptiveRefreshTrigger
设置刷新作业运行之间的时间间隔。 刷新作业处于活动状态后,无法更改有效间隔。 对该值的更改将被忽略。
自适应集群拓扑刷新 |
|
|
2.3.版本: 4.2 adaptiveRefreshTriggersTimeout
启用选择性自适应拓扑刷新触发器。 自适应刷新触发器根据Redis Cluster操作期间发生的事件启动拓扑视图更新。 自适应触发器可立即刷新拓扑。 这些刷新使用超时来限制速率,因为事件可能会大规模发生。 默认情况下,禁用自适应刷新触发器。 可以启用以下触发器:
MOVED_REDIRECT
, ASK_REDIRECT
, PERSISTENT_RECONNECTS
, UNKNOWN_NODE
(版本5.1开始)和UNCOVERED_SLOT
(版本5.2开始)(另请参见重新连接尝试以进行重新连接触发器)
自适应刷新触发超时 |
|
|
2.4.版本: 4.2 refreshTriggersReconnectAttempts
设置两次自适应刷新作业运行之间的超时。 超时内的多个触发器将被忽略,只有第一个启用的触发器会导致拓扑刷新。 刷新作业处于活动状态后,无法更改有效期限。 对该值的更改将被忽略。
重新连接尝试(自适应拓扑刷新触发器) |
|
|
2.5.版本: 4.2 dynamicRefreshSources
设置PERSISTENT_RECONNECTS
刷新触发器的阈值。 如果重新连接过程尝试至少指定次数的尝试,则基于持久性重新连接的拓扑更新只会导致刷新。 第一次重新连接尝试从1开始。
动态拓扑刷新源 |
|
|
2.6.版本: 4.2 closeStaleConnections
从拓扑发现群集节点,并且仅将发现的节点用作群集拓扑的源。 使用动态刷新将查询所有发现的节点以获取集群拓扑详细信息。 如果设置为false
,则仅将初始种子节点用作拓扑发现的源,并且仅针对初始种子节点获得客户端的数量。 当将Redis Cluster与许多节点一起使用时,此功能很有用。
请注意,启用动态拓扑刷新源将使用CLUSTER NODES
输出报告的节点地址,该节点地址通常包含IP地址。
关闭旧的连接 |
|
|
2.7.版本: 3.3, 4.1 maxRedirects
旧连接是到节点的现有连接,这些节点不再是Redis群集的一部分。 如果此标志设置为true
,则在拓扑刷新时将关闭陈旧的连接。 强烈建议你关闭旧的连接,因为如果该节点不再可用并且打开的连接需要系统资源,则打开的连接将尝试重新连接节点。
集群重定向的限制 |
|
|
2.8.版本: 3.1, 4.1 validateClusterNodeMembership
当插槽哈希的分配在Redis群集中移动并且客户端请求位于移动的插槽哈希上的键时,群集节点将以-MOVED
响应进行响应。 在这种情况下,客户端遵循重定向并查询在重定向内指定的群集。 在某些情况下,重定向可能是无止境的。 为了保护客户端以及群集,可以配置最大重定向的限制。 达到限制后,-MOVED
错误将返回给调用方。 如果插槽设置为MIGRATING
状态,此限制也适用于-ASK
重定向。
验证集群节点成员身份 |
|
|
2.9.版本: 3.3, 4.1
在允许连接到该节点之前,请验证集群节点成员身份。 当前的实现使用MOVED
和ASK
执行重定向,并允许获得到特定群集节点的连接。 在版本3.3的开发过程中引入了验证,以防止违反安全性,并且仅允许连接到CLUSTER NODES
输出的已知主机(hosts)。
在某些情况下,严格验证是一个障碍:
已进行MOVED
/ASK
重定向,但群集拓扑视图已过时使用不同的IP /主机名(hostname)(例如,private/public IP)连接到群集节点
使用RedisClusterClient连接时,连接到非集群成员以重新配置它们。
3.请求队列大小和集群
群集操作使用多个连接。 最终的总体队列限制为requestQueueSize * ((number of cluster nodes * 2) + 1)
。
下一篇: 如何让div自适应背景图的高度?