当使用GenericJackson2JsonRedisSerializer序列化器时候,会在value处产生一个@class,方便在get的时候自动反序列化成java对象
@class有时候比所存入的数据还长,往往浪费内存
使用StringRedisTemplate,默认key和value使用string方式,不用再去使用RedisTemplate的配置类
使用 springMVC自带json转换工具ObjectMapper 来将Java对象序列化成String,使用stringRedisTemplate.opsForValue().set()来添加数据,这时进去的Java对象就不会出现@class,一个很清爽的json
获取数据时候获取到string类型,在使用ObjectMapper 来反json对象成Java对象即可
代码如下:
@SpringBootTest
public class test {
@Autowired
private StringRedisTemplate stringRedisTemplate;
// @Test
// public void m1() {
// stringRedisTemplate.opsForValue().set("name", "sry");
// Object name = stringRedisTemplate.opsForValue().get("name");
// System.out.println(name);
// }
private static final ObjectMapper mapper = new ObjectMapper();
@Test
public void m2() throws JsonProcessingException {
//创建三个对象
user user1 = new user(1, "a", 20);
user user2 = new user(2, "b", 20);
user user3 = new user(3, "c", 20);
//使用springmvc序列化工具使其变成string
String s1 = mapper.writeValueAsString(user1);
String s2 = mapper.writeValueAsString(user1);
String s3 = mapper.writeValueAsString(user1);
//写入三条数据
stringRedisTemplate.opsForValue().set("user:1", s1);
stringRedisTemplate.opsForValue().set("user:2", s2);
stringRedisTemplate.opsForValue().set("user:3", s3);
//获取数据
String jsonS1 = stringRedisTemplate.opsForValue().get("user:1");
String jsonS2 = stringRedisTemplate.opsForValue().get("user:2");
String jsonS3 = stringRedisTemplate.opsForValue().get("user:3");
//反序列化读取
user getUserInfo1 = mapper.readValue(jsonS1, user.class);
user getUserInfo2 = mapper.readValue(jsonS2, user.class);
user getUserInfo3 = mapper.readValue(jsonS3, user.class);
//打印
System.out.println(getUserInfo1.toString());
System.out.println("-------------------------------------------");
System.out.println(getUserInfo2.toString());
System.out.println("-------------------------------------------");
System.out.println(getUserInfo3.toString());
}
}
插入后的json对象:没有出现@class占用