SpringBoot日记——Cache缓存篇
通常我们访问数据的情况如下图,数据存缓存就取缓存,不存缓存就取数据库,这样可以提升效率,不用一直读取数据库的信息:

开始记录:
关于SpringBoot缓存的应用
1. 首先在pom.xml文件中添加如下:
<dependency>
<!-- cache缓存 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2.在application的main方法中添加注解 @EnableCaching ,以开启缓存注解的应用:
@SpringBootApplication
@EnableCaching
public class AppConfig { public static void main(String[] args) {
SpringApplication.run(AppConfig.class, args);
}
}
3.在service等需要添加入缓存的方法前加入注解 @Cacheable (使用缓存,不调用方法)
/**
* 根据ID查找用户信息,将方法运行结果进行缓存:以后再要相同数据,直接从缓存取,不需要调用方法;
*/
@Cacheable(cacheNames = {"cache1"}) //cacheNames或value都可以,表示你自定义的缓存容器的名字,这里使用大括号是说明可以存在多个缓存中使用
public User findById(Integer id) {
log.info("查询 ID=" + id + " 的结果");
User byId = userDao.findById(id);
return byId;
}
3.1 缓存参数及条件的使用,采用pESL写法:
// key表示该缓存的key,值是方法中的value; condition表示如果xx就使用缓存; unless表示如果xx就不使用缓存;
// 可以在condition或unless的双引号中用and来拼各种其他条件
@Cacheable(cacheNames = {"acc"}, key= "#root.methodName",condition = "#id>2",unless = "#a0==null")
4. 在service或需要的方法前加入@CachePut注解(即调用方法,又写数据库),用于修改数据库或更新缓存
@CachePut(value = "acc",key = "#user.id")
public User update(User user) {
System.out.println("更新信息" + user);
userDao.update(user);
return user;
}
5.清除缓存,@CacheEvict。通常使用allEntries = true可以清除全部缓存,即不用单独制定key
@CacheEvict(value = "acc", allEntries = true)
public void delete(Integer id) {
userDao.delete(id);
}
6.如果需要许多条件的叠加,使用@Caching,图示例子如下:

7. service下边每个方法都要写缓存名字比较麻烦,通常我们将总的名字写在service的类前边,@CacheConfig(cacheNames = {"emp"}),依次类推,把公共的缓存配置都写在这里就可以了;
通常来说,我们在开发过程中,多使用的是缓存中间件,比如:Redis、memcached、ehcache等;
SpringBoot默认使用的是SimpleCacheConfiguration的配置,然而还有许多其他的配置可用,那么我们后边来看一下Redis要如何配置。
SpringBoot日记——Cache缓存篇的更多相关文章
- SpringBoot系列——cache缓存
前言 日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录springboot中使用cache缓存. 官方文档介绍:https://docs.spring ...
- springboot(九) Cache缓存和Redis缓存
1. Cache缓存 1.1 缓存的概念&缓存注解 Cache 缓存接口,定义缓存操作.实现有:RedisCache.EhCacheCache.ConcurrentMapCache等 Cach ...
- 深度理解springboot集成cache缓存之源码解析
一.案例准备 1.创建数据表(employee表) 2.创建Employee实体类封装数据库中的数据 @AllArgsConstructor @NoArgsConstructor @Data @ToS ...
- SpringBoot日记——Web开发篇
准备开始实战啦!~~~~ 我们先来看,SpringBoot的web是如何做web开发的呢?通常的步骤如下: 1.创建springboot应用,指定模块: 2.配置部分参数配置: 3.编写业务代码: 为 ...
- SpringBoot日记——日志框架篇
在项目的开发中,日志是必不可少的一个记录事件的组件,所以也会相应的在项目中实现和构建我们所需要的日志框架. 而市面上常见的日志框架有很多,比如:JCL.SLF4J.Jboss-logging.jUL. ...
- Springboot日记——核心编码篇
背景吐槽:想要让自己进阶一下,一定要有个可以拿出来秀的东西,所以要尝试写一个属于自己的网站或者平台.因此,我大概的看了一下springboot+Mybatis-plus+... 框架介绍 通常 SSM ...
- SpringBoot日记——编码配置篇
插入一个小篇章,有人在编写代码的时候,要么控制台乱码,要么页面乱码等等, 我这里有个配置,可以解决各种乱码问题,直接来看. # ==================== 编码配置 ========== ...
- Springboot使用ehcache缓存
本文部分步骤继承于springboot使用cache缓存,如果有不清楚的,请移驾springboot使用cache缓存 ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java ...
- SpringBoot日记——缓存的使用
SpringBoot核心技术的东西基本上都有介绍过了,接下来,进阶点~来说说缓存吧~ 缓存这个词不少同学应该不会很陌生.而我们这里主要使用的就是Redis. 客户端第一次请求的时候是从库里拿出我们需要 ...
随机推荐
- Mysql--通俗易懂的左连接、右连接、内连接
刚开始看书的时候花了好长时间理解 先通俗易懂的描述下: left join(左联接): 返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接): 返回包括右表中的所有记录 ...
- Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
之前按照前面一篇文章提到的部署了ogre1.9,后来查询资料,有的提到关于vs2010还是安装ogre1.8比较稳定,由于是小白,又比对着几篇文章重新配置了一遍. 从一开始的什么都不会,到现在能知道每 ...
- 一、HTML概述 二、web相关的概念 三、HTML的常用标签
一.HTML概述###<1>概念 HTML:Hypertext Markup Language,超文本 标记语言,用来描述网页的一种语言. 非编程语言,由浏览器直接解释运行. ###< ...
- 安全预警-防范新型勒索软件“BlackRouter”
近期,出现一种新型勒索软件“BlackRouter”,开发者将其与正常软件恶意捆绑在一起,借助正常软件的下载和安装实现病毒传播,并以此躲避安全软件的查杀.目前,已知的被利用软件有AnyDesk工具(一 ...
- November 16th 2016 Week 47th Wednesday
Success is falling nine times and getting up ten. 成功就是哪怕跌倒九次,也要在第十次爬起来. For most of us, we may choos ...
- mybatis中使用in查询时的注意事项
1. 当查询的参数只有一个时 findByIds(List<Long> ids) 1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list < ...
- linux 使用错误总结
1.执行./shutdown.sh或./startup.sh命令,报错”Permission denied“(用户没有权限),执行以下语句: chmod u+x *.sh
- 初识Qt窗口界面
1.新建一个新的Qt Gui应用,项目名称随意,例如MyMainWindow,基类选择QMainWindow,类名为MainWindow. 2.项目建立后,双击mainwindow.ui文件,在界面的 ...
- 4.使用Jackson将Json数据转换成实体数据
Jar下载地址:http://jackson.codehaus.org/ 注意: 一.类中的属性名称一定要和Json数据的属性名称一致(大写和小写敏感),类之间的嵌套关系也应该和Json数据的嵌套关系 ...
- ios学习路线—Objective-C(新特性)
1.方法顺序无关 Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的 ...