目录
1. RedisTemplate
2. StringRedisTemplate
方案一:
- 自定义RedisTemplate
- 修改RedisTemplate的序列化器
- 写入数据时自动序列化
方案二:
- 使用StringRedisTemplate
- 手动序列化
- 手动反序列化
1. RedisTemplate
- 编写的java代码
@Test
void contextLoads2(){
User user = new User("可乐", 18);
ValueOperations<String, Object> opsForValue = redisTemplate.opsForValue();
opsForValue.set("user:1", user);
User o = (User) opsForValue.get("user:1");
System.out.println(o);
}
- RedisConfig配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 创建redistemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置连接工厂
template.setConnectionFactory(connectionFactory);
// 创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置Key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// 设置Value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
// 返回
return template;
}
}
- 由于是自动反序列化,所以在redis中存储了类型,这样挺占内存的。
2. StringRedisTemplate
@Autowired
StringRedisTemplate stringRedisTemplate;
// JSON工具
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void contextLoads4() throws JsonProcessingException {
User user = new User("可乐", 18);
// 手动序列化
String json = mapper.writeValueAsString(user);
//写入数据
stringRedisTemplate.opsForValue().set("user:2", json);
String s = stringRedisTemplate.opsForValue().get("user:2");
// 反序列化
User u = mapper.readValue(s, User.class);
System.out.println(u);
}
- 我使用了ObjectMapper这个转JSON的工具,手动序列化和反序列化,所以存储的只有数据