我通过在我的spring应用程序类文件中声明这个注释“@EnableRedisHttpSession”,为我的spring mvc应用程序启用了Redis的会话管理 .

这是我的application.yml,它有dev和prod的单独配置 .

spring:
      profiles: local,default
      mvc:
        view:
          prefix: /
          suffix: .jsp

      redis:
        host: localhost
        password: welcome
        port: 6379


    ---
    spring:
      profiles: prod

      redis:
        cluster:
          nodes[0]: 127.0.0.1:30001
          nodes[1]: 127.0.0.1:30002
          nodes[2]: 127.0.0.1:30003

这是RedisConnectionConfiguration .

@Configuration
    public class RedisConnectionConfiguration {

        @Autowired
        private Environment environment;

        @Value("${spring.redis.host}")
        private String host;

        @Value("${spring.redis.port}")
        private int port;

        @Autowired
        private RedisConnectionFactory redisConnectionFactory;


        @Bean
        RedisConnectionFactory jedisConnectionFactory() {
            JedisConnectionFactory jedisConnectionFactory = null;
            if (Arrays.stream(environment.getActiveProfiles()).anyMatch(env -> (env.equalsIgnoreCase("default") || env.equalsIgnoreCase("local")))) {
                jedisConnectionFactory = new JedisConnectionFactory();
                jedisConnectionFactory.setHostName("localhost");
                jedisConnectionFactory.setPort(6379);
                jedisConnectionFactory.setPassword("welcome");
            } else if (Arrays.stream(environment.getActiveProfiles()).anyMatch(env -> (env.equalsIgnoreCase("prod")))) {
                jedisConnectionFactory = new JedisConnectionFactory(sentinelConfiguration());
                JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
                jedisConnectionFactory.setUsePool(true);
                jedisPoolConfig.setMaxTotal(environment.getRequiredProperty("redis.pool.max-active", Integer.class));
                jedisPoolConfig.setMaxIdle(environment.getRequiredProperty("redis.pool.max-idle", Integer.class));
                jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
            }

            return jedisConnectionFactory;
        }

        RedisSentinelConfiguration sentinelConfiguration() {
            RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("redis-cluster");

            List<RedisSentinelNode> nodes = sentinelNodes().getRedisSentinelNodes();
            for (RedisSentinelNode sn : nodes) {
                sentinelConfig.sentinel(sn.getHost(), sn.getPort());
            }

            return sentinelConfig;
        }

        private RedisSentinelNodes sentinelNodes() {
            List<RedisSentinelNode> nodes = new ArrayList<RedisSentinelNode>();

            for (int i = 1; i <= 3; i++) {
                String hostProp = "redis.sentinel.node." + i + ".host";
                String portProp = "redis.sentinel.node." + i + ".port";

                RedisSentinelNode redisSentinelNode = new RedisSentinelNode(environment.getProperty(hostProp), environment.getProperty(portProp, Integer.class));

                nodes.add(redisSentinelNode);
            }

            RedisSentinelNodes redisSentinelNodes = new RedisSentinelNodes(nodes);
            return redisSentinelNodes;
        }
    }

我的问题是..并且似乎正常使用mvc应用程序的会话 . 不确定我是否复制/粘贴了足够的配置代码 .

现在,我没有使用Redis进行会话管理,而是希望将一些全局数据缓存到所有用户,并且经常访问而不是从关系数据库中检索 .

有没有办法暴露 spring 支持的redis实例,它可以在我的配置文件或其他任何方式处理存储/检索?我不想为此创建另一个连接池 . 我想使用现有的连接池进行Redis连接 .

谢谢 .