redis数据库是二进制存储数据的
spring默认使用jdk序列化将数据存进redis,通用性比较好,但不存在可读性
两种方式代替:
Jackson:
创建配置类配置redisTemplate的序列化,实现存入取出自动序列化
缺点:存对象会连同对象字节码存进去,占用空间
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
@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;
}
}
StringRedisTemplate
手动配置存入redis的序列化,只存key value进去,节省了redis空间
缺点:比较麻烦
@Autowaird
StringRedisTemplate stringRedisTemplate;
private static final ObjectMapper mapper = new ObjectMapper(); //spring的 JSON序列化工具
@Test
void stringTest() throws JsonProcessingException {
//创建对象
User user = new User("张三", 18);
//手动序列化
String json = mapper.writeValueAsString(user);
//写入数据
stringRedisTemplate.opsForValue().set("userdata", json);
//获取数据
String userdata = stringRedisTemplate.opsForValue().get("userdata");
//手动反序列化
User readValue = mapper.readValue(userdata, User.class);
System.out.println(readValue);
}