zoukankan      html  css  js  c++  java
  • Redisson官方文档

    Redisson 开发文档

    2.1. 程序化配置方法

    Redisson程序化的配置方法是通过构建Config对象实例来实现的。例如:

    Config config = new Config();
    config.setTransportMode(TransportMode.EPOLL);
    config.useClusterServers()
          //可以用"rediss://"来启用SSL连接
          .addNodeAddress("redis://127.0.0.1:7181");
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2. 文件方式配置

    Redisson既可以通过用户提供的JSON或YAML格式的文本文件来配置,也可以通过含有Redisson专有命名空间的,Spring框架格式的XML文本文件来配置。

    2.2.1 通过JSON或YAML格式配置

    Redisson的配置文件可以是JSON格式或YAML格式。
    可以通过调用Config.fromJSON方法并指定一个File实例来实现读取JSON格式的配置:

    Config config = Config.fromJSON(new File("config-file.json"));
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2

    调用Config.toJSON方法可以将一个Config配置实例序列化为一个含有JSON数据类型的字符串:

    Config config = new Config();
    // ... 省略许多其他的设置
    String jsonFormat = config.toJSON();
    
    • 1
    • 2
    • 3

    也通过调用config.fromYAML方法并指定一个File实例来实现读取YAML格式的配置:

    Config config = Config.fromYAML(new File("config-file.yaml"));
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2

    调用config.toYAML方法可以将一个Config配置实例序列化为一个含有YAML数据类型的字符串:

    Config config = new Config();
    // ... 省略许多其他的设置
    String jsonFormat = config.toYAML();
    
    • 1
    • 2
    • 3

    2.2.2 通过Spring XML命名空间配置

    Redisson为Spring框架提供了一套通过命名空间来配置实例的方式。

    一个Redisson的实例可以通过这样的方式来配置:

    <redisson:client>
        <redisson:single-server ... />
        <!-- 或者 -->
        <redisson:master-slave-servers ... />
        <!-- 或者 -->
        <redisson:sentinel-servers ... />
        <!-- 或者 -->
        <redisson:cluster-servers ... />
        <!-- 或者 -->
        <redisson:replicated-servers ... />
    </redisson:client>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    更多的使用方法请前往第三方框架整合文档了解。有关各种连接方式的详细配置请继续本文阅读。

    2.3. 常用设置

    以下是关于org.redisson.Config类的配置参数,它适用于所有Redis组态模式(单机,集群和哨兵)

    codec(编码)

    默认值: org.redisson.codec.JsonJacksonCodec

    Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。Redisson提供了以下几种的对象编码应用,以供大家选择:

    编码类名称说明
    org.redisson.codec.JsonJacksonCodec Jackson JSON 编码 默认编码
    org.redisson.codec.AvroJacksonCodec Avro 一个二进制的JSON编码
    org.redisson.codec.SmileJacksonCodec Smile 另一个二进制的JSON编码
    org.redisson.codec.CborJacksonCodec CBOR 又一个二进制的JSON编码
    org.redisson.codec.MsgPackJacksonCodec MsgPack 再来一个二进制的JSON编码
    org.redisson.codec.IonJacksonCodec Amazon Ion 亚马逊的Ion编码,格式与JSON类似
    org.redisson.codec.KryoCodec Kryo 二进制对象序列化编码
    org.redisson.codec.SerializationCodec JDK序列化编码
    org.redisson.codec.FstCodec FST 10倍于JDK序列化性能而且100%兼容的编码
    org.redisson.codec.LZ4Codec LZ4 压缩型序列化对象编码
    org.redisson.codec.SnappyCodec Snappy 另一个压缩型序列化对象编码
    org.redisson.client.codec.JsonJacksonMapCodec 基于Jackson的映射类使用的编码。可用于避免序列化类的信息,以及用于解决使用byte[]遇到的问题。
    org.redisson.client.codec.StringCodec 纯字符串编码(无转换)
    org.redisson.client.codec.LongCodec 纯整长型数字编码(无转换)
    org.redisson.client.codec.ByteArrayCodec 字节数组编码
    org.redisson.codec.CompositeCodec 用来组合多种不同编码在一起
    threads(线程池数量)

    默认值: 当前处理核数量 * 2

    这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。

    nettyThreads (Netty线程池数量)

    默认值: 当前处理核数量 * 2

    这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。

    executor(线程池)

    单独提供一个用来执行所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务的线程池(ExecutorService)实例。

    eventLoopGroup

    用于特别指定一个EventLoopGroup. EventLoopGroup是用来处理所有通过Netty与Redis服务之间的连接发送和接受的消息。每一个Redisson都会在默认情况下自己创建管理一个EventLoopGroup实例。因此,如果在同一个JVM里面可能存在多个Redisson实例的情况下,采取这个配置实现多个Redisson实例共享一个EventLoopGroup的目的。

    只有io.netty.channel.epoll.EpollEventLoopGroupio.netty.channel.nio.NioEventLoopGroup才是允许的类型。

    transportMode(传输模式)

    默认值:TransportMode.NIO

    可选参数:
    TransportMode.NIO,
    TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包(Linux)
    TransportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包(macOS)

    lockWatchdogTimeout(监控锁的看门狗超时,单位:毫秒)

    默认值:30000

    监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。

    keepPubSubOrder(保持订阅发布顺序)

    默认值:true

    通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。

    performanceMode(高性能模式)

    默认值:HIGHER_THROUGHPUT

    用来指定高性能引擎的行为
    该参数仅限于Redisson PRO版本。

    可选模式:
    HIGHER_THROUGHPUT - 将高性能引擎切换到 高通量 模式。
    LOWER_LATENCY - 将高性能引擎切换到 低延时 模式 。

    2.4. 集群模式

    集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式,例如AWS ElastiCache集群版、Azure Redis Cache和阿里云(Aliyun)的云数据库Redis版。

    程序化配置集群的用法:

    Config config = new Config();
    config.useClusterServers()
        .setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒
        //可以用"rediss://"来启用SSL连接
        .addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
        .addNodeAddress("redis://127.0.0.1:7002");
    
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.4.1. 集群设置

    介绍配置Redis集群组态的文档在这里。 Redis集群组态的最低要求是必须有三个主节点。Redisson的集群模式的使用方法如下:

    ClusterServersConfig clusterConfig = config.useClusterServers();
    
    • 1

    ClusterServersConfig 类的设置参数如下:

    nodeAddresses(添加节点地址)

    可以通过host:port的格式来添加Redis集群节点的地址。多个节点可以一次性批量添加。

    scanInterval(集群扫描间隔时间)

    默认值: 1000

    对Redis集群节点状态扫描的时间间隔。单位是毫秒。

    readMode(读取操作的负载均衡模式)

    默认值: SLAVE(只在从服务节点里读取)

    注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。

    设置读取操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里读取。
    MASTER - 只在主服务节点里读取。
    MASTER_SLAVE - 在主从服务节点里都可以读取。

    subscriptionMode(订阅操作的负载均衡模式)

    默认值:SLAVE(只在从服务节点里订阅)

    设置订阅操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里订阅。
    MASTER - 只在主服务节点里订阅。

    loadBalancer(负载均衡算法类的选择)

    默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer

    在多Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
    org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
    org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
    org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法

    subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)

    默认值:1

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)

    默认值:50

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    slaveConnectionMinimumIdleSize(从节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。

    slaveConnectionPoolSize(从节点连接池大小)

    默认值:64

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    masterConnectionMinimumIdleSize(主节点最小空闲连接数)

    默认值:32

    多节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    masterConnectionPoolSize(主节点连接池大小)

    默认值:64

    多主节点的环境里,每个 主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同任何节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.4.2. 通过JSON、YAML和Spring XML文件配置集群模式

    配置集群模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与ClusterServersConfigConfig对象里的字段名称相符。

    {
       "clusterServersConfig":{
          "idleConnectionTimeout":10000,
          "pingTimeout":1000,
          "connectTimeout":10000,
          "timeout":3000,
          "retryAttempts":3,
          "retryInterval":1500,
          "reconnectionTimeout":3000,
          "failedAttempts":3,
          "password":null,
          "subscriptionsPerConnection":5,
          "clientName":null,
          "loadBalancer":{
             "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
          },
          "slaveSubscriptionConnectionMinimumIdleSize":1,
          "slaveSubscriptionConnectionPoolSize":50,
          "slaveConnectionMinimumIdleSize":32,
          "slaveConnectionPoolSize":64,
          "masterConnectionMinimumIdleSize":32,
          "masterConnectionPoolSize":64,
          "readMode":"SLAVE",
          "nodeAddresses":[
             "redis://127.0.0.1:7004",
             "redis://127.0.0.1:7001",
             "redis://127.0.0.1:7000"
          ],
          "scanInterval":1000
       },
       "threads":0,
       "nettyThreads": 0,
       "codec":null,
       "transportMode":"NIO"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    配置集群模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与ClusterServersConfigConfig对象里的字段名称相符。

    ---
    clusterServersConfig:
      idleConnectionTimeout: 10000
      pingTimeout: 1000
      connectTimeout: 10000
      timeout: 3000
      retryAttempts: 3
      retryInterval: 1500
      reconnectionTimeout: 3000
      failedAttempts: 3
      password: null
      subscriptionsPerConnection: 5
      clientName: null
      loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
      slaveSubscriptionConnectionMinimumIdleSize: 1
      slaveSubscriptionConnectionPoolSize: 50
      slaveConnectionMinimumIdleSize: 32
      slaveConnectionPoolSize: 64
      masterConnectionMinimumIdleSize: 32
      masterConnectionPoolSize: 64
      readMode: "SLAVE"
      nodeAddresses:
      - "redis://127.0.0.1:7004"
      - "redis://127.0.0.1:7001"
      - "redis://127.0.0.1:7000"
      scanInterval: 1000
    threads: 0
    nettyThreads: 0
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    "transportMode":"NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置集群模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与ClusterServersConfigConfig对象里的字段名称相符。

    <redisson:client
        id="redisson"
        name="redisson1,redisson2"
        threads="0"
        netty-threads="0"
        codec-ref="myCodec" 
        use-linux-native-epoll="false"
        redisson-reference-enabled="true"
        codec-provider-ref="myCodecProvider"
        resolver-provider-ref="myResolverProvider"
        executor-ref="myExecutor"
        event-loop-group-ref="myEventLoopGroup"
    >
        <!--
        这里的name属性和qualifier子元素不能同时使用。
    
        id和name的属性都可以被用来作为qualifier的备选值。
        -->
        <!--<qualifier value="redisson3"/>-->
        <redisson:cluster-servers
            idle-connection-timeout="10000"
            ping-timeout="1000"
            connect-timeout="10000"
            timeout="3000"
            retry-attempts="3"
            retry-interval="1500"
            reconnection-timeout="3000"
            failed-attempts="3"
            password="do_not_use_if_it_is_not_set"
            subscriptions-per-connection="5"
            client-name="none"
            load-balancer-ref="myLoadBalancer"
            subscription-connection-minimum-idle-size="1"
            subscription-connection-pool-size="50"
            slave-connection-minimum-idle-size="10"
            slave-connection-pool-size="64"
            master-connection-minimum-idle-size="10"
            master-connection-pool-size="64"
            read-mode="SLAVE"
            subscription-mode="SLAVE"
            scan-interval="1000"
        >
            <redisson:node-address value="redis://127.0.0.1:6379" />
            <redisson:node-address value="redis://127.0.0.1:6380" />
            <redisson:node-address value="redis://127.0.0.1:6381" />
        </redisson:cluster-servers>
    </redisson:client>
    
    <!-- 最基本配置 -->
    <redisson:client>
        <redisson:cluster-servers>
            <redisson:node-address value="redis://127.0.0.1:6379" />
            <redisson:node-address value="redis://127.0.0.1:6380" />
            <redisson:node-address value="redis://127.0.0.1:6381" />
            ...
        </redisson:cluster-servers>
    </redisson:client>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    2.5. 云托管模式

    云托管模式适用于任何由云计算运营商提供的Redis云服务,包括亚马逊云的AWS ElastiCache、微软云的Azure Redis 缓存阿里云(Aliyun)的云数据库Redis版

    程序化配置云托管模式的方法如下:

    Config config = new Config();
    config.useReplicatedServers()
        .setScanInterval(2000) // 主节点变化扫描间隔时间
        //可以用"rediss://"来启用SSL连接
        .addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")
        .addNodeAddress("redis://127.0.0.1:7002");
    
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.5.1. 云托管模式设置

    Redisson的云托管模式的使用方法如下:
    ReplicatedServersConfig replicatedConfig = config.useReplicatedServers();

    ReplicatedServersConfig 类的设置参数如下:

    nodeAddresses(节点地址)

    可以通过host:port的格式来指定云托管模式的多个Redis集群节点的地址。多个节点可以一次性批量添加。所有的主从节点必须在配置阶段全部体现出来。

    scanInterval(主节点变化扫描间隔时间)

    默认值: 1000

    对主节点变化节点状态扫描的时间间隔。单位是毫秒。

    loadBalancer(负载均衡算法类的选择)

    默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer

    在使用多个Elasticache Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
    org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
    org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
    org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法

    dnsMonitoringInterval(DNS监控间隔,单位:毫秒)

    默认值:5000

    用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。

    subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)

    默认值:1

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)

    默认值:50

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    slaveConnectionMinimumIdleSize(从节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。

    slaveConnectionPoolSize(从节点连接池大小)

    默认值:64

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    masterConnectionMinimumIdleSize(主节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    masterConnectionPoolSize(主节点连接池大小)

    默认值:64

    主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    readMode(读取操作的负载均衡模式)

    默认值: SLAVE(只在从服务节点里读取)

    注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。

    设置读取操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里读取。
    MASTER - 只在主服务节点里读取。
    MASTER_SLAVE - 在主从服务节点里都可以读取。

    subscriptionMode(订阅操作的负载均衡模式)

    默认值:SLAVE(只在从服务节点里订阅)

    设置订阅操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里订阅。
    MASTER - 只在主服务节点里订阅。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同任何节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    database(数据库编号)

    默认值:0

    尝试连接的数据库编号。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.5.2. 通过JSON、YAML和Spring XML文件配置云托管模式

    配置云托管模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与ReplicatedServersConfigConfig对象里的字段名称相符。

    {
       "replicatedServersConfig":{
          "idleConnectionTimeout":10000,
          "pingTimeout":1000,
          "connectTimeout":10000,
          "timeout":3000,
          "retryAttempts":3,
          "retryInterval":1500,
          "reconnectionTimeout":3000,
          "failedAttempts":3,
          "password":null,
          "subscriptionsPerConnection":5,
          "clientName":null,
          "loadBalancer":{
             "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
          },
          "slaveSubscriptionConnectionMinimumIdleSize":1,
          "slaveSubscriptionConnectionPoolSize":50,
          "slaveConnectionMinimumIdleSize":32,
          "slaveConnectionPoolSize":64,
          "masterConnectionMinimumIdleSize":32,
          "masterConnectionPoolSize":64,
          "readMode":"SLAVE",
          "nodeAddresses":[
             "redis://127.0.0.1:2812",
             "redis://127.0.0.1:2815",
             "redis://127.0.0.1:2813"
          ],
          "scanInterval":1000,
       },
       "threads":0,
       "nettyThreads":0,
       "codec":null,
       "transportMode":"NIO"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    配置云托管模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与ReplicatedServersConfigConfig对象里的字段名称相符。

    ---
    replicatedServersConfig:
      idleConnectionTimeout: 10000
      pingTimeout: 1000
      connectTimeout: 10000
      timeout: 3000
      retryAttempts: 3
      retryInterval: 1500
      reconnectionTimeout: 3000
      failedAttempts: 3
      password: null
      subscriptionsPerConnection: 5
      clientName: null
      loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
      slaveSubscriptionConnectionMinimumIdleSize: 1
      slaveSubscriptionConnectionPoolSize: 50
      slaveConnectionMinimumIdleSize: 32
      slaveConnectionPoolSize: 64
      masterConnectionMinimumIdleSize: 32
      masterConnectionPoolSize: 64
      readMode: "SLAVE"
      nodeAddresses:
      - "redis://127.0.0.1:2812"
      - "redis://127.0.0.1:2815"
      - "redis://127.0.0.1:2813"
      scanInterval: 1000
    threads: 0
    nettyThreads: 0
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    "transportMode":"NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置云托管模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与ReplicatedServersConfigConfig对象里的字段名称相符。

    <redisson:client
        id="redisson"
        name="redisson1,redisson2"
        threads="0"
        netty-threads="0"
        codec-ref="myCodec" 
        use-linux-native-epoll="false"
        redisson-reference-enabled="true"
        codec-provider-ref="myCodecProvider"
        resolver-provider-ref="myResolverProvider"
        executor-ref="myExecutor"
        event-loop-group-ref="myEventLoopGroup"
    >
        <!--
        这里的name属性和qualifier子元素不能同时使用。
    
        id和name的属性都可以被用来作为qualifier的备选值。
        -->
        <!--<qualifier value="redisson3"/>-->
        <redisson:replicated-servers
            idle-connection-timeout="10000"
            ping-timeout="1000"
            connect-timeout="10000"
            timeout="3000"
            retry-attempts="3"
            retry-interval="1500"
            reconnection-timeout="3000"
            failed-attempts="3"
            password="do_not_use_if_it_is_not_set"
            subscriptions-per-connection="5"
            client-name="none"
            load-balancer-ref="myLoadBalancer"
            subscription-connection-minimum-idle-size="1"
            subscription-connection-pool-size="50"
            slave-connection-minimum-idle-size="10"
            slave-connection-pool-size="64"
            master-connection-minimum-idle-size="10"
            master-connection-pool-size="64"
            read-mode="SLAVE"
            subscription-mode="SLAVE"
            scan-interval="1000"
            database="0"
        >
            <redisson:node-address value="redis://127.0.0.1:6379" />
            <redisson:node-address value="redis://127.0.0.1:6380" />
            <redisson:node-address value="redis://127.0.0.1:6381" />
        </redisson:replicated-servers>
    </redisson:client>
    
    <!-- 最基本配置 -->
    <redisson:client>
        <redisson:replicated-servers>
            <redisson:node-address value="redis://127.0.0.1:6379" />
            <redisson:node-address value="redis://127.0.0.1:6380" />
            <redisson:node-address value="redis://127.0.0.1:6381" />
            ...
        </redisson:replicated-servers>
    </redisson:client>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    2.6. 单Redis节点模式

    程序化配置方法:

    // 默认连接地址 127.0.0.1:6379
    RedissonClient redisson = Redisson.create();
    
    Config config = new Config();
    config.useSingleServer().setAddress("myredisserver:6379");
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.6.1. 单节点设置

    Redis程序的配置和架设文档在这里。Redisson的单Redis节点模式的使用方法如下:
    SingleServerConfig singleConfig = config.useSingleServer();

    SingleServerConfig 类的设置参数如下:

    address(节点地址)

    可以通过host:port的格式来指定节点地址。

    subscriptionConnectionMinimumIdleSize(发布和订阅连接的最小空闲连接数)

    默认值:1

    用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(发布和订阅连接池大小)

    默认值:50

    用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    connectionMinimumIdleSize(最小空闲连接数)

    默认值:32

    最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    connectionPoolSize(连接池大小)

    默认值:64

    连接池最大容量。连接池的连接数量自动弹性伸缩。

    dnsMonitoring(是否启用DNS监测)

    默认值:false

    在启用该功能以后,Redisson将会监测DNS的变化情况。

    dnsMonitoringInterval(DNS监测时间间隔,单位:毫秒)

    默认值:5000

    监测DNS的变化情况的时间间隔。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    database(数据库编号)

    默认值:0

    尝试连接的数据库编号。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.6.2. 通过JSON、YAML和Spring XML文件配置单节点模式

    配置单节点模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与SingleServerConfigConfig对象里的字段名称相符。

    {
       "singleServerConfig":{
          "idleConnectionTimeout":10000,
          "pingTimeout":1000,
          "connectTimeout":10000,
          "timeout":3000,
          "retryAttempts":3,
          "retryInterval":1500,
          "reconnectionTimeout":3000,
          "failedAttempts":3,
          "password":null,
          "subscriptionsPerConnection":5,
          "clientName":null,
          "address": "redis://127.0.0.1:6379",
          "subscriptionConnectionMinimumIdleSize":1,
          "subscriptionConnectionPoolSize":50,
          "connectionMinimumIdleSize":32,
          "connectionPoolSize":64,
          "database":0,
          "dnsMonitoring":false,
          "dnsMonitoringInterval":5000
       },
       "threads":0,
       "nettyThreads":0,
       "codec":null,
       "transportMode":"NIO"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    配置单节点模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与SingleServerConfigConfig对象里的字段名称相符。

    ---
    singleServerConfig:
      idleConnectionTimeout: 10000
      pingTimeout: 1000
      connectTimeout: 10000
      timeout: 3000
      retryAttempts: 3
      retryInterval: 1500
      reconnectionTimeout: 3000
      failedAttempts: 3
      password: null
      subscriptionsPerConnection: 5
      clientName: null
      address: "redis://127.0.0.1:6379"
      subscriptionConnectionMinimumIdleSize: 1
      subscriptionConnectionPoolSize: 50
      connectionMinimumIdleSize: 32
      connectionPoolSize: 64
      database: 0
      dnsMonitoring: false
      dnsMonitoringInterval: 5000
    threads: 0
    nettyThreads: 0
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    "transportMode":"NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    配置单节点模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与SingleServerConfigConfig对象里的字段名称相符。

    <redisson:client
        id="redisson"
        name="redisson1,redisson2"
        threads="0"
        netty-threads="0"
        codec-ref="myCodec" 
        use-linux-native-epoll="false"
        redisson-reference-enabled="true"
        codec-provider-ref="myCodecProvider"
        resolver-provider-ref="myResolverProvider"
        executor-ref="myExecutor"
        event-loop-group-ref="myEventLoopGroup"
    >
        <!--
        这里的name属性和qualifier子元素不能同时使用。
    
        id和name的属性都可以被用来作为qualifier的备选值。
        -->
        <!--<qualifier value="redisson3"/>-->
        <redisson:single-server
            idle-connection-timeout="10000"
            ping-timeout="1000"
            connect-timeout="10000"
            timeout="3000"
            retry-attempts="3"
            retry-interval="1500"
            reconnection-timeout="3000"
            failed-attempts="3"
            password="do_not_use_if_it_is_not_set"
            subscriptions-per-connection="5"
            client-name="none"            
            address="redis://127.0.0.1:6379"
            subscription-connection-minimum-idle-size="1"
            subscription-connection-pool-size="50"
            connection-minimum-idle-size="10"
            connection-pool-size="64"
            database="0"
            dns-monitoring="false"
            dns-monitoring-interval="5000"
        />            
    </redisson:client>
    
    <!-- 最基本配置 -->
    <!-- 默认地址是 127.0.0.1:6379 -->
    <redisson:client>
        <redisson:single-server/>
    </redisson:client>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    2.7. 哨兵模式

    程序化配置哨兵模式的方法如下:

    Config config = new Config();
    config.useSentinelServers()
        .setMasterName("mymaster")
        //可以用"rediss://"来启用SSL连接
        .addSentinelAddress("redis://127.0.0.1:26389", "redis://127.0.0.1:26379")
        .addSentinelAddress("redis://127.0.0.1:26319");
    
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.7.1. 哨兵模式设置

    配置Redis哨兵服务的官方文档在这里。Redisson的哨兵模式的使用方法如下:
    SentinelServersConfig sentinelConfig = config.useSentinelServers();

    SentinelServersConfig 类的设置参数如下:

    dnsMonitoringInterval(DNS监控间隔,单位:毫秒)

    默认值:5000

    用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。

    masterName(主服务器的名称)

    主服务器的名称是哨兵进程中用来监测主从服务切换情况的。

    addSentinelAddress(添加哨兵节点地址)

    可以通过host:port的格式来指定哨兵节点的地址。多个节点可以一次性批量添加。

    readMode(读取操作的负载均衡模式)

    默认值: SLAVE(只在从服务节点里读取)

    注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。

    设置读取操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里读取。
    MASTER - 只在主服务节点里读取。
    MASTER_SLAVE - 在主从服务节点里都可以读取。

    subscriptionMode(订阅操作的负载均衡模式)

    默认值:SLAVE(只在从服务节点里订阅)

    设置订阅操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里订阅。
    MASTER - 只在主服务节点里订阅。

    loadBalancer(负载均衡算法类的选择)

    默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer

    在使用多个Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
    org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
    org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
    org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法

    subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)

    默认值:1

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)

    默认值:50

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    slaveConnectionMinimumIdleSize(从节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。

    slaveConnectionPoolSize(从节点连接池大小)

    默认值:64

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    masterConnectionMinimumIdleSize(主节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    masterConnectionPoolSize(主节点连接池大小)

    默认值:64

    主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同任何节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    database(数据库编号)

    默认值:0

    尝试连接的数据库编号。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.7.2. 通过JSON、YAML和Spring XML文件配置哨兵模式

    配置哨兵模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与SentinelServersConfigConfig对象里的字段名称相符。

    {
       "sentinelServersConfig":{
          "idleConnectionTimeout":10000,
          "pingTimeout":1000,
          "connectTimeout":10000,
          "timeout":3000,
          "retryAttempts":3,
          "retryInterval":1500,
          "reconnectionTimeout":3000,
          "failedAttempts":3,
          "password":null,
          "subscriptionsPerConnection":5,
          "clientName":null,
          "loadBalancer":{
             "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
          },
          "slaveSubscriptionConnectionMinimumIdleSize":1,
          "slaveSubscriptionConnectionPoolSize":50,
          "slaveConnectionMinimumIdleSize":32,
          "slaveConnectionPoolSize":64,
          "masterConnectionMinimumIdleSize":32,
          "masterConnectionPoolSize":64,
          "readMode":"SLAVE",
          "sentinelAddresses":[
             "redis://127.0.0.1:26379",
             "redis://127.0.0.1:26389"
          ],
          "masterName":"mymaster",
          "database":0
       },
       "threads":0,
       "nettyThreads":0,
       "codec":null,
       "transportMode":"NIO"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    配置哨兵模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与SentinelServersConfigConfig对象里的字段名称相符。

    ---
    sentinelServersConfig:
      idleConnectionTimeout: 10000
      pingTimeout: 1000
      connectTimeout: 10000
      timeout: 3000
      retryAttempts: 3
      retryInterval: 1500
      reconnectionTimeout: 3000
      failedAttempts: 3
      password: null
      subscriptionsPerConnection: 5
      clientName: null
      loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
      slaveSubscriptionConnectionMinimumIdleSize: 1
      slaveSubscriptionConnectionPoolSize: 50
      slaveConnectionMinimumIdleSize: 32
      slaveConnectionPoolSize: 64
      masterConnectionMinimumIdleSize: 32
      masterConnectionPoolSize: 64
      readMode: "SLAVE"
      sentinelAddresses:
      - "redis://127.0.0.1:26379"
      - "redis://127.0.0.1:26389"
      masterName: "mymaster"
      database: 0
    threads: 0
    nettyThreads: 0
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    "transportMode":"NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置哨兵模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与SentinelServersConfigConfig对象里的字段名称相符。

    <redisson:client
        id="redisson"
        name="redisson1,redisson2"
        threads="0"
        netty-threads="0"
        codec-ref="myCodec" 
        use-linux-native-epoll="false"
        redisson-reference-enabled="true"
        codec-provider-ref="myCodecProvider"
        resolver-provider-ref="myResolverProvider"
        executor-ref="myExecutor"
        event-loop-group-ref="myEventLoopGroup"
    >
        <!--
        这里的name属性和qualifier子元素不能同时使用。
    
        id和name的属性都可以被用来作为qualifier的备选值。
        -->
        <!--<qualifier value="redisson3"/>-->
        <redisson:sentinel-servers
            idle-connection-timeout="10000"
            ping-timeout="1000"
            connect-timeout="10000"
            timeout="3000"
            retry-attempts="3"
            retry-interval="1500"
            reconnection-timeout="3000"
            failed-attempts="3"
            password="do_not_use_if_it_is_not_set"
            subscriptions-per-connection="5"
            client-name="none"
            load-balancer-ref="myLoadBalancer"
            subscription-connection-minimum-idle-size="1"
            subscription-connection-pool-size="50"
            slave-connection-minimum-idle-size="10"
            slave-connection-pool-size="64"
            master-connection-minimum-idle-size="10"
            master-connection-pool-size="64"
            read-mode="SLAVE"
            subscription-mode="SLAVE"
            master-name="myMaster"
            database="0"
        >
            <redisson:sentinel-address value="redis://127.0.0.1:26379" />
            <redisson:sentinel-address value="redis://127.0.0.1:26380" />
        </redisson:sentinel-servers>
    </redisson:client>
    
    <!-- 最基本配置 -->
    <redisson:client>
        <redisson:sentinel-servers master-name="myMaster">
            <redisson:sentinel-address value="redis://127.0.0.1:26379" />
            <redisson:sentinel-address value="redis://127.0.0.1:26380" />
            ....
        </redisson:sentinel-servers>
    </redisson:client>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    2.8. 主从模式

    程序化配置主从模式的用法:

    Config config = new Config();
    config.useMasterSlaveServers()
        //可以用"rediss://"来启用SSL连接
        .setMasterAddress("redis://127.0.0.1:6379")
        .addSlaveAddress("redis://127.0.0.1:6389", "redis://127.0.0.1:6332", "redis://127.0.0.1:6419")
        .addSlaveAddress("redis://127.0.0.1:6399");
    
    RedissonClient redisson = Redisson.create(config);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.8.1. 主从模式设置

    介绍配置Redis主从服务组态的文档在这里. Redisson的主从模式的使用方法如下:
    MasterSlaveServersConfig masterSlaveConfig = config.useMasterSlaveServers();

    MasterSlaveServersConfig 类的设置参数如下:

    dnsMonitoringInterval(DNS监控间隔,单位:毫秒)

    默认值:5000

    用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。

    masterAddress(主节点地址)

    可以通过host:port的格式来指定主节点地址。

    addSlaveAddress(添加从主节点地址)

    可以通过host:port的格式来指定从节点的地址。多个节点可以一次性批量添加。

    readMode(读取操作的负载均衡模式)

    默认值: SLAVE(只在从服务节点里读取)

    注:在从服务节点里读取的数据说明已经至少有两个节点保存了该数据,确保了数据的高可用性。

    设置读取操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里读取。
    MASTER - 只在主服务节点里读取。
    MASTER_SLAVE - 在主从服务节点里都可以读取。

    subscriptionMode(订阅操作的负载均衡模式)

    默认值:SLAVE(只在从服务节点里订阅)

    设置订阅操作选择节点的模式。
    可用值为:
    SLAVE - 只在从服务节点里订阅。
    MASTER - 只在主服务节点里订阅。

    loadBalancer(负载均衡算法类的选择)

    默认值: org.redisson.connection.balancer.RoundRobinLoadBalancer

    在使用多个Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
    org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
    org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
    org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法

    subscriptionConnectionMinimumIdleSize(从节点发布和订阅连接的最小空闲连接数)

    默认值:1

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。

    subscriptionConnectionPoolSize(从节点发布和订阅连接池大小)

    默认值:50

    多从节点的环境里,每个 从服务节点里用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    slaveConnectionMinimumIdleSize(从节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。

    slaveConnectionPoolSize(从节点连接池大小)

    默认值:64

    多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。

    masterConnectionMinimumIdleSize(主节点最小空闲连接数)

    默认值:32

    多从节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。

    masterConnectionPoolSize(主节点连接池大小)

    默认值:64

    主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。

    idleConnectionTimeout(连接空闲超时,单位:毫秒)

    默认值:10000

    如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。

    connectTimeout(连接超时,单位:毫秒)

    默认值:10000

    同任何节点建立连接时的等待超时。时间单位是毫秒。

    timeout(命令等待超时,单位:毫秒)

    默认值:3000

    等待节点回复命令的时间。该时间从命令发送成功时开始计时。

    retryAttempts(命令失败重试次数)

    默认值:3

    如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。

    retryInterval(命令重试发送时间间隔,单位:毫秒)

    默认值:1500

    在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。

    reconnectionTimeout(重新连接时间间隔,单位:毫秒)

    默认值:3000

    当与某个节点的连接断开时,等待与其重新建立连接的时间间隔。时间单位是毫秒。

    failedAttempts(执行失败最大次数)

    默认值:3

    在某个节点执行相同或不同命令时,连续 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里清除,直到 reconnectionTimeout(重新连接时间间隔) 超时以后再次尝试。

    database(数据库编号)

    默认值:0

    尝试连接的数据库编号。

    password(密码)

    默认值:null

    用于节点身份验证的密码。

    subscriptionsPerConnection(单个连接最大订阅数量)

    默认值:5

    每个连接的最大订阅数量。

    clientName(客户端名称)

    默认值:null

    在Redis节点里显示的客户端名称。

    sslEnableEndpointIdentification(启用SSL终端识别)

    默认值:true

    开启SSL终端识别能力。

    sslProvider(SSL实现方式)

    默认值:JDK

    确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。

    sslTruststore(SSL信任证书库路径)

    默认值:null

    指定SSL信任证书库的路径。

    sslTruststorePassword(SSL信任证书库密码)

    默认值:null

    指定SSL信任证书库的密码。

    sslKeystore(SSL钥匙库路径)

    默认值:null

    指定SSL钥匙库的路径。

    sslKeystorePassword(SSL钥匙库密码)

    默认值:null

    指定SSL钥匙库的密码。

    2.8.2. 通过JSON、YAML和Spring XML文件配置主从模式

    配置主从模式可以通过指定一个JSON格式的文件来实现。以下是JSON格式的配置文件样本。文件中的字段名称必须与MasterSlaveServersConfigConfig对象里的字段名称相符。

    {
       "masterSlaveServersConfig":{
          "idleConnectionTimeout":10000,
          "pingTimeout":1000,
          "connectTimeout":10000,
          "timeout":3000,
          "retryAttempts":3,
          "retryInterval":1500,
          "reconnectionTimeout":3000,
          "failedAttempts":3,
          "password":null,
          "subscriptionsPerConnection":5,
          "clientName":null,
          "loadBalancer":{
             "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
          },
          "slaveSubscriptionConnectionMinimumIdleSize":1,
          "slaveSubscriptionConnectionPoolSize":50,
          "slaveConnectionMinimumIdleSize":32,
          "slaveConnectionPoolSize":64,
          "masterConnectionMinimumIdleSize":32,
          "masterConnectionPoolSize":64,
          "readMode":"SLAVE",
          "slaveAddresses":[
             "redis://127.0.0.1:6381",
             "redis://127.0.0.1:6380"
          ],
          "masterAddress": "redis://127.0.0.1:6379",
          "database":0
       },
       "threads":0,
       "nettyThreads":0,
       "codec":null,
       "transportMode":"NIO"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    配置主从模式可以通过指定一个YAML格式的文件来实现。以下是YAML格式的配置文件样本。文件中的字段名称必须与MasterSlaveServersConfigConfig对象里的字段名称相符。

    ---
    masterSlaveServersConfig:
      idleConnectionTimeout: 10000
      pingTimeout: 1000
      connectTimeout: 10000
      timeout: 3000
      retryAttempts: 3
      retryInterval: 1500
      reconnectionTimeout: 3000
      failedAttempts: 3
      password: null
      subscriptionsPerConnection: 5
      clientName: null
      loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
      slaveSubscriptionConnectionMinimumIdleSize: 1
      slaveSubscriptionConnectionPoolSize: 50
      slaveConnectionMinimumIdleSize: 32
      slaveConnectionPoolSize: 64
      masterConnectionMinimumIdleSize: 32
      masterConnectionPoolSize: 64
      readMode: "SLAVE"
      slaveAddresses:
      - "redis://127.0.0.1:6381"
      - "redis://127.0.0.1:6380"
      masterAddress: "redis://127.0.0.1:6379"
      database: 0
    threads: 0
    nettyThreads: 0
    codec: !<org.redisson.codec.JsonJacksonCodec> {}
    "transportMode":"NIO"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置主从模式还可以通过Spring XML的命名空间来实现。以下是Spring XML格式的配置文件样本。文件中的属性名称在采用了Spring框架的命名规范并与MasterSlaveServersConfigConfig对象里的字段名称相符。

    <redisson:client
        id="redisson"
        name="redisson1,redisson2"
        threads="0"
        netty-threads="0"
        codec-ref="myCodec" 
        use-linux-native-epoll="false"
        redisson-reference-enabled="true"
        codec-provider-ref="myCodecProvider"
        resolver-provider-ref="myResolverProvider"
        executor-ref="myExecutor"
        event-loop-group-ref="myEventLoopGroup"
    >
        <!--
        这里的name属性和qualifier子元素不能同时使用。
    
        id和name的属性都可以被用来作为qualifier的备选值。
        -->
        <!--<qualifier value="redisson3"/>-->
        <redisson:master-slave-servers
            idle-connection-timeout="10000"
            ping-timeout="1000"
            connect-timeout="10000"
            timeout="3000"
            retry-attempts="3"
            retry-interval="1500"
            reconnection-timeout="3000"
            failed-attempts="3"
            password="do_not_use_if_it_is_not_set"
            subscriptions-per-connection="5"
            client-name="none"
            load-balancer-ref="myLoadBalancer"
            subscription-connection-minimum-idle-size="1"
            subscription-connection-pool-size="50"
            slave-connection-minimum-idle-size="10"
            slave-connection-pool-size="64"
            master-connection-minimum-idle-size="10"
            master-connection-pool-size="64"
            read-mode="SLAVE"
            subscription-mode="SLAVE"
            master-address="redis://127.0.0.1:6379"
            database="0"
        >
            <redisson:slave-address value="redis://127.0.0.1:6380" />
            <redisson:slave-address value="redis://127.0.0.1:6381" />
        </redisson:master-slave-servers>
    </redisson:client>
    
    <!-- 最基本配置 -->
    <redisson:client>
        <redisson:master-slave-servers master-address="redis://127.0.0.1:6379">
            <redisson:slave-address value="redis://127.0.0.1:6380" />
            <redisson:slave-address value="redis://127.0.0.1:6381" />
            ...
        </redisson:master-slave-servers>
    </redisson:client>
  • 相关阅读:
    ThreadPoolExecutor线程池参数设置技巧
    函数式接口
    Mac下进入MySQL命令行
    Java8 特性
    Java8 :: 用法 (JDK8 双冒号用法)
    事务传播
    新版IDEA配置tomcat教程(2018)
    Java8 Map的compute()方法
    Spring 普通类与工具类调用service层
    简单工厂(三)——JDK源码中的简单工厂
  • 原文地址:https://www.cnblogs.com/heihei1990/p/13929098.html
Copyright © 2011-2022 走看看