面向小白的SpringBoot的jedispool生成解析

195 阅读2分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

昨天redis入门,今天我们来聊一下操作,说白了就是写代码,程序员会吹,代码能力没有没用。

我建议学习任何东西之前,先玩起来,不要直接去学理论,学学,学到从入门到到放弃,先用起来,然后熟练之后,再用理论引导实践,进而达到知行合一的目的,这才叫学会。

导入依赖

我们使用jedis来操作redis,所以我们需要导入如下依赖,就像这样:

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
</dependency>

JedisPool

Jedis不是线程安全的,因此我们需要从jedispool中获取jedis实例,我们可以简单看一下jedispool。

我们可以看到有两个初始化方法,我们选择第二个,第二个可以可以搞一些灵活的配置,我们看看这个配置里面可以配置什么。 image.png

这个类是配置类就是我们这个池化的默认配置,简单介绍一下 image.png

minEvictableIdleTimeMillis:资源的最小空闲时间,达到这个数值就清除空闲
timeBetweenEvictionRunsMillis:空闲资源的检测周期,建议设置
testWhileIdle:是否开启空闲检测
numTestsPerEvictionRun:做空闲资源检测时,每次检测资源的个数,值为负1就是检测所有。

当然我们还要看它的父类,也扩展了一些配置属性:

image.png

maxTotal 资源池中的最大连接数 maxIdle 资源池允许的最大空闲连接数 minIdle 资源池确保的最少空闲连接数

Pool

我们看明白配置之后呢,我们就可以初始化一个池子了,那我们来看看,到底怎么初始化的

image.png

初始化之后,它会调用super的构造方法,我们看看都干了什么?

image.png

初始化了一个池子,我们点进去看下,都做了什么?我们猜就是对池子先看看有没有,有就销毁,没有才初始化:

image.png

和我们猜的一样。

搞一个池子

ok,理论学会了,我们就搞一个池子玩玩,代码如下:

我们指定配置文件为redis开头的都映射到这个对象中,然后我们就有了配置

@Bean
@ConfigurationProperties("redis")
public JedisPoolConfig jedisPoolConfig() {
   return new JedisPoolConfig();
}

之后生成一个池子,原理前面都说了。

@Bean(destroyMethod = "close")
public JedisPool jedisPool(@Value("${redis.host}") String host) {
   return new JedisPool(jedisPoolConfig(), host);
}

运行看结果

ok,成功。 image.png