使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次

版权声明:转载请注明出处~ https://blog.csdn.net/czjlghndcy/article/details/88384173

首先在pom文件中加入redis

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
     </dependency>

然后在application.yam文件中配置redis

  redis:
    host: 127.0.0.1

默认端口是6379,根据自己情况改变即可。

接下来修改代码,我已以根据id查询职业这个业务为例

     @Autowired
        private RedisTemplate redisTemplate;

在Sevice层加入RedisTemplate ,如上代码。
在这里插入图片描述
原始代码是这样,如果我们每次根据同一id来查询职业,是不是太消耗资源了呢?这个时候我们可以将查询存到缓存中来解决多次和数据库打交道这个问题,从而优化性能。
我们将上述代码改成:

    /**
     * 根据 id查询职业
     * @param id
     * @return
     */
    public Job findById(String id){
  //先从缓存中查到这个对象
        Job job= (Job)redisTemplate.opsForValue().get("job_"+id);

        //如果没有找到
        if(job == null){
            //执行数据库查询操作
            job = jobDao.findById(id).get();
            
            //将查询结果存到缓存中
            redisTemplate.opsForValue().set("job_"+id,job);
        }
        return job;
    }

但是在运行项目时候,测试接口的时候会报一个错

Servlet.service() for servlet [dispatcherServlet] in context with path [] thr   

在这里插入图片描述
通过百度到这篇博客得知
要将将pojo实现序列化
在这里插入图片描述
然后接口就可以测试成功了
在这里插入图片描述
统一条件查询,请求多次也只会到数据库中查询一次了,从而达到了优化性能的目的~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/czjlghndcy/article/details/88384173