前言
之前数据库连接池那篇就提到 redis 连接池正在筹备中,明天就把它贴上。次要蕴含的 redis 连接池有 jedisPool,redisson,至于之前有吐槽过的那位 –lettuce 学生,明天就没邀请他,起因是:“被回绝了”。
咱们看下官网文档的形容:
简略翻译一下重点:lettuce 是设计成线程平安的,所以一个连贯能够在多个线程间共享,并且在默认状况下,lettuce 会进行断线重连。尽管在大多数状况下不须要连接池,然而在某些状况下可能会有帮忙。
意思就是,咱们 lettuce 大部分状况下是不须要连接池的,你非要用也能够,咱们须要 common-pool2 的依赖。
而后对于其连接池配置的根本找不到,只有在 spring 官网配置文档中有对于 lettuce 连接池的几个配置,用 spring 的小伙伴能够查阅 spring 的官网看。
Jedis(JedisPool)
配置 | 缺省值 | 阐明 | 性能优化 |
---|---|---|---|
maxTotal | 8 | 资源池中的最大连接数 | 一个连贯的 QPS 大概是 1s/1ms = 1000,而业务冀望的单个 Redis 的 QPS 是 50000(业务总的 QPS/Redis 分片个数),那么实践上须要的资源池大小(即 MaxTotal)是 50000 / 1000 = 50 |
maxIdle | 8 | 资源池容许的最大闲暇连接数 | maxIdle 设置得过小,会有 new Jedis(新连贯)开销 |
minIdle | 0 | 资源池确保的起码闲暇连接数 | / |
blockWhenExhausted | true | 当资源池用尽后,调用者是否要期待。只有当值为 true 时,上面的 maxWaitMillis 才会失效。 | 倡议应用默认值。 |
maxWaitMillis | -1(示意永不超时) | 当资源池连贯用尽后,调用者的最大等待时间(单位为毫秒)。 | 不倡议应用默认值。 |
testOnBorrow | false | 向资源池借用连贯时是否做连贯有效性检测(ping)。检测到的有效连贯将会被移除。 | 业务量很大时候倡议设置为 false,缩小一次 ping 的开销。 |
testOnReturn | false | 向资源池偿还连贯时是否做连贯有效性检测(ping)。检测到有效连贯将会被移除。 | 业务量很大时候倡议设置为 false,缩小一次 ping 的开销。 |
jmxEnabled | true | 是否开启 JMX 监控 | / |
testWhileIdle | false | 是否在闲暇资源监测时通过 ping 命令监测连贯有效性,有效连贯将被销毁。 | true |
timeBetweenEvictionRunsMillis | -1(不检测) | 闲暇资源的检测周期(单位为毫秒) | 倡议设置,周期自行抉择,也能够默认也能够应用下方 JedisPoolConfig 中的配置。 |
minEvictableIdleTimeMillis | 1,800,000(即 30 分钟) | 资源池中资源的最小闲暇工夫(单位为毫秒),达到此值后闲暇资源将被移除。 | 可依据本身业务决定,个别默认值即可,也能够思考应用下方 JeidsPoolConfig 中的配置。 |
numTestsPerEvictionRun | 3 | 做闲暇资源检测时,每次检测资源的个数。 | 可依据本身利用连接数进行微调,如果设置为 -1,就是对所有连贯做闲暇监测。 |
redisson
官网文档:https://github.com/redisson/r…
通用配置
配置 | 缺省值 | 阐明 |
---|---|---|
executor | null | 独自提供一个用来执行所有 RTopic 对象监听器,RRemoteService 调用者和 RExecutorService 工作的线程池(ExecutorService)实例。 |
lockWatchdogTimeout | 30000 | 监控锁的看门狗超时工夫单位为毫秒。该参数只实用于分布式锁的加锁申请中未明确应用 leaseTimeout 参数的状况。如果该看门口未应用 lockWatchdogTimeout 去从新调整一个分布式锁的 lockWatchdogTimeout 超时,那么这个锁将变为生效状态。这个参数能够用来防止由 Redisson 客户端节点宕机或其余起因造成死锁的状况。 |
transportMode(传输模式) | TransportMode.NIO | 可选参数:TransportMode.NIO,TransportMode.EPOLL – 须要依赖里有 netty-transport-native-epoll 包(Linux)TransportMode.KQUEUE – 须要依赖里有 netty-transport-native-kqueue 包(macOS) |
eventLoopGroup | / | 用于特地指定一个 EventLoopGroup. EventLoopGroup 是用来解决所有通过 Netty 与 Redis 服务之间的连贯发送和承受的音讯。每一个 Redisson 都会在默认状况下本人创立治理一个 EventLoopGroup 实例。因而,如果在同一个 JVM 外面可能存在多个 Redisson 实例的状况下,采取这个配置实现多个 Redisson 实例共享一个 EventLoopGroup 的目标。只有 io.netty.channel.epoll.EpollEventLoopGroup 或 io.netty.channel.nio.NioEventLoopGroup 才是容许的类型。 |
nettyThreads | 以后解决核数量 * 2 | 这个线程池数量是在一个 Redisson 实例内,被其创立的所有分布式数据类型和服务,以及底层客户端所一起共享的线程池里保留的线程数量。 |
threads | 以后解决核数量 * 2 | 这个线程池数量被所有 RTopic 对象监听器,RRemoteService 调用者和 RExecutorService 工作独特共享。 |
单机模式
Config config = new Config();
配置 | 缺省值 | 阐明 |
---|---|---|
address | null | 以通过 host:port 的格局来指定节点地址。 |
subscriptionConnectionMinimumIdleSize | 1 | 用于公布和订阅连贯的最小放弃连接数(长连贯)。Redisson 外部常常通过公布和订阅来实现许多性能。长期保持肯定数量的公布订阅连贯是必须的。 |
subscriptionConnectionPoolSize | 50 | 用于公布和订阅连贯的连接池最大容量。连接池的连贯数量主动弹性伸缩。 |
connectionMinimumIdleSize | 32 | 最小放弃连接数(长连贯)。长期保持肯定数量的连贯有利于进步刹时写入反应速度。 |
connectionPoolSize | 64 | 在启用该性能当前,Redisson 将会监测 DNS 的变动状况。 |
dnsMonitoringInterval | 5000 | 监测 DNS 的变动状况的工夫距离。单位:毫秒 |
idleConnectionTimeout | 10000 | 如果以后连接池里的连贯数量超过了最小闲暇连接数,而同时有连贯闲暇工夫超过了该数值,那么这些连贯将会主动被敞开,并从连接池里去掉。工夫单位是毫秒。 |
timeout | 3000 | 期待节点回复命令的工夫。该工夫从命令发送胜利时开始计时。 |
retryAttempts | 3 | 如果尝试达到 retryAttempts(命令失败重试次数)依然不能将命令发送至某个指定的节点时,将抛出谬误。如果尝试在此限度之内发送胜利,则开始启用 timeout(命令期待超时)计时。 |
retryInterval | 1500 | 在某个节点执行雷同或不同命令时,间断 失败 failedAttempts(执行失败最大次数)时,该节点将被从可用节点列表里革除,直到 reconnectionTimeout(从新连接时间距离)超时当前再次尝试。 |
database | 0 | 尝试连贯的数据库编号。 |
password | null | null |
subscriptionsPerConnection | 5 | 每个连贯的最大订阅数量。 |
clientName | null | 在 Redis 节点里显示的客户端名称。 |
connectTimeout | 10000 | 同节点建设连贯时的期待超时。工夫单位是毫秒。 |
yaml 文件配置模版如下:
singleServerConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: null
subscriptionsPerConnection: 5
clientName: null
address: "redis://127.0.0.1:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 24
connectionPoolSize: 64
database: 0
dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
codec: !<org.redisson.codec.MarshallingCodec> {}
transportMode: "NIO"
集群模式
ClusterServersConfig clusterConfig = config.useClusterServers();
配置 | 缺省值 | 阐明 |
---|---|---|
nodeAddresses | null | 能够通过 host:port 的格局来增加 Redis 集群节点的地址。多个节点能够一次性批量增加。 |
scanInterval | 1000 | 对 Redis 集群节点状态扫描的工夫距离。单位是毫秒。 |
slots | 231 | 用于指定数据分片过程中的分片数量。 |
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 | 在某个节点执行雷同或不同命令时,间断 失败 failedAttempts(执行失败最大次数)时,该节点将被从可用节点列表里革除,直到 reconnectionTimeout(从新连接时间距离)超时当前再次尝试。 |
password | null | 用于节点身份验证的明码。 |
subscriptionsPerConnection | 5 | 每个连贯的最大订阅数量。 |
clientName | null | 在 Redis 节点里显示的客户端名称。 |
sslEnableEndpointIdentification | true | 开启 SSL 终端辨认能力。 |
sslProvider | JDK | 确定采纳哪种形式(JDK 或 OPENSSL)来实现 SSL 连贯。 |
sslTruststore | null | 指定 SSL 信赖证书库的门路。 |
sslTruststorePassword | null | 指定 SSL 信赖证书库的明码。 |
sslKeystore | null | 指定 SSL 钥匙库的门路。 |
sslKeystorePassword | null | 指定 SSL 钥匙库的明码。 |
yaml 文件配置模版如下:
clusterServersConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
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"
OK,大抵就这样了。