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. 客户端第一次请求的时候是从库里拿出我们需要 ...
随机推荐
- Exchange & Office 365最小混合部署
前言 这篇文章的主题是混合部署~ 混合使得本地组织和云环境像一个单一的.协作紧密的组织一样运作.当组织决定进行混合部署,达到本地Exchange Server和Office 365共存的状态时,就会面 ...
- wordpress利用rsync同步备份
我搭建的wordpress服务器现在使用的系统是opensuse, 服务器上面已做脚本和计划任务将wordpress使用的数据库与web目录每天压缩备份放到 /data/backup目录下 opera ...
- 解决windows10下无法安装.net framework 3.5,错误代码0x800F081F
1.下载 NET Framework 3.5的安装包netfx3.cab: http://download.windowsupdate.com/d/msdownload/update/software ...
- playfair
又是一道实验吧的题,哈哈,我比较弱. 因为题目写了play我首先想到的是playfair,好,下面先看下百科 好了,已知了密钥: 所以有: s n f m th b g o ui c j p vy d ...
- Array.prototype.reduce 的理解与实现
Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...
- Regular Expression Patterns
Regular Expression Patterns Following lists the regular expression syntax that is available in Pytho ...
- python第三课——数据类型2
day03: 1.列表:list 特点:有序的(有索引.定义和显示顺序是一致的).可变的(既可以改变元素内容也可以自动扩容).可重复的. 可以存储任何的数据类型数据 定义个列表如下: lt = ['宋 ...
- swift的异常处理:本质是错误信息的传递方式
func response(from resultObject: Any) throws -> Response { guard let dict = resultObject as? [Str ...
- 1898: [Zjoi2005]Swamp 沼泽鳄鱼
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1582 Solved: 870 [Submit][S ...
- ElasticSearch 简单的 搜索 聚合 分析
一. 搜索1.DSL搜索 全部数据没有任何条件 GET /shop/goods/_search { "query": { "match_all": {} } } ...