美文网首页
JedisConnectionFactory何时被注入

JedisConnectionFactory何时被注入

作者: 墨色尘埃 | 来源:发表于2019-11-26 21:38 被阅读0次

    本文主要为大家介绍使用工厂类获取Jedis的两种方式
    第一种是手动注入,第二种是自动注入(本文即是)

    1. 进入@EnableRedisHttpSession注解
    image.png
    1. 进入 @Import(RedisHttpSessionConfiguration.class)类
      该类启动顺序:Redis存储Session启动顺序

    首先看sessionRedisTemplate 方法,该方法入参是RedisConnectionFactory,那么这个RedisConnectionFactory肯定也是在某个地方被@Bean注解注入进来了,那么是在什么时候什么地方呢?

    当bean中需要注入其他参数或者引用时,将其作为方法的参数即可,Spring会帮你注入这些引用。这里RedisConnectionFactory被作为参数被注入进来

    image.png
    1. 进入RedisConnectionFactory接口,F4查看继承关系。这里使用JedisConnectionFactory类
    image.png

    3.1 该类实现了InitializingBean接口

    Spring中的InitializingBean接口的使用

    InitializingBean和DisposableBean

    image.png

    InitializingBean接口为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接口

    image.png

    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
    
    

    相关文章

      网友评论

          本文标题:JedisConnectionFactory何时被注入

          本文链接:https://www.haomeiwen.com/subject/wsoywctx.html