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>
  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/heihei1990/p/13929098.html
Copyright © 2011-2022 走看看