java - RediscacheManager 实例,Spring data redis 版本高于 2.0x

标签 java spring redis spring-data jedis

我之前使用的是 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;
    }

最佳答案

如果您将 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;
  }

关于java - RediscacheManager 实例,Spring data redis 版本高于 2.0x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471903/

相关文章:

java - 如何在FtpMessageHandler中设置目标目录?

php - Redis(键/值数据库)和关联数组之间的区别?

c# - StackExchange.Redis 中是否提供原始命令?

java - 将 json 日期解析为特定日期格式

Java : Pattern How to match any character or symbol in any order between the two braces

java - 比较对象数组元素中的特定属性

java - 使用 java.lang.Runtime.getRuntime 在 matlab 中调用多个 python 脚本实例不起作用

spring - 迁移到hibernate核心5.2.1 java.lang.NoSuchMethodError : org. hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;

java - maven简单项目中springApplication中的IllegalAccessError

关于客户端请求的 Redis 热点