本文主要为大家介绍使用工厂类获取Jedis的两种方式
第一种是手动注入,第二种是自动注入(本文即是)
- 进入@EnableRedisHttpSession注解
- 进入 @Import(RedisHttpSessionConfiguration.class)类
该类启动顺序:Redis存储Session启动顺序
首先看sessionRedisTemplate
方法,该方法入参是RedisConnectionFactory
,那么这个RedisConnectionFactory
肯定也是在某个地方被@Bean注解注入进来了,那么是在什么时候什么地方呢?
image.png当bean中需要注入其他参数或者引用时,将其作为方法的参数即可,Spring会帮你注入这些引用。这里RedisConnectionFactory被作为参数被注入进来
- 进入RedisConnectionFactory接口,F4查看继承关系。这里使用JedisConnectionFactory类
3.1 该类实现了InitializingBean接口
Spring中的InitializingBean接口的使用
InitializingBean和DisposableBean
image.pngInitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。
public void afterPropertiesSet() {
if (shardInfo == null) {
shardInfo = new JedisShardInfo(hostName, port);
if (StringUtils.hasLength(password)) {
shardInfo.setPassword(password);
}
if (timeout > 0) {
setTimeoutOn(shardInfo, timeout);
}
}
if (usePool && clusterConfig == null) {
this.pool = createPool();
}
if (clusterConfig != null) {
this.cluster = createCluster();
}
}
private Pool<Jedis> createPool() {
if (isRedisSentinelAware()) {
return createRedisSentinelPool(this.sentinelConfig);
}
return createRedisPool();
}
3.2 该类实现了RedisConnectionFactory接口
redis连接
public RedisConnection getConnection() {
if (cluster != null) {
return getClusterConnection();
}
Jedis jedis = fetchJedisConnector();
JedisConnection connection = (usePool ? new JedisConnection(jedis, pool, dbIndex, clientName)
: new JedisConnection(jedis, null, dbIndex, clientName));
connection.setConvertPipelineAndTxResults(convertPipelineAndTxResults);
return postProcessConnection(connection);
}
总结:
image.png我们只需在application.properties文件中,添加如下代码即可享受redis的好处:
# redis单机应用环境配置
spring:
cache:
type: redis #设置使用redis方式实现cache
# redis: #redis本机127模式
# host: 127.0.0.1
# port: 6379
# password: jihy
# # sentinel信息
# sentinel:
# master: mymaster #哨兵监听redis server名称
# nodes: 127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002 #哨兵的配置列表
# redis: #redis本机固定ip
# host: 172.16.108.3
# port: 6379
# password: jihy
# # sentinel信息
# sentinel:
# master: mymaster
# nodes: 172.16.108.3:30000,172.16.108.3:30001,172.16.108.3:30002
redis: #redis主从+哨兵
host: 172.16.11.66
port: 6379
password: jihy
# sentinel信息
sentinel:
master: mymaster
nodes: 172.16.11.66:30000,172.16.11.66:30001,172.16.11.66:30002
网友评论