010_StringRedisTemplate
上面的缺点就是会使用内存空间去占用字节码
1、为了节省内存空间,我们并不会使用JSON序列化来处理value,而是使用统一的String序列化器,要求只能存储String 类型的key和value。
2、当要存储Java对象的时候,手动完成对象的序列化以及反序列化
3、Spring中提供了一个StringRedisTemplate类,它的key以及value都是默认为String方式。省去了我们自定义RedisTemplate的过程。
代码测试如下。
package com.ym.redisdemo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ym.redisdemo.pojo.User;
import lombok.val;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
class RedisStringTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
stringRedisTemplate.opsForValue().set("lover","李易峰");
Object name = stringRedisTemplate.opsForValue().get("lover");
System.out.println("lover="+name);
}
private static final ObjectMapper mapper=new ObjectMapper();
@Test
void testSaveUser() throws JsonProcessingException {
User user=new User("李易峰",21);
String json = mapper.writeValueAsString(user);
stringRedisTemplate.opsForValue().set("user:101",json);
String o = stringRedisTemplate.opsForValue().get("user:101");
User user1 = mapper.readValue(o, User.class);
System.out.println(user1);
}
}
总结:
关于RedisTemplate的两种序列化实践方案
- 方案1:
(1) 自定义RedisTemplate (2) 修改RedisTemplate的序列化器GenericJackson2JsonRedisSerializer - 方案2:
(1) 使用StringRedisTemplate (2) 写入Redis时,需要手动把对象序列化为Json (3) 读取Redis时,手动把读取的Json反序列化为对象
🤞
|