​Redisson 开发文档​

 

2.1. 程序化配置方法

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

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

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);

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

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

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

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

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

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

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>

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

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.EpollEventLoopGroup​​​或​​io.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);

2.4.1. 集群设置

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

ClusterServersConfig clusterConfig = config.useClusterServers();

​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格式的配置文件样本。文件中的字段名称必须与​​ClusterServersConfig​​​和​​Config​​对象里的字段名称相符。

{
"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"
}

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

---
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"

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

<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>

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);

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格式的配置文件样本。文件中的字段名称必须与​​ReplicatedServersConfig​​​和​​Config​​对象里的字段名称相符。

{
"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"
}

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

---
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"

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

<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>

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);

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格式的配置文件样本。文件中的字段名称必须与​​SingleServerConfig​​​和​​Config​​对象里的字段名称相符。

{
"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"
}

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

---
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"

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

<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>

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);

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格式的配置文件样本。文件中的字段名称必须与​​SentinelServersConfig​​​和​​Config​​对象里的字段名称相符。

{
"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"
}

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

---
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"

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

<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>

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);

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格式的配置文件样本。文件中的字段名称必须与​​MasterSlaveServersConfig​​​和​​Config​​对象里的字段名称相符。

{
"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"
}

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

---
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"

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

<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>