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.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);
- 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格式的配置文件样本。文件中的字段名称必须与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"
}
- 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格式的配置文件样本。文件中的字段名称必须与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"
- 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框架的命名规范并与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" />
<