All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.lontime.extredisson.configuration.ConnectionOption Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
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;

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy