栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一文搞不懂springboot中redis参数配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文搞不懂springboot中redis参数配置

1 缘起

最近在看JVM相关参数时,
发现对于不知道并且不清楚含义的参数,
根本没有使用的能力,所以从参数开始逐步学起,
虽然很没有耐心,这么多参数,学了忘,忘了学,
但是,还是要看(^ v ^),于是从使用的相关组件开始学习,
之前,总结了RabbitMQ的参数,这次学习到了Redis参数,
一文是搞不懂的,需要多实践,会用才是懂,看懂不是懂。
分享如下。

2 参数汇总

结果:Redis配置参数汇总如下表:

序号属性描述
1database连接Redis的数据库索引,默认为0,Redis数据索引:0~15
2urlRedis服务端地址,格式:redis://user:password@host:6379,已配置host,port和密码的忽略此配置
3hostRedis主机名称
4username登录Redis服务端用户名
5password登录Redis服务端密码
6portRedis服务端端口
7ssl是否开启SSL支持
8timeout读超时
9connectTimeout连接超时
10clientName客户端名称
11clientType使用的客户端类型,默认从classpath读取,枚举为:LETTUCE和JEDIS
12sentinel哨兵模式
12.1+master主节点Redis服务
12.2+nodes子节点列表,格式:host:port,多个使用英文逗号隔开
12.3+password哨兵认证密码
13cluster集群模式
13.1+nodes集群节点列表,至少填写一个格式:host:port,多一个使用英文逗号隔开
13.2+maxRedirects重定向最大次数,重定向查询数据
14jdedis客户端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空闲对象回收线程运行间隔
15lettuce客户端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

3.2 参数

这层参数即最外层的属性,如下表所示,
有的属性具有第二甚至第三层属性,如jedis和lettuce。

序号属性描述
1database连接Redis的数据库索引,默认为0,Redis数据索引:0~15
2urlRedis服务端地址,格式:redis://user:password@host:6379,已配置host,port和密码的忽略此配置
3hostRedis主机名称
4username登录Redis服务端用户名
5password登录Redis服务端密码
6portRedis服务端端口
7ssl是否开启SSL支持
8timeout读超时
9connectTimeout连接超时
10clientName客户端名称
11clientType使用的客户端类型,默认从classpath读取,枚举为:LETTUCE和JEDIS
12sentinel哨兵模式
13cluster集群模式
14jdedis客户端Jedis连接池,简单易用的Redis客户端
15lettuce客户端Lettuce连接池,高级Redis客户端,线程安全、异步
3.2.1 clientType

Redis客户端类型,源码提供的类型有:LETTUCE和JEDIS,源码如下图所示。
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.ClientType

3.2.2 cluster

Redis客户端采用集群方式:cluster,源码如下图所示,
集群参数:

序号属性描述
1nodes集群节点列表,至少填写一个格式:host:port,多一个使用英文逗号隔开
2maxRedirects重定向最大次数,重定向查询数据

位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster

3.2.3 sentinel

Redis客户端采用哨兵方式:sentinel,源码如下图所示,
参数如下:

序号属性描述
1master主节点Redis服务
2nodes子节点列表,格式:host:port,多个使用英文逗号隔开
3password哨兵认证密码

org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel

3.2.4 Jedis

简单易用的Redis客户端(Java版)。同步阻塞IO、不支持异步,
源码位置:https://github.com/redis/jedis

Jedis客户端属性如下表所示,源码如下图所示,
由源码可知,Jedis属性只有Pool
位置:org.springframework.boot.autoconfigure.data.redis.RedisProperties.Pool

序号属性描述
1maxIdle连接池中最大连接数,默认为8,当连接池中有空闲连接时,空闲对象回收线程依据timeBetweenEvictionRuns回收连接
2minIdle连接池中最小空闲连接数,默认为0
3maxActive连接池可用的最大连接数,默认为8
4maxWait获取Redis连接的最大等待时间,默认为-1,一直等待直到获取连接
5timeBetweenEvictionRuns空闲对象回收线程运行间隔

位置: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属性如下:

序号属性描述
1dynamicRefreshSources标识位。为获取集群拓扑是否发现并查询所有集群节点,默认为true
2period集群拓扑刷新周期
3adaptive标识。是否使用所有可用刷新触发器进行自适应拓扑刷新

位置: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最大等待时间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号