我通过在我的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连接 .
谢谢 .