南昌网站制作代理商,电子商城网站建议书,微信管理平台,英文网站开发上一篇说到改变了RedisTemplate的默认序列化器后#xff0c;在redis中存入Java对象后#xff0c;在redis中的呈现是#xff1a;会记录类的字节码 这也是代码中可以强制装换为对应的java对象的原因#xff1a; Test
void testStudent() {redisTemplate.opsForValue().set(在redis中存入Java对象后在redis中的呈现是会记录类的字节码 这也是代码中可以强制装换为对应的java对象的原因 Test
void testStudent() {redisTemplate.opsForValue().set(student:100, new Student(小明, 22));Student student (Student) redisTemplate.opsForValue().get(student:100);System.out.println(studentstudent);
} 存在的问题
因为每个对象都要存入class,随着对象越来越多也会带来内存额外的开销。
所以为了节省空间不会使用json的序列化器来处理value而是统一使用String序列化器要求只能存储String类型的key和value当需要存储java对象时手动完成对象的序列化和反序列化。 Spring默认提供了一个StringRedisTemplate类它的key和value的序列化方式默认就是String方式省去了我们自己定义RedisTemplate过程
Autowiredprivate StringRedisTemplate stringRedisTemplate;//json工具ObjectMapper objectMapper new ObjectMapper();Testvoid testJava() throws JsonProcessingException {//手动将java对象转成json字符串String studentJson objectMapper.writeValueAsString(new Student(晓东, 11));//写入一条数据到redisstringRedisTemplate.opsForValue().set(student:200,studentJson);//读取数据String studentJsonStr stringRedisTemplate.opsForValue().get(student:200);//手动将json数据转成java对象Student student objectMapper.readValue(studentJsonStr, Student.class);System.out.println(studentstudent);} 存入单个key-value、key-java对象都是可以的。 操作Hash类型的数据 Testvoid testHash() {stringRedisTemplate.opsForHash().put(user:400, name, 张大大);stringRedisTemplate.opsForHash().put(user:400, age, 18);//获取key对应所有的hash key valueMapObject, Object entries stringRedisTemplate.opsForHash().entries(user:400);entries.forEach((key, value)- System.out.println(key--value));} 这里注意存入hash的value需要时String类型比如上面的18不能写数字18而是要写字符串18。