美文网首页
springboot 缓存 20

springboot 缓存 20

作者: 张力的程序园 | 来源:发表于2020-04-08 08:28 被阅读0次

本文将介绍springboot缓存。

1、环境约束

  • win10 64位操作系统
  • idea2018.1.5
  • maven-3.0.5
  • jdk-8u162-windows-x64

2、前提约束

3、操作步骤

  • 在主启动类上开启缓存开关
@EnableCaching

在主启动类同级目录下创建一个CacheController.java

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserController {

    @Resource
    UserDao userDao;

    @GetMapping("/query")
    @Cacheable(value = "user")
    //缓存所有数据,较少使用
    public List<User> query() {
        List<User> list = userDao.findAll();
        return list;

    }

    @GetMapping("/get")
    @Cacheable(value = "user", key = "#id")
    //方法中使用到了@Cacheable注解,这个注解在执行前先查看缓存中是不是已经存在了,
    //如果存在,直接返回。如果不存在,将方法的返回值放入缓存。
    public User get(int id) {
        return userDao.findById(id).get();
    }

    @GetMapping("/insert")
    @CachePut(value = "user", key = "#user.id")
    //方法中使用到了@CachePut注解,这个注解直接将返回值放入缓存中,通常用于保存和修改方法中
    public User insert(User user) {
        userDao.save(user);
        System.out.println("123");
        return user;
    }

    @GetMapping("/delete")
    @CacheEvict(value = "user", key = "#id")
    //方法中使用到了@CacheEvict注解,将特定缓存移除
    public String deleteHouse(Integer id) {
        return "success";
    }

    @GetMapping("/deletecache")
    @CacheEvict(value = "user", allEntries=true )
    //方法中使用到了@CacheEvict注解,这个注解是清除所有缓存
    public void deletecache(Integer id) {

    }
}
  • 修改application.properties,增加日志打印配置:
spring.jpa.show-sql=true
  • 启动,测试,假设启动端口为8080,访问 http://localhost:8080/query?id=1 两次,第一次执行日志打印sql,第二次就没有打印sql,说明第2次没有去查询数据库,缓存起了作用。

相关文章