数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

Spring Boot设置并使用缓存的步骤

来源:脚本之家  责任编辑:小易  

几个缓存注解的作用:

@Cacheable:将方法的返回结果根据key指定的键保存在缓存中,以后要获取相同的数据直接从缓存中共获取

  • cacheNames/value:指定Cache组件名称
  • key:指定缓存时使用的key,默认使用方法参数值,可以使用#a0、#p0、#参数名等,支持SpEL表达式,root可省略
  • keyGenerator:指定key的生成器的组件id,如自定义的KeyGenerator
  • cacheManager:指定缓存管理器
  • cacheResolver:指定缓存解析器
  • condition:指定在哪种条件下缓存,如condition = “#id>=1”在参数>=1时缓存
  • unless:指定该条件为真时不缓存
  • sync:指定是否使用异步模式

@CachePut:不管缓存中是否有需要的数据,都会执行该注解标注的方法,并将结果更新到缓存,属性见上

@CacheEvit:执行方法后,清除key指定的缓存

  • allEntries:默认为false,值为true,删除所有缓存
  • beforeInvocation:默认为false,值为true,在方法调用之前清除缓存

@CacheConfig:定义一些通用或公共的规则,如cacheNames、keyGenerator等

可使用的SpEL表达式:

使用缓存的步骤:

(1)创建一个Spring Boot应用,勾选Cache、Web、MySQL、Mybatis模块,在主程序类上添加注解,开启基于注解的缓存

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

(2)创建JavaBean,和数据库中的表对应,并配置数据源

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)创建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)创建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)创建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:第一次查询数据,控制台发出sql语句,之后再查询直接从缓存中获取
@CachePut:调用方法修改某个数据后,再次查询该数据是从缓存中获取的更新后的数据
@CacheEvict:调用该方法后,再次查询某个数据需要重新发出sql语句查询

ps:之前只是用markdown记笔记,今天第一次用markdown写文章,写起来好舒服啊QAQ

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:


  • 本文相关:
  • 在spring boot中使用java线程池executorservice的讲解
  • spring boot之springapplication 事件监听
  • springboot+swagger-ui自动生成api文档
  • springboot与quartz集成实现分布式定时任务集群的代码实例
  • springboot项目整合mybatis的方法步骤与实例
  • springboot整个启动过程的分析
  • 详解springboot注册windows服务和启动报错的原因
  • springboot深入理解之内置web容器及配置的总结
  • springboot集成shiro,myrealm中无法@autowired注入service的问题
  • spring boot中使用spring-data-jpa的配置方法详解
  • spring拦截器handlerinterceptor接口代码解析
  • mybatis连接mysql8出现的问题解决方法
  • java窗体居中显示的2种方法(实例讲解)
  • java设计模式之工厂模式实现方法详解
  • 修改maven本地仓库路径的方法
  • java中的同步与异步详细介绍
  • java日期相关类实例详解
  • 2018年java技术面试题整理
  • java局域网聊天小程序
  • 一种求正整数幂的高效算法详解
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved