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

首先在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 ,如上代码。
使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次_第1张图片
原始代码是这样,如果我们每次根据同一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   

使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次_第2张图片
通过百度到这篇博客得知
要将将pojo实现序列化
使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次_第3张图片
然后接口就可以测试成功了
使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次_第4张图片
统一条件查询,请求多次也只会到数据库中查询一次了,从而达到了优化性能的目的~
使用SpringDataRedis加入缓存,防止同一查询请求到数据库查询多次_第5张图片

你可能感兴趣的:(Java,SpringBoot)