如何隔离spring boot app redis和spring boot session global redis [英] How to isolate spring boot app redis and spring boot session global redis

查看:82
本文介绍了如何隔离spring boot app redis和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.

  1. 使 spring-session 使用不同的 connectionFactory bean 实例,并让 spring-cache 使用默认的 connectionFactory.下面是一个示例解决方案:

  1. make spring-session to use a different connectionFactory bean instance, and leave spring-cache to use the default connectionFactory. 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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆