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.8.版本: 6.0 scriptCharset

1.9.版本: 6.0 socketOptions

1.10.版本: 4.3 sslOptions

1.11.版本: 4.3 timeoutOptions

1.12.版本: 5.1 publishOnScheduler

1.13.版本: 5.1.4

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.7.版本: 3.3, 4.1 maxRedirects

2.8.版本: 3.1, 4.1 validateClusterNodeMembership

2.9.版本: 3.3, 4.1

3.请求队列大小和集群


1.客户端选项 pingBeforeActivateConnection

客户端选项允许控制某些特定功能的行为。

客户端选项是不变的。 创建连接时,连接会继承当前选项。 更改选项不会影响现有连接。

client.setOptions(ClientOptions.builder()
                       .autoReconnect(false)
                       .pingBeforeActivateConnection(true)
                       .build());
名称方法默认值

激活连接前先PING

pingBeforeActivateConnection

false

1.1.版本: 3.1, 4.0 autoReconnect

在任何连接可用之前启用初始PING 屏障。 如果为true,则在激活并启用连接之前,每个连接和重新连接都将发出PING 命令并等待其响应。 如果检查失败,则将连接/重新连接视为失败。 重新连接失败的PING会被视为协议错误,如果启用了suspendReconnectOnProtocolFailure ,则可以暂停重新连接。

PING 将验证所连接套接字的另一端是否是行为类似于Redis服务器的服务。

Auto-Reconnect

autoReconnect

true

1.2.版本: 3.1, 4.0 cancelCommandsOnReconnectFailure

控制连接上的自动重新连接行为。 一旦关闭/重置连接而无意关闭它,客户端将尝试重新连接,激活连接并重新发出所有排队的命令。

此标志还具有以下作用:断开连接的连接将拒绝命令并取消它们,但有例外。

在重新连接失败时取消命令

cancelCommandsOnReconnectFailure

false

1.3.版本: 3.1, 4.0 decodeBufferPolicy

如果此标志为true,则在激活序列内重新连接失败时,将取消所有排队的命令。 重新连接本身具有两个阶段:套接字(Socket)连接和协议/连接激活。 如果发生连接超时,连接重置,主机(host)查找失败,这不会影响命令的取消。 相反,如果在激活连接失败之前由于SSL错误或PING导致协议/连接激活失败,则取消排队的命令。

策略如何回收解码缓冲存储器

decodeBufferPolicy

ratio-based at 75%

1.4.版本: 6.0 suspendReconnectOnProtocolFailure

丢弃从解码聚合缓冲区中读取字节以回收内存的策略。 有关可用策略,请参见DecodeBufferPolicies 。 

协议失败时挂起重新连接

suspendReconnectOnProtocolFailure

false (是在3.1中引入的,默认为true)


1.5.版本: 3.1, 4.0 requestQueueSize

如果此标志为true ,则重新连接将在协议错误时暂停。 重新连接本身具有两个阶段:套接字(Socket)连接和协议/连接(protocol/connection)激活。 如果发生连接超时,连接重置,主机( host)查找失败,这不会影响命令的取消。 相反,如果在激活连接失败之前由于SSL错误或PING导致协议/连接激活失败,则取消排队的命令。

可以重新激活重新连接,但是没有公共API可以获取ConnectionWatchdog 实例。

请求队列大小

requestQueueSize

2147483647 (Integer#MAX_VALUE)

1.6.版本: 3.1, 4.0 disconnectedBehavior

控制每个连接请求队列的大小。 如果超过队列大小,则命令调用将导致RedisException。 将requestQueueSize设置为较小的值将在过载或连接处于断开状态时更早导致异常。 较高的值意味着到达边界将花费更长的时间,但是可能有更多的请求排队,并且使用了更多的堆空间。

断开连接行为

disconnectedBehavior

DEFAULT

1.7.版本: 3.1, 4.0 protocolVersion

连接可以以各种方式处于断开状态。 自动连接功能特别允许重新触发在断开连接时排队的命令。 断开连接的行为设置允许对行为进行细粒度的控制。 提供以下设置:

  • DEFAULT: 启用自动重新连接时接受命令,禁用自动重新连接时拒绝命令。
  • ACCEPT_COMMANDS: 接受处于断开状态的命令。
  • REJECT_COMMANDS: 在断开状态下拒绝命令。

协议版本

protocolVersion

Latest/Auto-discovery

1.8.版本: 6.0 scriptCharset

配置要使用的协议版本(RESP2/RESP3)。 将此选项保留为未配置状态会执行协议发现以使用最新的可用协议。

脚本字符集

scriptCharset

UTF-8

1.9.版本: 6.0 socketOptions

用于Luascripts的字符集。

Socket选项

socketOptions

10秒的连接超时,无保持活动状态,无TCP noDelay

1.10.版本: 4.3 sslOptions

用于配置与Redis服务器保持连接的低级套接字(socket )选项的选项。

SSL选项

sslOptions

(none), use JDK defaults

1.11.版本: 4.3 timeoutOptions

配置有关SSL提供程序(JDK/OpenSSL)和键store/trust存储的SSL选项。

Timeout选项

timeoutOptions

Do not timeout commands.

1.12.版本: 5.1 publishOnScheduler

分派命令超时后应用于超时命令的配置命令超时选项(活动连接,断开连接时排队,批处理缓冲区)。 默认情况下,仅在同步API上使用同步超时。

在调度程序上发布反应性信号

publishOnScheduler

Use I/O thread.

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());
名称方法默认值
定期集群拓扑刷新

enablePeriodicRefresh

false

2.1.版本: 3.1, 4.0 refreshPeriod

启用或禁用定期的群集拓扑刷新。 刷新在后台处理。 分区(Redis群集拓扑上的视图)对整个RedisClusterClient 实例(而不是连接)有效。 该客户端创建的所有连接都在一个群集拓扑上运行。

刷新作业会定期执行,运行之间的时间间隔可以使用refreshPeriod设置。 打开启用该作业的第一个连接或通过调用reloadPartitions之后,刷新作业将开始。 通过设置新的客户端选项,可以禁用该作业而不丢弃整个客户端。

集群拓扑刷新周期

refreshPeriod

60 SECONDS

2.2.版本: 3.1, 4.0 enableAdaptiveRefreshTrigger

 

设置刷新作业运行之间的时间间隔。 刷新作业处于活动状态后,无法更改有效间隔。 对该值的更改将被忽略。

自适应集群拓扑刷新

enableAdaptiveRefreshTrigger

(none)

2.3.版本: 4.2 adaptiveRefreshTriggersTimeout

启用选择性自适应拓扑刷新触发器。 自适应刷新触发器根据Redis Cluster操作期间发生的事件启动拓扑视图更新。 自适应触发器可立即刷新拓扑。 这些刷新使用超时来限制速率,因为事件可能会大规模发生。 默认情况下,禁用自适应刷新触发器。 可以启用以下触发器:

MOVED_REDIRECTASK_REDIRECTPERSISTENT_RECONNECTSUNKNOWN_NODE(版本5.1开始)和UNCOVERED_SLOT (版本5.2开始)(另请参见重新连接尝试以进行重新连接触发器)

自适应刷新触发超时

adaptiveRefreshTriggersTimeout

30 SECONDS

2.4.版本: 4.2 refreshTriggersReconnectAttempts

设置两次自适应刷新作业运行之间的超时。 超时内的多个触发器将被忽略,只有第一个启用的触发器会导致拓扑刷新。 刷新作业处于活动状态后,无法更改有效期限。 对该值的更改将被忽略。

重新连接尝试(自适应拓扑刷新触发器)

refreshTriggersReconnectAttempts

5

2.5.版本: 4.2 dynamicRefreshSources

设置PERSISTENT_RECONNECTS 刷新触发器的阈值。 如果重新连接过程尝试至少指定次数的尝试,则基于持久性重新连接的拓扑更新只会导致刷新。 第一次重新连接尝试从1开始。

动态拓扑刷新源

dynamicRefreshSources

true

2.6.版本: 4.2 closeStaleConnections

从拓扑发现群集节点,并且仅将发现的节点用作群集拓扑的源。 使用动态刷新将查询所有发现的节点以获取集群拓扑详细信息。 如果设置为false,则仅将初始种子节点用作拓扑发现的源,并且仅针对初始种子节点获得客户端的数量。 当将Redis Cluster与许多节点一起使用时,此功能很有用。

请注意,启用动态拓扑刷新源将使用CLUSTER NODES输出报告的节点地址,该节点地址通常包含IP地址。

关闭旧的连接

closeStaleConnections

true

2.7.版本: 3.3, 4.1 maxRedirects

旧连接是到节点的现有连接,这些节点不再是Redis群集的一部分。 如果此标志设置为true,则在拓扑刷新时将关闭陈旧的连接。 强烈建议你关闭旧的连接,因为如果该节点不再可用并且打开的连接需要系统资源,则打开的连接将尝试重新连接节点。

集群重定向的限制

maxRedirects

5

2.8.版本: 3.1, 4.1 validateClusterNodeMembership

当插槽哈希的分配在Redis群集中移动并且客户端请求位于移动的插槽哈希上的键时,群集节点将以-MOVED响应进行响应。 在这种情况下,客户端遵循重定向并查询在重定向内指定的群集。 在某些情况下,重定向可能是无止境的。 为了保护客户端以及群集,可以配置最大重定向的限制。 达到限制后,-MOVED错误将返回给调用方。 如果插槽设置为MIGRATING 状态,此限制也适用于-ASK重定向。

验证集群节点成员身份

validateClusterNodeMembership

true

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)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值