方案一:
- 自定义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的工具,手动序列化和反序列化,所以存储的只有数据