最近在看JVM相关参数时,
发现对于不知道并且不清楚含义的参数,
根本没有使用的能力,所以从参数开始逐步学起,
虽然很没有耐心,这么多参数,学了忘,忘了学,
但是,还是要看(^ v ^),于是从使用的相关组件开始学习,
之前,总结了RabbitMQ的参数,这次学习到了Redis参数,
一文是搞不懂的,需要多实践,会用才是懂,看懂不是懂。
分享如下。
结果:Redis配置参数汇总如下表:
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | database | 连接Redis的数据库索引,默认为0,Redis数据索引:0~15 |
| 2 | url | Redis服务端地址,格式:redis://user:password@host:6379,已配置host,port和密码的忽略此配置 |
| 3 | host | Redis主机名称 |
| 4 | username | 登录Redis服务端用户名 |
| 5 | password | 登录Redis服务端密码 |
| 6 | port | Redis服务端端口 |
| 7 | ssl | 是否开启SSL支持 |
| 8 | timeout | 读超时 |
| 9 | connectTimeout | 连接超时 |
| 10 | clientName | 客户端名称 |
| 11 | clientType | 使用的客户端类型,默认从classpath读取,枚举为:LETTUCE和JEDIS |
| 12 | sentinel | 哨兵模式 |
| 12.1 | +master | 主节点Redis服务 |
| 12.2 | +nodes | 子节点列表,格式:host:port,多个使用英文逗号隔开 |
| 12.3 | +password | 哨兵认证密码 |
| 13 | cluster | 集群模式 |
| 13.1 | +nodes | 集群节点列表,至少填写一个格式:host:port,多一个使用英文逗号隔开 |
| 13.2 | +maxRedirects | 重定向最大次数,重定向查询数据 |
| 14 | jdedis | 客户端Jedis连接池,简单易用的Redis客户端 |
| 14.1 | +pool | |
| 14.1.1 | ++maxIdle | 连接池中最大连接数,默认为8,当连接池中有空闲连接时,空闲对象回收线程依据timeBetweenEvictionRuns回收连接 |
| 14.1.2 | ++minIdle | 连接池中最小空闲连接数,默认为0 |
| 14.1.3 | ++maxActive | 连接池可用的最大连接数,默认为8 |
| 14.1.4 | ++maxWait | 获取Redis连接的最大等待时间,默认为-1,一直等待直到获取连接 |
| 14.1.5 | ++timeBetweenEvictionRuns | 空闲对象回收线程运行间隔 |
| 15 | lettuce | 客户端Lettuce连接池,高级Redis客户端,线程安全、异步 |
| 15.1 | +pool | |
| 15.1.1 | ++maxIdle | 连接池中最大连接数,默认为8,当连接池中有空闲连接时,空闲对象回收线程依据timeBetweenEvictionRuns回收连接 |
| 15.1.2 | ++minIdle | 连接池中最小空闲连接数,默认为0 |
| 15.1.3 | ++maxActive | 连接池可用的最大连接数,默认为8 |
| 15.1.4 | ++maxWait | 获取Redis连接的最大等待时间,默认为-1,一直等待直到获取连接 |
| 15.1.5 | ++timeBetweenEvictionRuns | 空闲对象回收线程运行间隔 |
| 15.2 | +refresh | 刷新操作 |
| 15.2.1 | ++dynamicRefreshSources | 标识位。为获取集群拓扑是否发现并查询所有集群节点,默认为true |
| 15.2.2 | ++period | 集群拓扑刷新周期 |
| 15.2.3 | ++adaptive | 标识。是否使用所有可用刷新触发器进行自适应拓扑刷新 |
配置样例:
spring:
redis:
cluster:
nodes: 192.168.211.129:9001,192.168.211.129:9002,192.168.211.129:9003,192.168.211.129:9004,192.168.211.129:9005,192.168.211.129:9006
password: 123456
jedis:
pool:
max-active: 1 # 连接池:最大连接数,-1不限制
max-idle: 8 # 连接池:最大空闲连接数量
max-wait: 2000 # 连接池:最大阻塞等待时间,-1不限制,单位:毫秒
min-idle: 0 # 连接池;最小空闲连接数量
timeout: 1000 # 连接Redis服务器超时时间,单位:毫秒
3 参数解析
首先要找到入口。
自动装配是SpringBoot的最重要设计,
因此,先从自动装配入手,找到自动装配包,如下图所示,
Redis是数据库组件,因此在data模块中可以找到。
data包如下图所示,可以看到redis组件,
属性类为:RedisProperties。
SpringBoot版本:2.4.5
3.1 Redis属性类Redis属性类源码如下图所示,该类包括所有Redis配置参数,
后文的所有参数解析均基于该类。
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties
这层参数即最外层的属性,如下表所示,
有的属性具有第二甚至第三层属性,如jedis和lettuce。
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | database | 连接Redis的数据库索引,默认为0,Redis数据索引:0~15 |
| 2 | url | Redis服务端地址,格式:redis://user:password@host:6379,已配置host,port和密码的忽略此配置 |
| 3 | host | Redis主机名称 |
| 4 | username | 登录Redis服务端用户名 |
| 5 | password | 登录Redis服务端密码 |
| 6 | port | Redis服务端端口 |
| 7 | ssl | 是否开启SSL支持 |
| 8 | timeout | 读超时 |
| 9 | connectTimeout | 连接超时 |
| 10 | clientName | 客户端名称 |
| 11 | clientType | 使用的客户端类型,默认从classpath读取,枚举为:LETTUCE和JEDIS |
| 12 | sentinel | 哨兵模式 |
| 13 | cluster | 集群模式 |
| 14 | jdedis | 客户端Jedis连接池,简单易用的Redis客户端 |
| 15 | lettuce | 客户端Lettuce连接池,高级Redis客户端,线程安全、异步 |
Redis客户端类型,源码提供的类型有:LETTUCE和JEDIS,源码如下图所示。
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.ClientType
Redis客户端采用集群方式:cluster,源码如下图所示,
集群参数:
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | nodes | 集群节点列表,至少填写一个格式:host:port,多一个使用英文逗号隔开 |
| 2 | maxRedirects | 重定向最大次数,重定向查询数据 |
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster
Redis客户端采用哨兵方式:sentinel,源码如下图所示,
参数如下:
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | master | 主节点Redis服务 |
| 2 | nodes | 子节点列表,格式:host:port,多个使用英文逗号隔开 |
| 3 | password | 哨兵认证密码 |
org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel
简单易用的Redis客户端(Java版)。同步阻塞IO、不支持异步,
源码位置:https://github.com/redis/jedis
Jedis客户端属性如下表所示,源码如下图所示,
由源码可知,Jedis属性只有Pool
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Pool
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | maxIdle | 连接池中最大连接数,默认为8,当连接池中有空闲连接时,空闲对象回收线程依据timeBetweenEvictionRuns回收连接 |
| 2 | minIdle | 连接池中最小空闲连接数,默认为0 |
| 3 | maxActive | 连接池可用的最大连接数,默认为8 |
| 4 | maxWait | 获取Redis连接的最大等待时间,默认为-1,一直等待直到获取连接 |
| 5 | timeBetweenEvictionRuns | 空闲对象回收线程运行间隔 |
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Jedis
Pool源码如下:
public static class Pool {
private int maxIdle = 8;
private int minIdle = 0;
private int maxActive = 8;
private Duration maxWait = Duration.ofMillis(-1);
private Duration timeBetweenEvictionRuns;
// setter/getter ommited
}
3.2.5 Lettuce
高级Redis客户端(Java版),线程安全且支持异步(基于Netty事件驱动)。
支持高级Redis特性:哨兵、集群、管道、自动重连和Redis数据模型等。
Lettuce
Lettuce属性如下表所示,源码如下图所示。
其中,Pool与Jedis相同。
shutdownTimeout为关闭客户端及关闭所有打开的连接的超时时间。一旦关闭所有连接,相关的客户端资源会在安静期和关闭超时期优雅地关闭或释放。
cluster属性,由源码可知,cluster中嵌套了refresh属性,
refresh属性如下:
| 序号 | 属性 | 描述 |
|---|---|---|
| 1 | dynamicRefreshSources | 标识位。为获取集群拓扑是否发现并查询所有集群节点,默认为true |
| 2 | period | 集群拓扑刷新周期 |
| 3 | adaptive | 标识。是否使用所有可用刷新触发器进行自适应拓扑刷新 |
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Lettuce
Lettuce中的Cluster源码如下所示:
public static class Cluster {
private final Refresh refresh = new Refresh();
public Refresh getRefresh() {
return this.refresh;
}
public static class Refresh {
private boolean dynamicRefreshSources = true;
private Duration period;
private boolean adaptive;
public boolean isDynamicRefreshSources() {
return this.dynamicRefreshSources;
}
public void setDynamicRefreshSources(boolean dynamicRefreshSources) {
this.dynamicRefreshSources = dynamicRefreshSources;
}
public Duration getPeriod() {
return this.period;
}
public void setPeriod(Duration period) {
this.period = period;
}
public boolean isAdaptive() {
return this.adaptive;
}
public void setAdaptive(boolean adaptive) {
this.adaptive = adaptive;
}
}
}
4 小结
核心:
(1)支持的客户端连接方式:直连、集群、哨兵;
(2)Redis客户端连接池类型:Jedis和Lettuce;
(3)Jedis简单易用的Redis客户端;Lettuce线程安全、异步的高性能Redis客户端;
(3)Jedis和Lettuce通用连接池配置:最大空闲连接、最小空闲连接等,通过timeBetweenEvictionRuns控制回收空闲连接的频率;
(4)防止获取连接阻塞,必须设置maxWait最大等待时间。



