13.StringRedisTemplete使用

上一篇说到改变了RedisTemplate的默认序列化器后,在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("student="+student);
}

存在的问题:

因为每个对象都要存入class,随着对象越来越多也会带来内存额外的开销。

所以,为了节省空间,不会使用json的序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value,当需要存储java对象时,手动完成对象的序列化和反序列化。

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式,省去了我们自己定义RedisTemplate过程:

java 复制代码
@Autowired
    private StringRedisTemplate stringRedisTemplate;
    //json工具
    ObjectMapper objectMapper = new ObjectMapper();

    @Test
    void testJava() throws JsonProcessingException {
        //手动将java对象转成json字符串
        String studentJson = objectMapper.writeValueAsString(new Student("晓东", 11));
        //写入一条数据到redis
        stringRedisTemplate.opsForValue().set("student:200",studentJson);
        //读取数据
        String studentJsonStr = stringRedisTemplate.opsForValue().get("student:200");
        //手动将json数据转成java对象
        Student student = objectMapper.readValue(studentJsonStr, Student.class);
        System.out.println("student="+student);
    }

存入单个key-value、key-java对象都是可以的。

操作Hash类型的数据

java 复制代码
 @Test
    void testHash() {
        stringRedisTemplate.opsForHash().put("user:400", "name", "张大大");
        stringRedisTemplate.opsForHash().put("user:400", "age", "18");
        //获取key对应所有的hash key value
        Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("user:400");
        entries.forEach((key, value)-> System.out.println(key+"--"+value));
    }

这里注意存入hash的value需要时String类型,比如上面的18,不能写数字18,而是要写字符串18。

相关推荐
喵手19 小时前
玩转Java网络编程:基于Socket的服务器和客户端开发!
java·服务器·网络
再见晴天*_*20 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
MarkHard1231 天前
如何利用redis使用一个滑动窗口限流
数据库·redis·缓存
hdsoft_huge1 天前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
雨白1 天前
Java 多线程指南:从基础用法到线程安全
android·java
Hungry_Shark1 天前
IDEA版本控制管理之使用Gitee
java·gitee·intellij-idea
赛姐在努力.1 天前
《IDEA 突然“三无”?三秒找回消失的绿色启动键、主菜单和项目树!》
java·intellij-idea
猎板PCB黄浩1 天前
从废料到碳减排:猎板 PCB 埋容埋阻的绿色制造革命,如何实现环保与性能双赢
java·服务器·制造
ZzzK,1 天前
JAVA虚拟机(JVM)
java·linux·jvm
西红柿维生素1 天前
JVM相关总结
java·jvm·算法