栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

SpringBoot整合Redis

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合Redis

学习记录

springboot简单操作redis

1.导包

 

    org.springframework.boot
    spring-boot-starter-data-redis


    org.springframework.boot
    spring-boot-starter-web

2.编写启动类

@SpringBootApplication(scanbasePackages = "com.qf")
public class RedisApplication {
    public static void main(String[] args) {
        SpringApplication.run(RedisApplication.class,args);
    }
}

3.编写测试controller,执行http://localhost:8080/demo

@RestController
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/demo")
    public void test(){
        //往redis中存入name:xiaoming
        redisTemplate.opsForValue().set("name","xiaoming");
    }
}

虚拟机连接redis,查询发现结果是空的,通过代码拿取存储的值

Object name = redisTemplate.opsForValue().get("name");
System.out.println("拿到的redis值:"+name);

可以看到控制台拿到了存入的值,再看一下我们的redis客户端,也有存入值,这是为什么呢?
这是因为redis存储的结果string类型字符串,但是实际开发中我们是需要存储复杂的数据类型肯定不只是单单的string类型.spring帮我们把存储的值给序列化了,通过虚拟机操作redis的时候,不可能帮我们去进行反序列化的,所以就找不到一个key为name的值,就会出现(nil).

人为让spring框架不用自作主张序列化我们存入的值

@RestController
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;
    
    @PostConstruct
    public void init(){
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
    }
    @RequestMapping("/demo")
    public void test(){
        redisTemplate.opsForValue().set("name","xiaoming");
        //Object name = redisTemplate.opsForValue().get("name");
        //System.out.println("拿到的redis值:"+name);
    }
}

删除存入的name,重新添加name,虚拟机get name,可以看到已经取到值了,也可以看到redis客户端是没有序列化的


如果用了这个init方法,也就意味着我们舍弃了spring给我们提供的存储复杂类型,意味着我们只能存string类型的key和value.根据实际情况进行取舍.

方式2:不想自己写init方法,spring框架提供了 StringRedisTemplate反序列化

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

查看源码,可以看到,StringRedisTemplate也是帮我们写了init里一样的反序列化

两种方法都可以实现,反序列化.

@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @RequestMapping("/demo")
    public void test(){
        stringRedisTemplate.opsForValue().set("name","xiaoming");
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号