【问题标题】:RediscacheManager instance with Spring data redis version above 2.0x2.0x以上Spring数据redis版本的RediscacheManager实例
【发布时间】:2019-12-19 15:58:33
【问题描述】:

我之前使用的是 Spring data Redis 版本 1.4.4。由于除了连接超时外,我还必须配置读取超时,因此我已将版本升级到 2.1.6。但是现在我无法使用 RedisTemplate 创建 Rediscachemanager 实例,因为它已从 spring data redis 2.0 版中弃用。有人可以帮忙用升级版本实现以下类似配置(使用 RedisTemplate 的键/值序列化)。

final JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
redisConnectionFactory.setHostName(redisHost);      
redisConnectionFactory.setTimeout(10000);
redisConnectionFactory.setPort(port);
redisConnectionFactory.setUsePool(true);
redisConnectionFactory.afterPropertiesSet();

@Bean(name = "redisCacheManager")
    public CacheManager cacheManager(final RedisTemplate<String,Object> redisTemplate) {
        final RedisCacheManager manager = new RedisCacheManager(redisTemplate());
        manager.setDefaultExpiration(Long.parseLong(expiryInSecs));
        return manager;
    }

    @Bean(name="redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(stringRedisSerializer());
        redisTemplate.setHashKeySerializer(stringRedisSerializer());
        redisTemplate.setValueSerializer(stringRedisSerializer());
        redisTemplate.setHashValueSerializer(stringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

【问题讨论】:

    标签: java spring redis spring-data jedis


    【解决方案1】:

    如果您包含 Spring Data Redis 和 Lettuce 作为驱动程序(我推荐),这是您需要的配置:

      @Bean
      public RedisConnectionFactory connectionFactory() {
        LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
            .commandTimeout(Duration.ofSeconds(2))
            .shutdownTimeout(Duration.ZERO)
            .build();
    
        return new LettuceConnectionFactory(new RedisStandaloneConfiguration("localhost", 6379), clientConfig);
      }
    
      @Bean(name = "redisCacheManager")
      public CacheManager cacheManager(final RedisConnectionFactory factory) {
        Duration expiration = Duration.ofSeconds(12345);
    
        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
            .builder(factory)
            .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(expiration));
    
    
        return builder.build();
      }
    
      @Bean(name="redisTemplate")
      public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        redisTemplate.setKeySerializer(stringRedisSerializer());
        redisTemplate.setHashKeySerializer(stringRedisSerializer());
        redisTemplate.setValueSerializer(stringRedisSerializer());
        redisTemplate.setHashValueSerializer(stringRedisSerializer());
        return redisTemplate;
      }
    

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2014-02-28
      • 2015-03-16
      • 2018-09-14
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多