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. 客户端第一次请求的时候是从库里拿出我们需要 ...
随机推荐
- Microsoft Teams 版本与语音落地介绍
我亲爱的小伙伴们,失踪人口回归啦~~ 今天和大家聊的是Microsoft Teams,Teams作为协作的集大成者,可以实现skype for Business的所有功能,还可以在teams里集合Of ...
- linux中ftp提示--553 Could not create file
今天在阿里云的linux上搭建ftp服务的时候,搭建成功之后,上传文件时总提示553 Could not create file,找了半天原因,终于解决了 ftp主目录为/home/myftp /ho ...
- 解决由于显卡驱动BUG导致桌面右键卡顿的问题:bat文件源码
@ ECHO OFF%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...
- jQuery插件实例二:年华时代插件ReturnTop回到首页
这个插件功能在于当网页内容高度很高时,方便用户快速回到顶部.核心在于对屏幕高度的获取,定时器的使用,在引用代码后,只使用$.nhsd.returnTop();即可实现效果 效果图: 代码: ; fun ...
- 使用Ajax无刷新页面登录
<script> window.onload = function () { var myname = document.getElementById("uname") ...
- 【1】python-正则表达式语法规范与案例
正则表达式的用法与案例分析 2018-08-24 21:26:14 [说明]:该文主要为了随后复习和使用备查,由于做了word文档笔记,所以此处博文没有怎么排版,没放代码,以插入图片为主, 一.正则表 ...
- 关于layui(layer)子页面获取不到父页面jQuery对象的问题。
如果在使用layui-layer模块过程中,在子页面执行代码: window.parent.$("#id").val() 报错:window.parent.$ is not a f ...
- PHP设计模式系列 - 委托模式
委托模式 通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性. 应用场景 设计了一个cd类,类中有mp3播放模式,和mp4播放模式 改进前,使用cd类的播放模式,需要在实例化的 ...
- sql 模糊查询优化
在sql语句中使用 like模糊查询时,应该尽量避免%%,因为模糊查询是比较慢的,当出现这样的情况时,应该考虑优化. 举个例子:我在表中查询2012 年创建的记录 SELECT * FROM `com ...
- js面向对象理解
js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是, ...