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