溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Spring Boot中設置使用緩存

發(fā)布時間:2021-05-25 17:36:10 來源:億速云 閱讀:149 作者:Leah 欄目:編程語言

本篇文章為大家展示了怎么在Spring Boot中設置使用緩存,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

幾個緩存注解的作用:

@Cacheable:將方法的返回結果根據(jù)key指定的鍵保存在緩存中,以后要獲取相同的數(shù)據(jù)直接從緩存中共獲取

  • cacheNames/value:指定Cache組件名稱

  • key:指定緩存時使用的key,默認使用方法參數(shù)值,可以使用#a0、#p0、#參數(shù)名等,支持SpEL表達式,root可省略

  • keyGenerator:指定key的生成器的組件id,如自定義的KeyGenerator

  • cacheManager:指定緩存管理器

  • cacheResolver:指定緩存解析器

  • condition:指定在哪種條件下緩存,如condition = “#id>=1”在參數(shù)>=1時緩存

  • unless:指定該條件為真時不緩存

  • sync:指定是否使用異步模式

@CachePut:不管緩存中是否有需要的數(shù)據(jù),都會執(zhí)行該注解標注的方法,并將結果更新到緩存,屬性見上

@CacheEvit:執(zhí)行方法后,清除key指定的緩存

  • allEntries:默認為false,值為true,刪除所有緩存

  • beforeInvocation:默認為false,值為true,在方法調(diào)用之前清除緩存

@CacheConfig:定義一些通用或公共的規(guī)則,如cacheNames、keyGenerator等

可使用的SpEL表達式:

怎么在Spring Boot中設置使用緩存

使用緩存的步驟:

(1)創(chuàng)建一個Spring Boot應用,勾選Cache、Web、MySQL、Mybatis模塊,在主程序類上添加注解,開啟基于注解的緩存

@MapperScan(basePackages = "com.youngpain.cache.mapper")
@SpringBootApplication
@EnableCaching

(2)創(chuàng)建JavaBean,和數(shù)據(jù)庫中的表對應,并配置數(shù)據(jù)源

spring:
 datasource:
  url: jdbc:mysql://localhost:3306/mybatis_database
  username: root
  password: 1741248769
  driver-class-name: com.mysql.jdbc.Driver
 redis:
  host: 39.108.114.57
#開啟駝峰命名法
mybatis:
 configuration:
  map-underscore-to-camel-case: true
logging:
 level:
  com.youngpain.cache.mapper: debug

(3)創(chuàng)建mapper接口進行增刪改查操作

/**
 * 部門表的增刪改查操作
 */
public interface DepartmentMapper {
  @Insert("insert into department(id,depart_name,depart_build) values(#{id},#{depart_name},#{depart_build})")
  void insertDepartment(Department department);
  @Delete("delete from department where id=#{id}")
  void deleteDepartment(Integer id);
  @Update("update department set depart_name=#{departName},depart_build=#{departBuild} where id=#{id}")
  void updateDepartment(Department department);
  @Select("select * from department where id=#{id}")
  Department getDepartmentById(Integer id);
}

(4)創(chuàng)建service

@Service
@CacheConfig(cacheNames = {"departs"})
public class DepartmentService {
  @Autowired
  DepartmentMapper departmentMapper;
  @Cacheable(key = "#a0.id")
  public void insertDepartment(Department department) {
    departmentMapper.insertDepartment(department);
  }
  @CacheEvict(key = "#p0")
  public void deleteDepartment(Integer id) {
    departmentMapper.deleteDepartment(id);
  }
  @CachePut(key = "#a0.id")
  public Department updateDepartment(Department department) {
    departmentMapper.updateDepartment(department);
    return department;
  }
  @Cacheable(key = "#id", condition = "#p0>=1")
  public Department getDepartmentById(Integer id) {
    return departmentMapper.getDepartmentById(id);
  }
}

(5)創(chuàng)建controller

@Controller
public class DepartmentController {
  @Autowired
  DepartmentService departmentService;
  @GetMapping("/index")
  public String index() {
    return "index";
  }
  @GetMapping("/deleteDepart/{id}")
  public String deleteDepart(@PathVariable("id") Integer id, Model model) {
    model.addAttribute("condition", "delete");
    Department delete = departmentService.getDepartmentById(id);
    model.addAttribute("department", delete);
    departmentService.deleteDepartment(id);
    return "success";
  }
  @PostMapping("/updateDepart")
  public String updateDepart(Department department, Model model) {
    model.addAttribute("condition", "update");
    Department update = departmentService.updateDepartment(department);
    model.addAttribute("department", update);
    return "success";
  }
  @GetMapping("/getDepart/{id}")
  public String getDepartmentById(@PathVariable("id") Integer id, Model model) {
    model.addAttribute("condition", "delete");
    Department get = departmentService.getDepartmentById(id);
    model.addAttribute("department", get);
    return "success";
  }
}

(6)測試結果:

@Cacheable:第一次查詢數(shù)據(jù),控制臺發(fā)出sql語句,之后再查詢直接從緩存中獲取
@CachePut:調(diào)用方法修改某個數(shù)據(jù)后,再次查詢該數(shù)據(jù)是從緩存中獲取的更新后的數(shù)據(jù)
@CacheEvict:調(diào)用該方法后,再次查詢某個數(shù)據(jù)需要重新發(fā)出sql語句查詢

springboot是什么

springboot一種全新的編程規(guī)范,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

上述內(nèi)容就是怎么在Spring Boot中設置使用緩存,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI