对象可以不用实现序列化
public class User{
private Integer id ;
private String userName ;
private String password ;
public User(Integer id, String userName, String password) {
this.id = id;
this.userName = userName;
this.password = password;
}
}
使用 Jackson2JsonRedisSerializer 替换默认序列化,设置序列化规则,不然key 和 value都以二进制存储。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用 Jackson2JsonRedisSerializer 替换默认序列化
Jackson2JsonRedisSerializer genericFastJsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// 设置key和value的序列化规则
redisTemplate.setKeySerializer(new GenericToStringSerializer<>(Object.class));
redisTemplate.setValueSerializer(genericFastJsonRedisSerializer);
// 设置hashKey和hashValue的序列化规则
redisTemplate.setHashKeySerializer(new GenericToStringSerializer<>(Object.class));
redisTemplate.setHashValueSerializer(genericFastJsonRedisSerializer);
// 设置支持事物
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
直接@Autowired 自动注入
@SpringBootTest
public class RedisTemplateTest {
@Autowired
private RedisTemplate<Object, Object> redisTemplateOject;
@Test
public void testKey(){
User user = new User(2,"mary","3545");
redisTemplateOject.opsForValue().set("user",user);
}
}