springtboot缓存之@CacheEvict
时间:2022-07-23
本文章向大家介绍springtboot缓存之@CacheEvict,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接上一节
@CacheEvict:缓存清除。
应用场景:我们删除了数据库中的数据之后,将缓存也进行删除。
package com.gong.springbootcache.controller;
import com.gong.springbootcache.bean.Employee;
import com.gong.springbootcache.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class EmployeeController {
@Autowired
EmployeeService employeeService;
//value:指定缓存的名字,每个缓存组件有一个唯一的名字。缓存组件由CacheManager进行管理。
//key:缓存数据时用到的key,默认使用方法参数的值,1-方法返回值 key =
//#id也可这么表示:#root.args[0](第一个参数)
//keyGenerator:指定生成缓存的组件id,使用key或keyGenerator其中一个即可
//cacheManager,cacheResolver:指定交由哪个缓存管理器,使用其中一个参数即可
//condition:指定符合条件时才进行缓存
//unless:当unless指定的条件为true,方法的返回值就不会被缓存
//sync:是否使用异步模式
//"#root.methodName+'[+#id+]'"
@Cacheable(value = "emp")
@ResponseBody
@RequestMapping("/emp/{id}")
public Employee getEmp(@PathVariable("id") Integer id){
Employee emp = employeeService.getEmp(id);
return emp;
}
@CachePut(value = "emp",key="#employee.id")
@ResponseBody
@GetMapping("/emp")
public Employee updateEmp(Employee employee){
Employee emp = employeeService.updateEmp(employee);
return emp;
}
@CacheEvict(value = "emp",key = "#id")
@ResponseBody
@GetMapping("/emp/del/{id}")
public String deleteEmp(@PathVariable("id") Integer id){
employeeService.deleteEmp(id);
return "删除成功";
}
}
首先也是查询两次:
第一次发送sql请求,第二次直接从缓存中获取。
然后我们进行删除:
最后再进行一次查询:
查询不到数据,然后我们看控制台:
说明了:缓存中没数据了,同时数据库中的数据也被删除了。
@CacheEvict还有个allEntries属性,默认为false,我们可以将其设置为,清除指定缓存中的所有缓存,这里是emp。
@CacheEvict还有个beforeInvocation属性,默认为false,表示缓存是否在方法执行之前进行清除。默认为false是在方法执行之后执行。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- laravel框架使用极光推送消息操作示例
- 对pycharm 修改程序运行所需内存详解
- Python小工具之消耗系统指定大小内存的方法
- Thinkphp框架+Layui实现图片/文件上传功能分析
- PHP实现单例模式建立数据库连接的方法分析
- 解决Python2.7中IDLE启动没有反应的问题
- PHP中mysqli_get_server_version()的实例用法
- 在unittest中使用 logging 模块记录测试数据的方法
- 分享8个Laravel模型时间戳使用技巧小结
- 基于python实现名片管理系统
- 记一个OLED编程中文显示函数的坑(留意变量数据类型的范围)
- tp5框架基于Ajax实现列表无刷新排序功能示例
- 浅谈pycharm下找不到sqlalchemy的问题
- PHP实现常用排序算法的方法
- 利用Python实现原创工具的Logo与Help