如何隔离spring boot app redis和spring boot session global redis [英] How to isolate spring boot app redis and spring boot session global redis
问题描述
据我所知,spring boot 和 spring session 为我们提供了一站式自动配置,但是当我的应用程序使用会话 redis 和应用程序缓存 redis 时,redis 服务器不是同一个;我该如何配置,非常感谢您的回复!
As I know, spring boot and spring session provided us one-stop autoconfig, but when my app use session redis and app cache redis not same redis server; How can I config it, thank you very much for your reply!
推荐答案
事实上,默认情况下,spring-session 和 spring-cache 实际上都是由 spring-boot 配置的,RedisConnectionFactory
bean 命名为connectionFactory
.有两种方法可以做到这一点.
Indeed, by default, both spring-session and spring-cache are actually configured by spring-boot with a RedisConnectionFactory
bean named as connectionFactory
.
Two ways to do this.
使
spring-session
使用不同的connectionFactory
bean 实例,并让 spring-cache 使用默认的connectionFactory
.下面是一个示例解决方案:
make
spring-session
to use a differentconnectionFactory
bean instance, and leave spring-cache to use the defaultconnectionFactory
. And below is a sample solution:
@Configuration
public class RedisHttpSessionConfig {
@Bean
StringRedisSerializer stringRedisSerializer() {
return new StringRedisSerializer();
}
@Bean
RedisConnectionFactory redisHttpSessionConnectionFactory() {
RedisConnectionFactory redisHttpSessionConnectionFactory = null;
// ... add your codes here
return redisHttpSessionConnectionFactory;
}
@Bean
public RedisTemplate<Object, Object> sessionRedisTemplate(
RedisConnectionFactory redisHttpSessionConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setDefaultSerializer(GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisHttpSessionConnectionFactory);
return template;
}
}
使 spring-cache
使用不同的 connectionFactory
bean 实例,并让 spring-session 使用默认的 connectionFactory
.下面是一个示例解决方案:
make spring-cache
to use a different connectionFactory
bean instance, and leave spring-session to use the default connectionFactory
. And below is a sample solution:
@Configuration
public class RedisCacheConfig {
@Bean
StringRedisSerializer stringRedisSerializer() {
return new StringRedisSerializer();
}
@Bean
RedisConnectionFactory redisCacheConnectionFactory() {
RedisConnectionFactory redisCacheConnectionFactory = null;
// ... add your codes here
return redisCacheConnectionFactory;
}
@Bean
RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisCacheConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisCacheConnectionFactory);
redisTemplate.setKeySerializer(this.stringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean(name = "stringRedisTemplate")
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisCacheConnectionFactory) throws UnknownHostException {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisCacheConnectionFactory);
stringRedisTemplate.setKeySerializer(this.stringRedisSerializer());
stringRedisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return stringRedisTemplate;
}
@Bean
CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(600l);
cacheManager.setUsePrefix(true);
return cacheManager;
}
}
这篇关于如何隔离spring boot app redis和spring boot session global redis的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!