Redis
 sql >> Database >  >> NoSQL >> Redis

Come isolare il redis dell'app di avvio primaverile e il redis globale della sessione di avvio primaverile

In effetti, per impostazione predefinita, sia la sessione primaverile che la cache primaverile sono effettivamente configurate da spring-boot con un RedisConnectionFactory bean denominato connectionFactory .Due modi per farlo.

  1. make spring-session per utilizzare una connectionFactory diversa istanza del bean e lascia spring-cache per utilizzare il valore predefinito connectionFactory . E di seguito è riportata una soluzione di esempio:

    @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. crea spring-cache per utilizzare una connectionFactory diversa istanza del bean e lascia la sessione primaverile per utilizzare il valore predefinito connectionFactory . E di seguito è riportata una soluzione di esempio:

    @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;
        }
    }