2017-12-25 3 views

답변

2

기본적으로 spring-session과 spring-cache는 모두 connectionFactory이라는 RedisConnectionFactory bean을 사용하는 spring-boot에 의해 실제로 구성됩니다. 두 가지 방법이 있습니다.

  1. spring-session 다른 connectionFactory 빈 인스턴스를 사용하여 기본 connectionFactory를 사용하는 스프링 캐시를 남겨 할 수 있습니다. 그리고 아래 샘플 솔루션입니다 :

    @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; 
        } 
    } 
    
  2. 다른 connectionFactory 빈 인스턴스를 사용하여 기본 connectionFactory를 사용하는 스프링 세션을 떠나 spring-cache을합니다.

    @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; 
        } 
    } 
    
: 그리고 아래 샘플 솔루션