com.github.lontime.extredisson.configuration.ConnectionOption Maven / Gradle / Ivy
package com.github.lontime.extredisson.configuration;
import java.net.URL;
import java.util.List;
import java.util.Set;
import com.github.lontime.extredisson.common.ClientKind;
import com.github.lontime.extredisson.common.CodecKind;
import lombok.Getter;
import lombok.Setter;
import org.redisson.config.ReadMode;
import org.redisson.config.SslProvider;
import org.redisson.config.SubscriptionMode;
import org.redisson.config.TransportMode;
import org.redisson.connection.balancer.LoadBalancer;
/**
* Redisson Options.
* @author lontime
* @since 1.0
*/
@Getter
@Setter
public class ConnectionOption {
/**
* 选项名字.
*/
private String name;
/**
* 类型.
*/
private ClientKind kind = ClientKind.SYNC;
/**
* 数据库编号.
* 默认值:0
* 尝试连接的数据库编号。
*/
private Integer database;
/**
* 用户名.
*/
private String username;
/**
* 密码.
* 用于节点身份验证的密码。
*/
private String password;
/**
* 客户端名称.
* 在Redis节点里显示的客户端名称。
*/
private String clientName;
/**
* 默认值,string
* Redisson的对象编码类是用于将对象进行序列化和反序列化,
* 以实现对该对象在Redis里的读取和存储
*/
private CodecKind codec = CodecKind.STRING;
/**
* 线程池数量, 默认值: 当前处理核数量 * 2.
* 这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享
*/
private Integer threads;
/**
* Netty线程池数量, 默认值: 当前处理核数量 * 2.
* 这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量
*/
private Integer nettyThreads;
/**
* 线程池.
* 单独提供一个用来执行所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务的线程池(ExecutorService)实例.
*/
private String executor;
/**
* 传输模式.
* 默认值:TransportMode.NIO
* 可选参数:
* TransportMode.NIO,
* TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包(Linux)
* TransportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包(macOS)
*/
private TransportMode transportMode;
/**
* 监控锁的看门狗超时,单位:毫秒.
* 默认值:30000
* 监控锁的看门狗超时时间单位为毫秒。
* 该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。
* 如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,
* 那么这个锁将变为失效状态。
* 这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。
*/
private Integer lockWatchdogTimeout;
/**
* 保持订阅发布顺序.
* 默认值:true
* 通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。
*/
private Boolean keepPubSubOrder;
/**
* 高性能模式.
* 默认值:HIGHER_THROUGHPUT
* 用来指定高性能引擎的行为。由于该变量值的选用与使用场景息息相关(NORMAL除外)我们建议对每个参数值都进行尝试。
* 该参数仅限于Redisson PRO版本。
*
* 可选模式:
* HIGHER_THROUGHPUT - 将高性能引擎切换到 高通量 模式。
* LOWER_LATENCY_AUTO - 将高性能引擎切换到 低延时 模式并自动探测最佳设定。
* LOWER_LATENCY_MODE_1 - 将高性能引擎切换到 低延时 模式并调整到预设模式1。
* LOWER_LATENCY_MODE_2 - 将高性能引擎切换到 低延时 模式并调整到预设模式2。
* NORMAL - 将高性能引擎切换到 普通 模式
*/
private String performanceMode;
/**
* 启用SSL终端识别.
* 默认值:true
* 开启SSL终端识别能力。
*/
private Boolean sslEnableEndpointIdentification;
/**
* SSL协议.
*/
private List sslProtocols;
/**
* SSL实现方式.
* 默认值:JDK
* 确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。
*/
private SslProvider sslProvider;
/**
* SSL信任证书库路径.
* 默认值:null
* 指定SSL信任证书库的路径。
*/
private URL sslTruststore;
/**
* SSL信任证书库密码.
*/
private String sslTruststorePassword;
/**
* 指定SSL钥匙库的路径。
*/
private URL sslKeystore;
/**
* SSL钥匙库密码。
* 默认值:null
* 指定SSL钥匙库的密码。
*/
private String sslKeystorePassword;
/**
* DNS监测时间间隔,单位:毫秒.
* 默认值:5000
* 监测DNS的变化情况的时间间隔。
*/
private Integer dnsMonitoringInterval;
/**
* desc.
* 默认值: 30000
*/
private Integer pingConnectionInterval;
/**
* desc.
* 默认值: false
*/
private Boolean keepAlive;
/**
* desc.
* 默认值: true
*/
private Boolean tcpNoDelay;
/**
* 连接空闲超时,单位:毫秒.
* 默认值:10000
* 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。
*/
private Integer idleConnectionTimeout;
/**
* 连接超时,单位:毫秒.
* 默认值:10000
* 同节点建立连接时的等待超时。时间单位是毫秒。
*/
private Integer connectTimeout;
/**
* 命令等待超时,单位:毫秒.
* 默认值:3000
* 等待节点回复命令的时间。该时间从命令发送成功时开始计时。
*/
private Integer timeout;
/**
* 命令失败重试次数.
* 默认值:3
* 如果尝试达到 retryAttempts(命令失败重试次数)
* 仍然不能将命令发送至某个指定的节点时,将抛出错误。
* 如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。
*/
private Integer retryAttempts;
/**
* 命令重试发送时间间隔,单位:毫秒.
* 默认值:1500
* 在某个节点执行相同或不同命令时,连续 失败 retryAttempts(执行失败最大次数) 时,
* 该节点将被从可用节点列表里清除,直到 timeout(重新连接时间间隔)
* 超时以后再次尝试。
*/
private Integer retryInterval;
/**
* 单个连接最大订阅数量.
* 默认值:5
* 每个连接的最大订阅数量。
*/
private Integer subscriptionsPerConnection;
/**
* 发布和订阅连接的最小空闲连接数.
* 默认值:1
* 用于发布和订阅连接的最小保持连接数(长连接)。
* Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。
*/
private Integer subscriptionConnectionMinimumIdleSize;
/**
* 发布和订阅连接池大小.
* 默认值:50
* 用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。
*/
private Integer subscriptionConnectionPoolSize;
/**
* 读取操作的负载均衡模式.
* 默认值: SLAVE(只在从服务节点里读取)
* 注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。
* 设置读取操作选择节点的模式。
* 可用值为: SLAVE - 只在从服务节点里读取。
* MASTER - 只在主服务节点里读取。
* MASTER_SLAVE - 在主从服务节点里都可以读取。
*/
private ReadMode readMode;
/**
* 订阅操作的负载均衡模式.
* 默认值:SLAVE(只在从服务节点里订阅)
* 设置订阅操作选择节点的模式。
* 可用值为: SLAVE - 只在从服务节点里订阅。 MASTER - 只在主服务节点里订阅。
*/
private SubscriptionMode subscriptionMode;
/**
* 负载均衡算法类的选择.
* 默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer
*
* 在使用多个Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
* org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
* org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
* org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法
*/
private LoadBalancer loadBalancer;
/**
* Slave失败重新连接时间间隔.
* 默认值: 3000
*/
private Integer failedSlaveReconnectionInterval;
/**
* Slave失败检查时间间隔.
* 默认值: 180000
*/
private Integer failedSlaveCheckInterval;
/**
* 从节点最小空闲连接数.
* 默认值:32
* 多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。
*/
private Integer slaveConnectionMinimumIdleSize;
/**
* 从节点连接池大小.
* 默认值:64
* 多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。
*/
private Integer slaveConnectionPoolSize;
/**
* 主节点最小空闲连接数.
* 默认值:32
* 多从节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。
*/
private Integer masterConnectionMinimumIdleSize;
/**
* 主节点连接池大小.
* 默认值:64
* 主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。
*/
private Integer masterConnectionPoolSize;
/**
* Cluster.
*/
private Cluster cluster;
/**
* Single.
*/
/**
* single 节点地址.
*/
private String address;
/**
* single
* 最小空闲连接数.
* 默认值:32
* 最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。
*/
private Integer connectionMinimumIdleSize;
/**
* single
* 连接池大小.
* 默认值:64
* 在启用该功能以后,Redisson将会监测DNS的变化情况。
*/
private Integer connectionPoolSize;
/**
* Sentinel.
*/
private Sentinel sentinel;
/**
* MasterSlave.
*/
private MasterSlave masterSlave;
@Getter
@Setter
public static class MasterSlave {
/**
* 主节点地址.
* 可以通过host:port的格式来指定主节点地址。
*/
private String masterAddress;
/**
* 添加从主节点地址.
* 可以通过host:port的格式来指定从节点的地址。多个节点可以一次性批量添加。
*/
private Set slaveAddress;
}
@Getter
@Setter
public static class Sentinel {
/**
* 主服务器的名称.
* 主服务器的名称是哨兵进程中用来监测主从服务切换情况的。
*/
private String masterName;
/**
* 添加哨兵节点地址.
* 可以通过host:port的格式来指定哨兵节点的地址。多个节点可以一次性批量添加。
*/
private List sentinelAddress;
/**
* 密码.
*/
private String sentinelPassword;
/**
* 默认值 1000
*/
private Integer scanInterval;
/**
* 默认值 true
*/
private Boolean checkSentinelsList;
/**
* 默认值 true
*/
private Boolean checkSlaveStatusWithSyncing;
/**
* 默认值 true
*/
private Boolean sentinelsDiscovery;
}
@Getter
@Setter
public static class Cluster {
/**
* 添加节点地址.
* 可以通过host:port的格式来添加Redis集群节点的地址。多个节点可以一次性批量添加。
*/
private List nodeAddresses;
/**
* 集群扫描间隔时间.
* 默认值: 1000
* 对Redis集群节点状态扫描的时间间隔。单位是毫秒。.
*/
private Integer scanInterval;
/**
* 检查Slots覆盖率.
* 默认: true
*/
private Boolean checkSlotsCoverage;
/**
* 分片数.
* 默认值: 231
* 用于指定数据分片过程中的分片数量。
* 支持数据分片/框架结构有:集(Set)、映射(Map)、BitSet、Bloom filter, Spring Cache和Hibernate Cache等.
*/
private Integer slots;
}
}