我们在开发中,前后端传递对象是通过json格式,阿里巴巴有一个插件,就可以将我们创建的对象转化为json格式。
创建springboot项目,里面就集成了,我们使用的时候,直接创建这个jscksion的对象就可以了。具体的使用如下:
创建实体类
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private String name;
private int age;
}
往redis里面直接存储对象
@Test
void test1() throws JsonProcessingException {
User liu = new User("刘", 3);
redisTemplate.opsForValue().set("user",liu);
System.out.println(redisTemplate.opsForValue().get("user"));
}
会报错
原因是我们的对象没有序列化,如何改变呢?直接在实体类上面实现序列化接口
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User implements Serializable {
private String name;
private int age;
}
这样就可以将对象直接存储在redis里面了。一般企业中的实体类都要序列化。
经常需要向Redis中保存Java中Object或List等类型,这个时候就需要通过序列化器把Java中对象转换为字符串进行存储。
自己写的redistemplates的配置
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
// 我们为了开发方便,一般使用<String, Object>
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
// String 的序列化 对象
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash 的key采用String类型的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value 序列化方式使用Jackson
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
// hash 的value序列化采用Jackson
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
@SpringBootTest
class SpringbootRedisApplicationTests {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("ff","dd");
System.out.println(redisTemplate.opsForValue().get("ff"));
}
@Test
void test1() throws JsonProcessingException {
User liu = new User("刘", 3);
redisTemplate.opsForValue().set("user",liu);
System.out.println(redisTemplate.opsForValue().get("user"));
}
}