在用下面这段代码的时候预编译报错,原因是在定义redisTemplate的时候默认只有RedisTemplate<String, String>类型
List<User> objectList = redisTemplate.opsForList().range(key, 0, -1);
此时我们需要添加配置文件,添加自己指定的类型,并扩展redisTemplate
在这里,我们定义了两个不同的RedisTemplate Bean:一个用于<String, Object>,另一个用于<String, List>。我们还使用@Qualifier注释在userListOperations Bean中指定使用哪个RedisTemplate。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean
public RedisTemplate<String, List<User>> userListRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, List<User>> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean
public ListOperations<String, User> userListOperations(@Qualifier("userListRedisTemplate") RedisTemplate<String, List<User>> redisTemplate) {
return redisTemplate.opsForValue();
}
}
若您已经定义了多个名为userListRedisTemplate的RedisTemplate bean,并且想要在注入时使用指定的RedisTemplate,可以使用@Qualifier注解结合bean名称指定具体的RedisTemplate。
例如,如果您已经定义了两个名为userListRedisTemplate和userObjectRedisTemplate的RedisTemplate bean,可以使用以下方式来注入名为userListRedisTemplate的RedisTemplate:
@Autowired
@Qualifier("userListRedisTemplate")
private RedisTemplate<String, List<User>> redisTemplate;