前言

  之前数据库连接池那篇就提到redis连接池正在筹备中,明天就把它贴上。次要蕴含的redis连接池有jedisPool,redisson,至于之前有吐槽过的那位--lettuce学生,明天就没邀请他,起因是:“被回绝了”。

咱们看下官网文档的形容:

简略翻译一下重点:lettuce是设计成线程平安的,所以一个连贯能够在多个线程间共享,并且在默认状况下,lettuce会进行断线重连。尽管在大多数状况下不须要连接池,然而在某些状况下可能会有帮忙。
意思就是,咱们lettuce大部分状况下是不须要连接池的,你非要用也能够,咱们须要common-pool2的依赖。
而后对于其连接池配置的根本找不到,只有在spring官网配置文档中有对于lettuce连接池的几个配置,用spring的小伙伴能够查阅spring的官网看。

Jedis(JedisPool)

配置缺省值阐明性能优化
maxTotal8资源池中的最大连接数一个连贯的QPS大概是1s/1ms = 1000,而业务冀望的单个Redis的QPS是50000(业务总的QPS/Redis分片个数),那么实践上须要的资源池大小(即MaxTotal)是50000 / 1000 = 50
maxIdle8资源池容许的最大闲暇连接数maxIdle设置得过小,会有new Jedis(新连贯)开销
minIdle0资源池确保的起码闲暇连接数/
blockWhenExhaustedtrue当资源池用尽后,调用者是否要期待。只有当值为true时,上面的maxWaitMillis才会失效。倡议应用默认值。
maxWaitMillis-1(示意永不超时)当资源池连贯用尽后,调用者的最大等待时间(单位为毫秒)。不倡议应用默认值。
testOnBorrowfalse向资源池借用连贯时是否做连贯有效性检测(ping)。检测到的有效连贯将会被移除。业务量很大时候倡议设置为false,缩小一次ping的开销。
testOnReturnfalse向资源池偿还连贯时是否做连贯有效性检测(ping)。检测到有效连贯将会被移除。业务量很大时候倡议设置为false,缩小一次ping的开销。
jmxEnabledtrue是否开启JMX监控/
testWhileIdlefalse是否在闲暇资源监测时通过ping命令监测连贯有效性,有效连贯将被销毁。true
timeBetweenEvictionRunsMillis-1(不检测)闲暇资源的检测周期(单位为毫秒)倡议设置,周期自行抉择,也能够默认也能够应用下方JedisPoolConfig中的配置。
minEvictableIdleTimeMillis1,800,000(即30分钟)资源池中资源的最小闲暇工夫(单位为毫秒),达到此值后闲暇资源将被移除。可依据本身业务决定,个别默认值即可,也能够思考应用下方JeidsPoolConfig中的配置。
numTestsPerEvictionRun3做闲暇资源检测时,每次检测资源的个数。可依据本身利用连接数进行微调,如果设置为 -1,就是对所有连贯做闲暇监测。

redisson

官网文档:https://github.com/redisson/r...

通用配置

配置缺省值阐明
executornull独自提供一个用来执行所有RTopic对象监听器,RRemoteService调用者和RExecutorService工作的线程池(ExecutorService)实例。
lockWatchdogTimeout30000监控锁的看门狗超时工夫单位为毫秒。该参数只实用于分布式锁的加锁申请中未明确应用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();

配置缺省值阐明
addressnull以通过host:port的格局来指定节点地址。
subscriptionConnectionMinimumIdleSize1用于公布和订阅连贯的最小放弃连接数(长连贯)。Redisson外部常常通过公布和订阅来实现许多性能。长期保持肯定数量的公布订阅连贯是必须的。
subscriptionConnectionPoolSize50用于公布和订阅连贯的连接池最大容量。连接池的连贯数量主动弹性伸缩。
connectionMinimumIdleSize32最小放弃连接数(长连贯)。长期保持肯定数量的连贯有利于进步刹时写入反应速度。
connectionPoolSize64在启用该性能当前,Redisson将会监测DNS的变动状况。
dnsMonitoringInterval5000监测DNS的变动状况的工夫距离。单位:毫秒
idleConnectionTimeout10000如果以后连接池里的连贯数量超过了最小闲暇连接数,而同时有连贯闲暇工夫超过了该数值,那么这些连贯将会主动被敞开,并从连接池里去掉。工夫单位是毫秒。
timeout3000期待节点回复命令的工夫。该工夫从命令发送胜利时开始计时。
retryAttempts3如果尝试达到 retryAttempts(命令失败重试次数) 依然不能将命令发送至某个指定的节点时,将抛出谬误。如果尝试在此限度之内发送胜利,则开始启用 timeout(命令期待超时) 计时。
retryInterval1500在某个节点执行雷同或不同命令时,间断 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里革除,直到 reconnectionTimeout(从新连接时间距离) 超时当前再次尝试。
database0尝试连贯的数据库编号。
passwordnullnull
subscriptionsPerConnection5每个连贯的最大订阅数量。
clientNamenull在Redis节点里显示的客户端名称。
connectTimeout10000同节点建设连贯时的期待超时。工夫单位是毫秒。

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: 5000threads: 16nettyThreads: 32codec: !<org.redisson.codec.MarshallingCodec> {}transportMode: "NIO"

集群模式

ClusterServersConfig clusterConfig = config.useClusterServers();

配置缺省值阐明
nodeAddressesnull能够通过host:port的格局来增加Redis集群节点的地址。多个节点能够一次性批量增加。
scanInterval1000对Redis集群节点状态扫描的工夫距离。单位是毫秒。
slots231用于指定数据分片过程中的分片数量。
readModeSLAVE(只在从服务节点里读取)在从服务节点里读取的数据阐明曾经至多有两个节点保留了该数据,确保了数据的高可用性。设置读取操作抉择节点的模式。 可用值为: SLAVE - 只在从服务节点里读取。 MASTER - 只在主服务节点里读取。 MASTER_SLAVE - 在主从服务节点里都能够读取。
subscriptionModeSLAVE(只在从服务节点里订阅)设置订阅操作抉择节点的模式。 可用值为: SLAVE - 只在从服务节点里订阅。 MASTER - 只在主服务节点里订阅。
loadBalancerorg.redisson.connection.balancer.RoundRobinLoadBalancer在多Redis服务节点的环境里,能够选用以下几种负载平衡形式抉择一个节点: org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法 org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法 org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法
subscriptionConnectionMinimumIdleSize1从节点公布和订阅连贯的最小闲暇连接数,多从节点的环境里,每个 从服务节点里用于公布和订阅连贯的最小放弃连接数(长连贯)。Redisson外部常常通过公布和订阅来实现许多性能。长期保持肯定数量的公布订阅连贯是必须的。
subscriptionConnectionPoolSize50从节点公布和订阅连接池大小。多从节点的环境里,每个 从服务节点里用于公布和订阅连贯的连接池最大容量。连接池的连贯数量主动弹性伸缩。
slaveConnectionMinimumIdleSize32从节点最小闲暇连接数。多从节点的环境里,每个 从服务节点里用于一般操作(非 公布和订阅)的最小放弃连接数(长连贯)。长期保持肯定数量的连贯有利于进步刹时读取反映速度。
slaveConnectionPoolSize64多从节点的环境里,每个 从服务节点里用于一般操作(非 公布和订阅)连贯的连接池最大容量。连接池的连贯数量主动弹性伸缩。
masterConnectionMinimumIdleSize32多节点的环境里,每个 主节点的最小放弃连接数(长连贯)。长期保持肯定数量的连贯有利于进步刹时写入反应速度。
masterConnectionPoolSize64多主节点的环境里,每个 主节点的连接池最大容量。连接池的连贯数量主动弹性伸缩。
idleConnectionTimeout10000如果以后连接池里的连贯数量超过了最小闲暇连接数,而同时有连贯闲暇工夫超过了该数值,那么这些连贯将会主动被敞开,并从连接池里去掉。工夫单位是毫秒。
connectTimeout10000同任何节点建设连贯时的期待超时。工夫单位是毫秒。
timeout3000期待节点回复命令的工夫。该工夫从命令发送胜利时开始计时。
retryAttempts3如果尝试达到 retryAttempts(命令失败重试次数) 依然不能将命令发送至某个指定的节点时,将抛出谬误。如果尝试在此限度之内发送胜利,则开始启用 timeout(命令期待超时) 计时。
retryInterval1500在某个节点执行雷同或不同命令时,间断 失败 failedAttempts(执行失败最大次数) 时,该节点将被从可用节点列表里革除,直到 reconnectionTimeout(从新连接时间距离) 超时当前再次尝试。
passwordnull用于节点身份验证的明码。
subscriptionsPerConnection5每个连贯的最大订阅数量。
clientNamenull在Redis节点里显示的客户端名称。
sslEnableEndpointIdentificationtrue开启SSL终端辨认能力。
sslProviderJDK确定采纳哪种形式(JDK或OPENSSL)来实现SSL连贯。
sslTruststorenull指定SSL信赖证书库的门路。
sslTruststorePasswordnull指定SSL信赖证书库的明码。
sslKeystorenull指定SSL钥匙库的门路。
sslKeystorePasswordnull指定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: 1000threads: 0nettyThreads: 0codec: !<org.redisson.codec.JsonJacksonCodec> {}"transportMode":"NIO"

  OK,大抵就这样了。