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

25 篇文章 7 订阅
3 篇文章 0 订阅

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源码如下:

/**
	 * Pool properties.
	 */
	public static class Pool {

		/**
		 * Maximum number of "idle" connections in the pool. Use a negative value to
		 * indicate an unlimited number of idle connections.
		 */
		private int maxIdle = 8;

		/**
		 * Target for the minimum number of idle connections to maintain in the pool. This
		 * setting only has an effect if both it and time between eviction runs are
		 * positive.
		 */
		private int minIdle = 0;

		/**
		 * Maximum number of connections that can be allocated by the pool at a given
		 * time. Use a negative value for no limit.
		 */
		private int maxActive = 8;

		/**
		 * Maximum amount of time a connection allocation should block before throwing an
		 * exception when the pool is exhausted. Use a negative value to block
		 * indefinitely.
		 */
		private Duration maxWait = Duration.ofMillis(-1);

		/**
		 * Time between runs of the idle object evictor thread. When positive, the idle
		 * object evictor thread starts, otherwise no idle object eviction is performed.
		 */
		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 {

				/**
				 * Whether to discover and query all cluster nodes for obtaining the
				 * cluster topology. When set to false, only the initial seed nodes are
				 * used as sources for topology discovery.
				 */
				private boolean dynamicRefreshSources = true;

				/**
				 * Cluster topology refresh period.
				 */
				private Duration period;

				/**
				 * Whether adaptive topology refreshing using all available refresh
				 * triggers should be used.
				 */
				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最大等待时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值