首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何隔离spring引导应用程序redis和spring启动会话全局redis

如何隔离spring引导应用程序redis和spring启动会话全局redis
EN

Stack Overflow用户
提问于 2017-12-25 03:32:37
回答 2查看 792关注 0票数 0

据我所知,spring引导和spring会话为我们提供了一站式的自动配置,但是当我的应用程序使用会话redis和app缓存redis服务器时,我如何配置它,非常感谢您的回复!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-31 01:24:44

实际上,在默认情况下,spring会话和spring缓存实际上都是使用名为RedisConnectionFactory bean的connectionFactory来配置的。这有两种方法。

  1. 使spring-session使用不同的connectionFactory bean实例,并保留spring缓存以使用默认的connectionFactory。下面是一个示例解决方案: @Configuration公共类RedisHttpSessionConfig { @Bean StringRedisSerializer stringRedisSerializer() {返回新的StringRedisSerializer();} @Bean RedisConnectionFactory redisHttpSessionConnectionFactory() { RedisConnectionFactory redisHttpSessionConnectionFactory = null;// .在这里添加代码返回redisHttpSessionConnectionFactory;} @Bean公共RedisTemplate sessionRedisTemplate( RedisConnectionFactory redisHttpSessionConnectionFactory) { RedisTemplate模板=新RedisTemplate();template.setKeySerializer(新StringRedisSerializer());template.setHashKeySerializer(新StringRedisSerializer());template.setValueSerializer(新StringRedisSerializer());template.setValueSerializer(新StringRedisSerializer());}}
  2. 使spring-cache使用不同的connectionFactory bean实例,并保留spring会话以使用默认的connectionFactory。下面是一个示例解决方案: @Configuration公共类RedisCacheConfig { @Bean StringRedisSerializer stringRedisSerializer() {返回新的StringRedisSerializer();} @Bean RedisConnectionFactory redisCacheConnectionFactory() { RedisConnectionFactory redisCacheConnectionFactory = null;// .在这里添加代码返回redisCacheConnectionFactory;} @Bean RedisTemplate redisTemplate(RedisConnectionFactory redisCacheConnectionFactory) { RedisTemplate redisTemplate =新RedisTemplate();} @Bean(name = " StringRedisTemplate ")公共stringRedisTemplate.setKeySerializer(this.stringRedisSerializer());stringRedisTemplate(RedisConnectionFactory redisCacheConnectionFactory)抛出UnknownHostException { stringRedisTemplate StringRedisTemplate =新StringRedisTemplate();返回stringRedisTemplate(新GenericJackson2JsonRedisSerializer());}Bean CacheManager cacheManager(RedisTemplate cacheManager CacheManager){redisTemplate=新();(600 L);cacheManager.setUsePrefix(true);返回cacheManager;}
票数 2
EN

Stack Overflow用户

发布于 2019-07-05 03:20:31

标记默认的RedisConnectionFactory @主

代码语言:javascript
复制
    @Bean
    @Primary
    public RedisConnectionFactory redisConnectionFactory(RedisProperties properties) {
        return redisConnectionFactory(redisProperties);
    }

并标记会话RedisConnectionFactory @SpringSessionRedisConnectionFactory

代码语言:javascript
复制
    @Bean
    @SpringSessionRedisConnectionFactory
    public RedisConnectionFactory springSessionRedisConnectionFactory() {
        return redisConnectionFactory(...);
    }

redisConnectionFactory()配置RedisConnectionFactory。例如:

代码语言:javascript
复制
private static RedisConnectionFactory redisConnectionFactory(RedisProperties redisProperties, boolean afterPropertiesSet) {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(redisProperties.getHost());
        redisStandaloneConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
        redisStandaloneConfiguration.setDatabase(redisProperties.getDatabase());
        redisStandaloneConfiguration.setPort(redisProperties.getPort());

        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
        genericObjectPoolConfig.setMaxIdle(redisProperties.getLettuce().getPool().getMaxIdle());
        genericObjectPoolConfig.setMinIdle(redisProperties.getLettuce().getPool().getMinIdle());
        genericObjectPoolConfig.setMaxTotal(redisProperties.getLettuce().getPool().getMaxActive());
        genericObjectPoolConfig.setMaxWaitMillis(redisProperties.getLettuce().getPool().getMaxWait().toMillis());
        genericObjectPoolConfig.setTestOnBorrow(true);
        genericObjectPoolConfig.setTestOnReturn(true);

        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration,
                LettucePoolingClientConfiguration.builder().commandTimeout(redisProperties.getTimeout()).poolConfig(genericObjectPoolConfig).build());
        if (afterPropertiesSet) {
            lettuceConnectionFactory.afterPropertiesSet();
        }
        return lettuceConnectionFactory;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47965495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档